精华内容
下载资源
问答
  • 2021-07-11 00:18:11

    内容介绍

    动态网页制作学习网站的设计与实现

    摘要 在Internet飞速发展的今天,电子数字计算机是20世纪重大科技发明之一而互联网成为人们快速获取、发布和传递信息的重要渠道,它在人们政治、经济生活等各个方面发挥着重要的作用。Internet上发布信息主要是通过网站来实现的,获取信息也是要在Internet“海洋”中按照一定的检索方式将所需要的信息从网站上下载下来。因此动态网建设在Internet应用上的地位显而易见,它已成为机关、学校、企事业单位、甚至进入寻常百姓家的信息化建设中的重要组成部分,从而倍受人们的重视。

    本网站页面主要由Dreamweaver软件设计的静态html页面和利用ASP技术制作的动态页面构成。其中详细介绍了关于用户注册、用户登录、聊天室以及留言板的设计与实现。

    关键词 Dreamweaver ASP技术 access数据库

    目 录

    引 言1

    1.开发工具及编程环境2

    1.1.开发工具2

    1.2.编程环境2

    2.动态网站的工作原理3

    2.1.WEB工作原理3

    2.2.动态页面工作原理4

    3.ASP简介及ASP技术工作原理6

    3.1.ASP简介6

    3.1.1.ASP页面的结构6

    3.1.2.ASP的运行环境6

    3.1.3.ASP的内建对象6

    3.1.4.ASP的内置组件7

    3.2.ASP技术工作原理7

    3.4.ASP访问数据库8

    4.需求分析9

    4.1.系统功能分析9

    4.2.各个模块具体功能10

    4.2.1.会员注册与登录模块10

    4.2.2.留言模块10

    4.2.3.聊天模块10

    5.数据库设计11

    5.1.数据库需求分析11

    5.2.数据表的设计11

    6.动态网站系统实现13

    6.1.系统编码原则13

    6.1.1.编码实现原则13

    6.1.2.代码编写规范13

    6.2.系统实现13

    6.2.1.网站首页13

    6.2.2.用户注册页14

    6.2.3.聊天室页面15

    6.2.4.留言板页面16

    6.2.5.后台管理页面17

    结束语18

    参考文献19

    更多相关内容
  • 关于动态网页的源文件,也是下别人的,搭建共享
  • 动态网页模板

    2018-12-25 15:36:36
    嵌入了动态插件以及图片,得出的效果很显然,让人焕然一新,最后希望能帮到大家。
  • 但许多时候,爬虫取到的页面仅仅是一个静态的页面,即网页 的源代码,就像在浏览器上的“查看网页源代码”一样。一些动态的东西如javascript脚本执行后所产生的信息,是抓取不到的,这里暂且先给出这么一 些方案,可...
  • CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。 而且CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。...
  • 网球体育动态响应式网页模板
  • 网球俱乐部动态响应式网页模板
  • 动态网站主页转静态软件主要功能是为把动态网站主页,转成静态的网站主页,让网站的速度、安全都大大的提高。用户也不用天天得想怎么把自己的网站的主页转成静态的,以便浏览速度和网站安全都提高。现在有了这个...
  • 网络技术课程动态响应式网站模板
  • JavaScript 动态网页设计期末大作业CHASMISH眼镜(纯手打,高分项目)。 JavaScript 动态网页设计期末大作业CHASMISH眼镜(纯手打,高分项目)。 JavaScript 动态网页设计期末大作业CHASMISH眼镜(纯手打,...
  • 静态网页动态网页

    2022-03-09 12:15:43
    静态网页动态网页 本节我们了解一下静态网页动态网页的相关概念。如果您熟悉前端语言的话,那么您可以快速地了解本节知识。 当我们在编写一个爬虫程序前,首先要明确待爬取的页面是静态的,还是动态的,只有确定...

    静态网页和动态网页

    本节我们了解一下静态网页和动态网页的相关概念。如果您熟悉前端语言的话,那么您可以快速地了解本节知识。

    当我们在编写一个爬虫程序前,首先要明确待爬取的页面是静态的,还是动态的,只有确定了页面类型,才方便后续对网页进行分析和程序编写。对于不同的网页类型,编写爬虫程序时所使用的方法也不尽相同。

    静态网页

    静态网页是标准的 HTML 文件,通过 GET 请求方法可以直接获取,文件的扩展名是.html、.htm等,网面中可以包含文本、图像、声音、FLASH 动画、客户端脚本和其他插件程序等。静态网页是网站建设的基础,早期的网站一般都是由静态网页制作的。静态并非静止不动,它也包含一些动画效果,这一点不要误解。

    我们知道,当网站信息量较大的时,网页的生成速度会降低,由于静态网页的内容相对固定,且不需要连接后台数据库,因此响应速度非常快。但静态网页更新比较麻烦,每次更新都需要重新加载整个网页。

    静态网页的数据全部包含在 HTML 中,因此爬虫程序可以直接在 HTML 中提取数据。通过分析静态网页的 URL,并找到 URL 查询参数的变化规律,就可以实现页面抓取。与动态网页相比,并且静态网页对搜索引擎更加友好,有利于搜索引擎收录。

    动态网页

    动态网页指的是采用了动态网页技术的页面,比如 AJAX(是指一种创建交互式、快速动态网页应用的网页开发技术)、ASP(是一种创建动态交互式网页并建立强大的 web 应用程序)、JSP(是 Java 语言创建动态网页的技术标准) 等技术,它不需要重新加载整个页面内容,就可以实现网页的局部更新。

    动态页面使用“动态页面技术”与服务器进行少量的数据交换,从而实现了网页的异步加载。下面看一个具体的实例:打开百度图片(https://image.baidu.com/)并搜索 Python,当滚动鼠标滑轮时,网页会从服务器数据库自动加载数据并渲染页面,这是动态网页和静态网页最基本的区别。如下所示:

    动态网页

    图3:动态网页(点击看高清图)

    动态网页中除了有 HTML 标记语言外,还包含了一些特定功能的代码。这些代码使得浏览器和服务器可以交互,服务器端会根据客户端的不同请求来生成网页,其中涉及到数据库的连接、访问、查询等一系列 IO 操作,所以其响应速度略差于静态网页。

    注意:一般网站通常会使用动静相结合的方式,使其达到一种平衡的状态。可参考《网站搭建动静结合》进行简单了解。

    当然动态网页也可以是纯文字的,页面中也可以包含各种动画效果,这些都只是网页内容的表现形式,其实无论网页是否具有动态效果,只要采用了动态网站技术,那这个网页就称为动态网页。

    抓取动态网页的过程较为复杂,需要通过动态抓包来获取客户端与服务器交互的 JSON 数据。抓包时,可以使用谷歌浏览器开发者模式(快捷键:F12)Network选项,然后点击 XHR,找到获取 JSON 数据的 URL,如下所示:

    动态网页抓取数据

    图4:Chrome抓取数据包(点击看高清图)

    或者您也可以使用专业的抓包工具 Fiddler(点击访问)。关于动态网页的数据抓取,在后续内容会做详细讲解。

    展开全文
  • Python动态网页爬取

    2021-01-20 02:18:00
    前面所讲的都是对静态网页进行抓取,本博客介绍动态网站的抓取。 动态网站的抓取 相比静态网页来说困难一些,主要涉及的技术是Ajax和动态Html。简单的网页访问是无法获取完整的数据,需要对数据加载流程进行分析。...
  • 动态网站 网页

    2012-06-11 14:15:53
    网页设计 动态网站 asp html css
  • 这个用易语言写的动态网站,效率非常的低只是为了玩一玩,想进一步了解一下http协yi是什么的可以看一下
  • 实验一 Web 服务器的配置与简单动态网页设计 实验设计人 罗向东 [实验目的和要求] 1熟悉Web 服务的体系结构与工作原理掌握利用Apache 实现Web 服务 器的基本配置与管理并利用CGI 实现简单动态网页的设计 2 掌握利用...
  • 动态网页的抓取

    千次阅读 热门讨论 2021-06-04 21:32:21
    文章目录已写章节第五章 动态网页的抓取(Selenium)5.1 Ajax的原理5.2 Selenium的使用5.2.1 准备工作5.2.2 Selenium的使用1. 声明浏览器对象2. 访问页面3. 查找节点4. 查找多个节点5. 节点交互6. 动作链7. 滑动页面8....

    已写章节

    第一章 网络爬虫入门
    第二章 基本库的使用
    第三章 解析库的使用
    第四章 数据存储
    第五章 动态网页的抓取


    第五章 动态网页的抓取(Selenium)

    有时候我们在用requests抓取页面的时候,得到的结果可能和我们在浏览器中看到的结果不一样:在浏览器中可以正常看到页面数据,但是使用requests得到的结果并没有。这是因为requests库获取的都是原始的HTML文档,而在浏览器中看到的页面是经过JavaScript处理数据后生成的结果,这些数据来源有很多种,可能是通过Ajax加载的,可能是包含在HTML文档中的,也有可能是经过JavaScript和特定的算法计算后生成的。如果是通过Ajax加载的,原始页面最初不会包含某些数据,原始页面加载完之后,会再向服务器请求某个接口获取数据,然后数据才被处理从而呈现在网页上,这其实就是发生了一个Ajax请求。如果遇到这样的页面,需要分析出网页后台向服务器发送的Ajax请求,如果可以使用requests来模拟Ajax请求,那么就可以成功抓取了。


    5.1 Ajax的原理

    Ajax(Asynchronous JavaScript nad XML),即异步的JavaScript和XML。它不是一门编程语言,而是利用JavaScript在保证网页不被刷新、页面不改变的情况下与服务器交换数据并更新部分网页的技术。

    例如:打开tx视频,在电影中,鼠标的滑轮向下划,你会发现电影好像没有尽头,有时候最下面会出现加载的动画。页面其实并没有整个刷新,链接也并没有变化,但是网页中新增加了电影,这就是通过Ajax获取新数据并呈现的过程。

    Ajax有其特殊的请求类型,它是xhr,可以在Chrome的检查中选择xhr查看。

    模拟Ajax请求来爬取tx视频的例子:

    import requests
    from fake_useragent import UserAgent
    from lxml import etree
    import re
    from typing import NoReturn, List
    import time
    import mysql.connector
    
    def start() -> NoReturn:
        first_url = 'https://v.qq.com/channel/movie?listpage=1&channel=movie&itype=100062'
        base_url = 'https://v.qq.com/x/bu/pagesheet/list?append=1&channel=movie&itype=100062&listpage=2&offset={}&pagesize=30'
        create_table()
        storage_MysqlDB(get_page(first_url), 1)
        page_numbers = ((get_number_of_movies(first_url)-30)//30)+1
        for i in range(1, page_numbers):
            url = base_url.format(str(i*30))
            storage_MysqlDB(get_page(url), (i*30)+1)
            # time.sleep(5)
    
    
    def get_number_of_movies(url: str) -> int:
        headers = {
            'user-Agent': UserAgent().chrome
        }
        response = requests.get(url=url, headers=headers)
        response.encoding = response.apparent_encoding
        e = etree.HTML(response.text, etree.HTMLParser())
        number_of_movies = e.xpath('//body/div[5]/div/div/div/span/text()')[0]
        return int(number_of_movies)
    
    def get_page(url: str) -> List[List]:
        response = requests.get(url=url, headers={'user-Agent': UserAgent().chrome})
        response.encoding = response.apparent_encoding
        e = etree.HTML(response.text, etree.HTMLParser())
    
        all_div = e.xpath('//div[@class="list_item"]')
        res = []
        for div in all_div:
    
            movies_name = div.xpath('./div[1]/a/@title')
    
            hrefs = div.xpath('./div[1]/a/@href')
    
            performers = div.xpath('./div[1]/div/text()')
            performers = [i.replace('主演:', '') for i in performers]
    
            number_of_observers = div.xpath('./div[2]/text()')
    
            film_length = div.xpath('./a/div[1]/text()')
    
            score = div.xpath('./a/div[2]/text()')
    
    
    
            if len(movies_name) == 0:
                movies_name = ['None']
    
            if len(hrefs) == 0:
                hrefs = ['None']
    
            if len(performers) == 0:
                performers = ['None']
    
            if len(number_of_observers) == 0:
                number_of_observers = ['None']
    
            if len(film_length) == 0:
                film_length = ['None']
    
            if len(score) == 0:
                score = ['None']
    
            tem = []
            tem.append(str(movies_name[0]))
            tem.append(str(hrefs[0]))
            tem.append(str(performers[0]))
            tem.append(str(number_of_observers[0]))
            tem.append(str(film_length[0]))
            tem.append(str(score[0]))
            res.append(tem)
        print(res)
        return res
    
    
    def create_table():
        mydb = mysql.connector.connect(
            host='localhost',
            user='root',
            passwd='123456',
            port=3307,
            charset='utf8'
        )
        mycursor = mydb.cursor()
        sql_create_table = [
            "USE reptile;",
            "CREATE TABLE IF NOT EXISTS tencent_movies(\
             ID INT AUTO_INCREMENT COMMENT '编号',\
             movies_name VARCHAR(40) COMMENT '电影名',\
             hrefs VARCHAR(100) COMMENT '链接',\
             performers VARCHAR(100) COMMENT '主演',\
             number_of_observers VARCHAR(20) COMMENT '播放量',\
             film_length VARCHAR(20) COMMENT '电影时长',\
             score varchar(4) COMMENT '评分',\
             PRIMARY KEY(ID)\
             )COMMENT = 'All movie information in Tencent video'\
             ENGINE = INNODB CHARSET='utf8mb4' COLLATE='utf8mb4_unicode_ci';"
        ]
        for i in sql_create_table:
            mycursor.execute(i)
    
    def storage_MysqlDB(data: List, start: int)-> None:
        mydb = mysql.connector.connect(
            host='localhost',
            user='root',
            passwd='123456',
            port=3307,
            charset='utf8',
            database='reptile'
        )
        mycursor = mydb.cursor()
        sql_insert = "insert into tencent_movies values(%s, %s, %s, %s, %s, %s, %s)"
        for i in data:
            i.insert(0, start)
            new_i = tuple(i)
            mycursor.execute(sql_insert, new_i)
            # print(start)
            # time.sleep(1)
            start += 1
        mydb.commit()
        mycursor.close()
    
    if __name__ == '__main__':
        start()
    

    在上面,我们介绍了Ajax,并使用requests来模拟Ajax请求来爬取数据。

    但是,JavaScript动态渲染页面不止Ajax这一种。有很多网页是由JavaScript产生的,并不会包含Ajax请求。淘宝页面也是使用Ajax来获取数据的,但是,他的Ajax接口中包含许多的加密参数,我们很难找出其规律,也很难使用requests来模拟Ajax请求。

    为了解决这些问题,我们可以直接使用模拟浏览器的方式来实现,这样就可以做到在浏览器中看到什么样子,抓取的源码就是什么样子。


    5.2 Selenium的使用

    Selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如下拉、点击按钮、在文本框中输入文字、下划页面等动作,同时还可以获取浏览器当前呈现的页面的源代码。可以将Selenium看做是个通过代码来控制浏览器的工具。


    5.2.1 准备工作

    • 需要下载与你的Chrome版本相对应的ChromeDriver
    • 安装Selenium库
    • 将下载好的浏览器驱动放在Python的安装目录下的Scripy目录中

    注意:使用Edge的驱动器会提示要将驱动添加到path中,可以在初始化一个Edge浏览器对象的时候传入Edge驱动的路径:

    from selenium import webdriver
    
    browser = webdriver.Edge('E:\python\Scripts\msedgedriver.exe') 
    browser.get('https://www.baidu.com')
    

    所以建议大家使用Chrome浏览器。

    ChromeDriver下载地址

    Edge驱动下载地址

    Selenium官方文档


    5.2.2 Selenium的使用

    当所有的准备工作都完成后,打开编辑器,来敲代码了。

    首先来看看下面这个小例子:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.wait import WebDriverWait
    
    browser = webdriver.Chrome()  # 声明一个chrome浏览器对象
    try:
        browser.get('https://www.baidu.com')   # 打开指定的网页
        input = browser.find_element_by_id('kw')   # 寻找搜索框
        input.send_keys('Python')   # 在搜索框中输入指定的内容
        input.send_keys(Keys.ENTER)
        wait = WebDriverWait(browser, 10)
        wait.until(EC.presence_of_all_elements_located((By.ID, 'content_left')))
        print(browser.current_url)  # 打印当前页面的url
        print(browser.get_cookies()) # 打印当前页面的cookies
        print(browser.page_source)  # 打印当前页面的源代码
    finally:
        browser.close()
    

    执行上面的代码,如果一切正常的话,你的电脑应该自动打开了Chrome浏览器并来到了百度的首页,然后自动在搜索框中输入了“Python”并点击了搜索按钮,控制台中打印出当前页面的url、cookie、页面源代码。


    1. 声明浏览器对象

    Selenium支持非常多的浏览器,如Chrome、Firefox、Edge等,还有Android、BlackBerry等手机端的浏览器。

    下面是初始浏览器的方法:

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    browser = webdriver.Firefox()
    browser = webdriver.Edge()
    browser = webdriver.PhantomJS()
    browser = webdriver.Safari()
    

    注意:
    可以指定驱动器路径来初始化浏览器对象:

    browser = webdriver.Edge(‘E:\python\Scripts\msedgedriver.exe’)


    2. 访问页面

    可以使用get()方法来请求网页,将要请求的url传入即可,下面是请求百度的例子:

    from selenium import webdriver
    import time
    
    browser = webdriver.Edge('E:\python\Scripts\msedgedriver.exe')
    browser.get('https://www.baidu.com')
    print(browser.page_source)
    time.sleep(10)
    browser.close()
    

    3. 查找节点

    Selenium可以驱动浏览器完成各种操作,比如填充表单、模拟点击等。比如,我们想要完成在某个输入框输入文本的操作,我们首先需要使用selenium查找到这个输入框所在的节点位置。


    • 查找单个节点的常用方法

      查找单个节点的方法
      find_element_by_id()通过节点的id属性值来查找单个节点
      find_element_by_name()通过节点的name属性值来查找单个节点
      find_element_by_xpath()通过xpath来查找单个节点
      find_element_by_link_text()通过完整的链接文本(点击该文本就会跳到另一个页面)查找单个节点
      find_element_by_partial_link_text()通过部分链接文本来查找单个节点
      find_element_by_tag_name()通过节点的标签名来查找单个节点
      find_element_by_class_name()通过节点的class属性值来查找单个节点
      find_element_by_css_selector()通过css来查找当个节点
      find_element(By.ID,‘ ’)同find_element_by_id()
      find_element(By.CLASS_NAME, ‘ ’)同find_element_by_class_name()
      find_element(By.CSS_SELECTOR,’ ’)同find_element_by_css_selector()
      find_element(By.LINK_TEXT,’ ’)同find_element_by_link_text()
      find_element(By.NAME,’ ’)同find_element_by_name()
      find_element(By.PARTIAL_LINK_TEXT,’ ’)同find_element_by_partial_link_text()
      find_element(By.TAG_NAME,’ ’)同find_element_by_tag_name()
      find_element(By.XPATH,’ ’)同find_element_by_xpath()

    例子:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    browser = webdriver.Chrome()
    url = 'https://www.taobao.com/'
    browser.get(url)
    print(browser.find_element(By.ID, 'q'))
    print(browser.find_element_by_id('q'))
    print(browser.find_element_by_xpath('//*[id="q"]'))
    print(broswer.find_element_by_css_selector('#q'))
    

    运行结果:

    <selenium.webdriver.remote.webelement.WebElement (session="5e8df8d577c9340c9524ecebcf924800", element="18f8aa32-46d6-43cd-89b1-67e48e314310")>
    <selenium.webdriver.remote.webelement.WebElement (session="5e8df8d577c9340c9524ecebcf924800", element="18f8aa32-46d6-43cd-89b1-67e48e314310")>
    <selenium.webdriver.remote.webelement.WebElement (session="5e8df8d577c9340c9524ecebcf924800", element="18f8aa32-46d6-43cd-89b1-67e48e314310")>
    <selenium.webdriver.remote.webelement.WebElement (session="5e8df8d577c9340c9524ecebcf924800", element="18f8aa32-46d6-43cd-89b1-67e48e314310")>
    

    4. 查找多个节点

    在网页中如果查找的节点有多个,使用find_element()方法将只会找到第一个节点,如果想要查找多个节点,就需要使用find_elements()方法。

    from selenium import webdriver
    
    with webdriver.Chrome() as browser:
        browser.get('https://www.taobao.com')
        all_nodes = browser.find_elements_by_xpath('//li[@class="J_Cat a-all"]')
        print(len(all_nodes))
        print(all_nodes)
    

    上面的代码将自动使用Chrome打开淘宝的主页,打印出查找到的淘宝主页左上角的15个导航栏。

    将上面的表格中查找单个节点的方法中的element改为elements就是查找多个节点的方法。


    5. 节点交互

    Selenium可以驱动浏览器来执行一些操作,也就是可以让浏览器执行一些动作。

    常用的有:输入文字时用send_keys()方法,清空文字时用clear()方法,点击时用click()方法。

    from selenium import webdriver
    import time
    
    with webdriver.Chrome() as browser:
        browser.get('https://www.taobao.com')  # 打开链接
        input = browser.find_element_by_xpath('//*[@id="q"]')  # 找到搜索框
        input.send_keys('背包')  # 在搜索框中输入背包
        time.sleep(5)
        input.clear()  # 清空搜索框
        input.send_keys('书包')  # 在搜索框中输入书包
        search_button = browser.find_element_by_xpath('//button[@class="btn-search tb-bg"]')  # 查找搜索按钮
        time.sleep(5)
        search_button.click()  # 点击搜索按钮
    

    6. 动作链

    上面的选择输入框、向输入框中输入文本、点击按钮等动作,都是有特定的执行对象;但是,对于鼠标移动、按盘按键等,这些动作由另一种方式来执行,这就是动作链。

    from selenium import webdriver
    from selenium.webdriver import ActionChains
    import time
    
    browser = webdriver.Chrome()
    browser.get('示例网站的url')
    browser.find_element_by_xpath('//input[@placeholder="请输入邮箱"]').send_keys('jxd')
    time.sleep(1)
    browser.find_element_by_xpath('//input[@placeholder="请输入密码"]').send_keys('123456')
    time.sleep(1)
    browser.find_element_by_xpath('//div[@class="geetest_wait"]').click()
    time.sleep(1)
    
    # 更换监视界面
    ifame = browser.find_element_by_xpath('//div[@class="inner-conntent"]')
    browser.switch_to.frame(ifame)
    # 要拖动的元素
    source = browser.find_element_by_xpath('//div[@class="geetest_slider_button"]')
    # 要拖动到的位置元素
    target = browser.find_element_by_xpath('//div[@class="geetest_slider_tip geetest_fade"]')
    actions = ActionChains(browser)
    actions.drag_and_drop(source, target)
    actions.perform()
    

    7. 滑动页面

    滑动页面其实就是执行js语句,可以将控制页面滑动的js语句放在driver.execute_script(js语句)中来执行:

    driver.execute_script('window.scrollBy(0,1000)')  # 滑动的距离,分为x轴和y轴
    
    driver.execute_script('window.scrollTo(0,1000)')  # 滑动到指定的坐标
    
    driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")  # 滑动到页面的最下方
    
    driver.execute_script("document.getElementById('page').scrollIntoView(true)") # 将查找到的元素显示在屏幕中间,scrollIntoView(false)就是将查找到的元素显示在屏幕的底部 
    

    8. 执行JavaScript

    上面的向下滑动页面就是执行JavaScript的例子,我们可以使用driver.execute_script(javascript语句)来执行JavaScript代码。


    9. 获取节点的信息

    方法作用
    WebElement.get_attribute(‘属性名’)获取标签指定的属性的属性值
    WebElement.text获取标签的文本
    WebElement.id获取标签的id
    WebElement.location获取标签在页面中的相对位置
    WebElement.tag_name获取标签的标签名
    WebElement.size获取标签的大小

    10. 切换Frame

    网页中有一种节点叫做iframe,也就是子页面,我们使用selenium提供的选择节点的方法是在父级Frame里面操作,而如果页面中有子页面,它是不能获取到子Frame中的节点的。此时,就需要使用switch_to.frame()方法来切换Frame,上面的例子中有。

    注意:switch_to.frame()默认接收的是目标frame节点的id或name,如果目标节点没有id属性和name属性,那么就可以传入一个用select_element_by_xpath()等方法定位到的WebElement对象。


    11. 等待

    有时我们请求的页面中的元素或节点是通过Ajax加载的,就需要一定的时间,在元素未加载出来之前我们去查找该元素就会找不到,所以,就需要等待一段时间,等元素加载出来之后再执行查找元素等一系列操作。


    隐式等待:在查找节点而节点并没有立即出现时,隐式等待会等待一段时间再查找节点,时间默认是0秒,如果还未找到节点就会抛出节点未找到的异常。隐式等待可以看做是time.sleep()方法。

    browser.imlicitly_wait(10)  # 隐式等待10秒钟
    

    显示等待:规定一个最长等待时间,在这段时间里如果查找到了节点就返回节点,如果在这段时间里还找到该节点,则抛出超时异常。

    from selenium.webdriver.support import expected_conditions as EC
    
    wait = WebDriverWait(browser, 10)  # 设置显式等待时间是10秒
    input = wait.until(EC.presence_of_element_located((By.ID, 'q')))
    

    until()方法接收一个等待条件expected_conditions,上面的例子中的等待条件是presence_of_element_located(),指的是节点出现的意思,其参数是节点的定位元组,也就是ID为q的节点。


    常见的等待条件

    等待条件含义
    title_is标题是某内容
    title_contains标题包含某内容
    presence_of_element_located节点加载出来,传入定位元组,如(By.ID, ‘p’)
    visibility_of_element_located节点可见,传入定位元组
    visibility_of节点可见,传入节点对象
    presence_of_all_elements_located所有节点加载出来
    text_to_be_present_in_element某个节点文本包含某个文字
    text_to_be_present_in_element某个节点值包含某个文字
    frame_to_be_avaliable_and_switch_to_it加载并切换
    invisibility_of_element_located节点不可见
    element_to_be_clickable节点可点击
    staleness_of判断 个节点是否仍在 DOM ,可判断页面是杏已经刷新
    element_ to_be_selected节点可选择,传节点对象
    element_located_to_be_selected节点可选择,传人定位元组
    element_selection_state_to_be传人节点对象以及状态,相等返回 True ,否则返回 False
    element_located_selection_state_to_be传入定位元组以及状态,相等返回 True ,否则返回 False
    alert_is_present是否出现警告

    12. 控制页面前进和后退

    from seleniun import webdriver
    
    browser.forward()    # 前进
    browser.back()   # 后退
    

    13. 对cookies的操作

    from selenium import webdirver
    
    browser.get_cookies()  # 返回字典类型的所有cookies
    browser.add_cookies()  # 添加一个cookies,参数是字典类型
    browser.delete_all_cookies()   # 删除所有的cookies
    

    14. 选项卡

    from selenium import webdriver
    import time
    
    browser = webdriver.Chrome()  # 初始化一个浏览器对象
    
    browser.get('https://www.baidu.com')  # 访问百度
    browser.execute_script('window.open()')   # 新开启一个选项卡
    time.sleep(2)
    
    print(browser.window_handles)  # 打印所有选项卡代号列表
    
    browser.switch_to.window(browser.window_handles[1])   # 更换到选项卡代号列表中的第一个选项卡
    time.sleep(1)
    
    browser.get('https://www.taobao.com')
    browser.switch_to.window(browser.window_handles[0])
    time.sleep(1)
    
    browser.get('https://python.org')
    

    15. 模拟输入键盘

    上面讲的sendkeys()方法可以向输入框中输入文字,它还可以实现模拟键盘的输入,甚至是组合键。

    from selenium.webdriver.common.keys import Keys
    
    driver = webdriver.Firefox()
    driver.get([https://www.baidu.com](https://www.baidu.com/))
    
    el = driver.find_element(By.ID, "kw") # 找到输入框
    el.send_keys(“seleniumm”)             # 在输入框中输入"seleniumm"
    el.send_keys(Keys.BACK_SPACE)         # 模拟按一下Backspaece键
    el.send_keys(Keys.SPACE)              # 模拟按一下Space键
    el.send_keys(“教程”)                  # 输入"教程"
    el.send_keys(Keys.CONTROL, ‘a’)       # 模拟按下 "a"键
    el.send_keys(Keys.CONTROL, ‘x’)       # 模拟按下 "x"键
    el.send_keys(Keys.CONTROL, ‘v’)       # 模拟按下 "v"键
    el.send_keys(Keys.ENTER)              # 模拟按下"enter"键
    

    16. 异常处理

    selenium的异常类型都在selenium.common.exceptions这个包中,下面列举了常用的异常:

    异常说明
    NoSuchElementException未找到节点
    NoSuchAttributeException节点没有改属性
    NoSuchFrameExceptionframe未找到
    NoSuchWindowExceptionwindow未找到

    知道这些常用的异常之后,就可以使用try except来将这些异常捕获并做相应的处理了。


    5.3 使用Selenium的例子

    使用Selenium爬取手机信息


    感谢你的阅读!

    展开全文
  • 动态网页爬虫

    千次阅读 2021-12-04 21:49:25
    文章目录一.在Anaconda的虚拟环境下安装selenium 和webdrive等必要库1....爬取指定网页[http://quotes.toscrape.com/js/](http://quotes.toscrape.com/js/)的名言四.Selenium:requests+Selenum爬取京东图书五.总结

    一.在Anaconda的虚拟环境下安装selenium 和webdrive等必要库

    1.虚拟环境的主要操作命令

    1.创建虚拟环境

    打开Anaconda Prompt

    conda create -n env_name python=3.6
    

    其中env_name是自己虚拟环境的名称,可任意命名

    同时安装必要的包:

    conda create -n env_name numpy matplotlib python=3.6
    
    2.查看已经创建的虚拟环境
    conda env list
    

    我的虚拟环境如下

    在这里插入图片描述

    3.激活虚拟环境
    activate your_env_name(虚拟环境名称)
    

    此时使用

    python --version
    

    可以检查当前python版本是否为想要的(即虚拟环境的python版本)

    4.退出虚拟环境
    deactivate your_env_name(虚拟环境名称)
    
    5.删除虚拟环境

    #删除环境

    conda remove -n your_env_name(虚拟环境名称) --all
    

    #使用命令

    conda remove --name $your_env_name $package_name(包名)
    

    2.安装本次实验所需安装包

    selenium

    pip install selenium
    

    webdrive

    要使用selenium去调用浏览器,还需要一个驱动,不同浏览器的webdriver需要独立安装

    我这里就下载Chrome的驱动

    可以从这里下载:https://npm.taobao.org/mirrors/chromedriver/

    下载后是一个exe文件

    在这里插入图片描述

    将该文件添加到PATH下

    在这里插入图片描述

    二.对百度进行自动化测试

    1.打开浏览器,进入百度搜索界面

    from selenium import webdriver
    driver=webdriver.Chrome('D:\\software\\chromedriver_win32\\chromedriver.exe')
    #进入网页
    driver.get("https://www.baidu.com/")
    

    这里运行时总是报错,这和下载的驱动版本有关系

    这里提供一个简单的方法

    通过安装webdriver_manager来解决webdriver的管理问题

    pip install webdriver_manager
    

    接下里就是调库而已

    from selenium import webdriver
    
    from webdriver_manager.chrome import ChromeDriverManager
    
    driver = webdriver.Chrome(ChromeDriverManager().install())
    

    顺便说一下, 如果你下载了新版本驱动, 可以用这个指定路径 :
    webdriver.Chrome函数的参数executable_path可以指定软件驱动的路径

    driver = webdriver.Chrome(executable_path=r'C:\path\to\chromedriver.exe')
    

    修改后的代码:

    from selenium import webdriver
    from webdriver_manager.chrome import ChromeDriverManager
    driver = webdriver.Chrome(ChromeDriverManager().install())
    #进入网页
    driver.get("https://www.baidu.com/")
    

    运行结果:

    在这里插入图片描述

    对百度页面右键检查

    在这里插入图片描述

    找到搜索框的id是kw

    找到该元素,并填取相应的值

    p_input = driver.find_element_by_id("kw")
    p_input.send_keys('知乎')
    

    运行:
    在这里插入图片描述

    同样检查网页找到按钮百度一下的id,为su

    点击该按钮

    #点击搜索按钮
    p_btn=driver.find_element_by_id('su')
    p_btn.click()
    

    运行:

    在这里插入图片描述

    三.爬取指定网页http://quotes.toscrape.com/js/的名言

    打开该网页,分析网页元素

    在这里插入图片描述

    可以看到名言的id为text

    实现代码:

    
    from bs4 import BeautifulSoup as bs
    from selenium import webdriver
    import csv
    from selenium.webdriver.chrome.options import Options
    from tqdm import tqdm#在电脑终端上显示进度,使代码可视化进度加快
    from webdriver_manager.chrome import ChromeDriverManager
    driver = webdriver.Chrome(ChromeDriverManager().install())
    driver.get('http://quotes.toscrape.com/js/')
    #定义csv表头
    quote_head=['名言','作者']
    #csv文件的路径和名字
    quote_path='C:\\Users\\28205\\Documents\\Tencent Files\\2820535964\\FileRecv\\quote_csv.csv'
    #存放内容的列表
    quote_content=[]
    
    '''
    function_name:write_csv
    parameters:   csv_head,csv_content,csv_path
    csv_head:     the csv file head
    csv_content:  the csv file content,the number of columns equal to length of csv_head
    csv_path:     the csv file route
    '''
    def write_csv(csv_head,csv_content,csv_path):
        with open(csv_path, 'w', newline='') as file:
            fileWriter =csv.writer(file)
            fileWriter.writerow(csv_head)
            fileWriter.writerows(csv_content)
            print('爬取信息成功')
    
    ###
    #可以用find_elements_by_class_name获取所有含这个元素的集合(列表也有可能)
    #然后把这个提取出来之后再用继续提取
    quote=driver.find_elements_by_class_name("quote")
    #将要收集的信息放在quote_content里
    for i in tqdm(range(len(quote))):    
        quote_text=quote[i].find_element_by_class_name("text")
        quote_author=quote[i].find_element_by_class_name("author")
        temp=[]
        temp.append(quote_text.text)
        temp.append(quote_author.text)
        quote_content.append(temp)
    write_csv(quote_head,quote_content,quote_path)
    

    运行结果:

    在这里插入图片描述

    查看爬取信息:

    在这里插入图片描述

    四.Selenium:requests+Selenum爬取京东图书

    打开京东页面查看页面元素,分析需要爬取信息的标签id:

    在这里插入图片描述

    按钮没有写明id,就无法直接通过id获取

    在这里插入图片描述
    这里是价格,名称等的标签

    实现代码:

    from selenium import webdriver
    import time
    import csv
    from tqdm import tqdm#在电脑终端上显示进度,使代码可视化进度加快
    from webdriver_manager.chrome import ChromeDriverManager
    driver = webdriver.Chrome(ChromeDriverManager().install())
    #加载页面
    driver.get("https://www.jd.com/")
    time.sleep(3)
    
    #定义存放图书信息的列表
    goods_info_list=[]
    #爬取200本
    goods_num=200
    #定义表头
    goods_head=['价格','名字','链接']
    #csv文件的路径和名字
    goods_path='C:\\Users\\28205\\Documents\\Tencent Files\\2820535964\\FileRecv\\qinming.csv'
    
    #向输入框里输入Java
    p_input = driver.find_element_by_id("key")
    p_input.send_keys('法医秦明')
    
    #button好像不能根据类名直接获取,先获取大的div,再获取按钮
    from_filed=driver.find_element_by_class_name('form')
    s_btn=from_filed.find_element_by_tag_name('button')
    s_btn.click()#实现点击
    
    #获取商品价格、名称、链接
    def get_prince_and_name(goods):
        #直接用css定位元素
        #获取价格
        goods_price=goods.find_element_by_css_selector('div.p-price')
        #获取元素
        goods_name=goods.find_element_by_css_selector('div.p-name')
        #获取链接
        goods_herf=goods.find_element_by_css_selector('div.p-img>a').get_property('href')
        return goods_price,goods_name,goods_herf
    
    def  drop_down(web_driver):
        #将滚动条调整至页面底部
        web_driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
        time.sleep(3)
    
    #获取爬取一页
    def crawl_a_page(web_driver,goods_num):
        #获取图书列表
        drop_down(web_driver)
        goods_list=web_driver.find_elements_by_css_selector('div#J_goodsList>ul>li')
        #获取一个图书的价格、名字、链接
        for i in tqdm(range(len(goods_list))):
            goods_num-=1
            goods_price,goods_name,goods_herf=get_prince_and_name(goods_list[i])
            goods=[]
            goods.append(goods_price.text)
            goods.append(goods_name.text)
            goods.append(goods_herf)
            goods_info_list.append(goods)
            if goods_num==0:
                break
        return goods_num
    
    while goods_num!=0:
        goods_num=crawl_a_page(driver,goods_num)
        btn=driver.find_element_by_class_name('pn-next').click()
        time.sleep(1)
    write_csv(goods_head,goods_info_list,goods_path)
    

    运行结果:

    在这里插入图片描述

    查看文件:

    在这里插入图片描述

    五.总结

    通过本次实验,完成动态网页的信息爬取,和静态网页一样需要查看网页结构,找到元素id或者利用相关函数得到元素,然后将信息获取,存储。

    六.参考链接

    https://blog.csdn.net/weixin_40547993/article/details/100159125

    https://zhuanlan.zhihu.com/p/331712873

    https://blog.csdn.net/junseven164/article/details/121707162

    https://blog.csdn.net/HaoZiHuang/article/details/106263207

    展开全文
  • 如果您正在构建自己的网站,选择静态网站还是动态网站是需要做出的首要决定之一,因为它将决定网页如何存储并在浏览器中传递给访问者。 静态网站动态网站的区别在于,静态网站对于每个访问它们的用户来说都是一样...
  • DW制作ASP动态网页与access数据库连接教程.pdf
  • 如何制作动态网站

    千次阅读 2021-03-25 09:11:36
    推荐教程:php教程1、想要制作动态网页,首先需要了解动态网页的特征,动态网页的第一个特征就是使用动态语言制作而成,例如PHP,ASP,JSP等,用它们制作而成的网页都会以相应的动态语言为后缀名,例如.php,.asp等...
  • 从html制作动态网页

    千次阅读 2021-06-11 07:59:11
    要将ajax中的数据转换为另一个标记,您可以执行类似这样的操作var page_request = false;function ajax_request(url){if (window.XMLHttpRequest) // if Mozilla, Safari etcpage_request = new XMLHttpRequest()...
  • Python实实现现爬爬取取网网页页中中动动态态加加载载的的数数据据 这篇文章主要介绍了Python实现爬取网页中动态加载的数据文中通过示例代码介绍的非常详细对大家的学习 或者工作具有 定的参考学习价值需要的朋友们...
  •  搜索引擎一般不可能从一个网站的数据库中访问全部网页,因此采用动态网页网站在进行搜索引擎推广时需要做一定的技术处理才能适应搜索引擎的要求。 图1-2 动态网页的工作原理图 1.2 网站的前期规划
  • 记得有一次和一朋友散步,他问到什么是动态网页、什么是静态网页动态网页与静态网页有什么区别。当时我的回答似乎并没有让他真的明白到底什么是...(1)动态网站与静态网站的概念及区别动态网站是指通过网页脚本语言...
  • ASP动态网页设计2018(电子教案,来源于网络,下载后请24小时内删除
  • 定位元素三、爬取动态网页的名人名言1. 网页数据分析2. 翻页分析3.爬取数据的存储4. 爬取数据四、爬取京东网站书籍信息五、总结六、参考 一、Selenium介绍与配置 1.Selenium简介   Selenium 是ThoughtWorks专门为...
  • 网络营销服务动态响应式网站模板
  • 网球场动态展示响应式网站模板
  • 动 态 页 设 计 课 程 总 结 学院管理与经济学院 专业信息管理与信息系统 班级2009111 学号200911103 姓名王志鹏 动态网页设计课程总结及心得体会 动态网页设计这门课程是一门综合性很强而且非常实用的课程 包括....
  • 动态网页制作实验

    千次阅读 2020-05-07 11:53:50
    文章目录动态网页制作实验一、 实验目的二、实验环境三、 实验内容动态网页实验(一)动态网页实验(二)四、原理实验步骤五、关键问题及解决方法六、实验结果七、实验体会附录:源代码(仅仅附上核心代码)1.1网页...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 384,596
精华内容 153,838
关键字:

动态网网页