文本数据爬取2022/10/261静态网页爬取目录网页前端基础2动态网页爬取3客户端与服务器间通过HTTP通信时,需要由客户端向服务器发起请 求,服务器收到请求后再向客户端发送响应,响应中的状态码将显示此次通信的状态,不同的类型请求与响应通过头字段实现。若需要维持客户端与 服务器的通信状态,则需要用到Cookie机制。爬虫在爬取数据时将会作为客户端模拟整个HTTP通信过程,该过程也需要通过HTTP实现 。网页前端基础通常情况下,HTTP客户端会向服务器发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服 务器则从该端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,如“HTTP/1.1 200 OK”,以及响应的内容, 如请求的文件、错误消息或其他信息,如图所示。熟悉HTTP请求方法与过程在HTTP/1.1协议中共定义8种方法(也叫“动作”)来以不 同方式操作指定的资源,如表所示。熟悉HTTP请求方法与过程1. 请求方法方法名称是区分大小写的。当某个请求所指定的资源不支持对应的 请求方法时,服务器会返回状态码405(Method Not Allowed);当服务器不认识或者不支持对应的请求方法时,会返回状态 码501(Not Implemented)。一般情况下,HTTP服务器至少需要实现GET和HEAD方法,其他方法为可选项。所有的方 法支持的实现都应当匹配方法各自的语法格式。除上述方法外,特定的HTTP服务器还能够扩展自定义的方法。熟悉HTTP请求方法与过程HT TP采用请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个 状态行作为响应,响应的内容包括协议版本、响应状态、服务器信息、响应头部和响应数据。请求与响应过程如图所示。熟悉HTTP请求方法与过 程2. 请求(Request)与响应(Response)客户端与服务器间的请求与响应的具体步骤如下。(1)连接Web服务器由一个H TTP客户端,通常为浏览器,发起连接。与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。(2)发送HTTP请求客 户端经TCP套接字向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。(3)服务器接收 请求并返回HTTP响应Web服务器解析请求,定位该次的请求资源。之后将资源复本写至TCP套接字,由客户端进行读取。一个响应与一个请 求对应,由状态行、响应头部、空行和响应数据4部分组成。熟悉HTTP请求方法与过程(4)释放TCP连接若本次连接的Connectio n模式为Close,则由服务器主动关闭TCP连接,客户端将被动关闭连接,释放TCP连接;若Connection模式为Keep-Al ive,则该连接会保持一段时间,在该时间内可以继续接收请求与回传响应。(5)客户端解析HTML内容客户端首先会对状态行进行解析,查 看状态代码是否能表明该次请求是成功的。之后解析每一个响应头,响应头告知以下内容为若干字节的HTML文档和文档的字符集。最后由客户端 读取响应数据HTML,根据HTML的语法对其进行格式化,并在窗口中对其进行显示。熟悉HTTP请求方法与过程当浏览者访问一个网页时, 浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头用以响应 浏览器的请求。HTTP状态码是用以表示网页服务器超文本传输协议响应状态的3位数字代码。熟悉常见HTTP状态码HTTP的状态码按首位 数字分为5类状态码,如表所示。熟悉常见HTTP状态码1. HTTP状态码种类HTTP状态码共有67种状态码,常见的状态码如表所示。 熟悉常见HTTP状态码2. 常见HTTP状态码HTTP头部信息(HTTP Header Fields)是指在超文本传输协议(HTT P)的请求和响应消息中的HTTP头部信息部分。头部信息中定义了一个超文本传输协议事务中的操作参数。在爬虫中需要使用头部信息向服务器 发送模拟信息,并通过发送模拟的头部信息将自己伪装成一般的客户端。某网页的请求头部信息和响应头部信息分别如图所示。熟悉HTTP头部信 息HTTP头部类型按用途可分为通用头、请求头、响应头、实体头。HTTP头字段被对应的分为4种类型:通用头字段(General He ader Fields)、请求头字段(Request Header Fields),响应头字段(Response Header F ields)和实体头字段(Entity Header Fields)。HTTP头部信息如表所示。熟悉HTTP头部信息由于HTTP是 一种无状态的协议,所以在客户端与服务器间的数据传输完成后,本次的连接将会关闭,并不会留存相关记录。再次交互数据需要重新建立新的连接 ,因此,服务器无法依据连接来跟踪会话,也无法从连接上知晓用户的历史操作。这严重阻碍了基于Web应用程序的交互,也影响了用户的交互体 验。例如,某些网站需要用户登录才能进行下一步操作,用户在输入账号密码登录后,才能浏览页面。对于服务器而言,由于HTTP的无状态性, 服务器并不知道用户有没有登录过,当用户退出当前页面访问其他页面时,用户又需重新输入账号及密码。熟悉Cookie为解决HTTP的无状 态性带来的负面作用,Cookie机制应运而生。Cookie本质上是一段文本信息。当客户端请求服务器时,若服务器需要记录用户状态,就 在响应用户请求时发送一段Cookie信息。客户端浏览器会保存该Cookie信息,当用户再次访问该网站时,浏览器会把Cookie作为 请求信息的一部分提交给服务器。服务器对Cookie进行验证,以此来判断用户状态,当且仅当该Cookie合法且未过期时,用户才可直接 登录网站。服务器还会对Cookie信息进行维护,必要时会对Cookie内容进行修改。爬虫也可使用Cookie机制与服务器保持会话或 登录网站,通过使用Cookie,爬虫可以绕过服务器的验证过程,从而实现模拟登录。熟悉Cookie1. Cookie机制Cookie 由用户客户端浏览器进行保存,按其存储位置可分为内存式存储Cookie和硬盘式存储Cookie。内存式存储Cookie将Cookie 保存在内存中,在浏览器关闭后就会消失,由于其存储时间较短,因此也被称为非持久Cookie或会话Cookie。硬盘式存储Cookie 保存在硬盘中,其不会随浏览器的关闭而消失,除非用户手动清理或Cookie已经过期。由于硬盘式存储Cookie的存储时间是长期的,因 此也被称为持久Cookie。熟悉Cookie2. Cookie的存储方式客户端请求服务器后,如果服务器需要记录用户状态,服务器会在 响应信息中包含一个Set-Cookie的响应头,客户端会根据这个响应头存储Cookie信息。再次请求服务器时,客户端会在请求信息中 包含一个Cookie请求头,而服务器会根据这个请求头进行用户身份、状态等校验。整个实现过程如图所示。熟悉Cookie3. Cook ie的实现过程客户端与服务器间的Cookie实现过程的具体步骤如下。(1)客户端请求服务器(2)服务器响应请求Cookie是一种字 符串,为“key=value”形式,服务器需要记录这个客户端请求的状态,因此在响应头中增加了一个Set-Cookie字段。(3)客 户端再次请求服务器客户端会对服务器响应的Set-Cookie头信息进行存储。当再次请求时,将会在请求头中包含服务器响应的Cooki e信息。熟悉Cookie1静态网页爬取目录网页前端基础2动态网页爬取3静态网页是网站建设的基础,早期的网站基本都是由静态网页构成的 。静态网页通常为纯粹的HTML格式,也可以包含一部分动态效果,如GIF格式的动画、Flash、滚动字幕等,该类网页的文件扩展名为. htm、.html。静态网页通常没有后台数据库,页面不含有程序并且无法交互。静态网页无法实时更新,更新页面时需重新发布,通常适用于 更新较少的展示型网站。静态网页爬取常用于发送HTTP请求的有Requests库和urllib库,两者的对比如表所示。通过Reque sts库和urllib库的对比,Requests库更容易理解和使用,主要使用Requests库向网站“http://edu.peo ple.com.cn/GB/227065/index.html”发送HTTP请求并获取响应内容,再使用Beautiful Soup 库解析获取的网页内容,最后将解析后的结果用PyMySQL库进行存储。静态网页爬取Requests库可发送原生的HTTP/1.1请求 ,无须手动为URL添加查询字串,也不需要对POST数据进行表单编码。相对于urllib 3库,Requests库拥有完全自动化的K eep-Alive和HTTP连接池的功能。Requests库包含的特性如表所示。实现HTTP请求用Requests库生成请求代码的 方法非常简便,其中,实现GET请求的函数为get函数,其基本语法格式如下。requests.get(url,kwargs)ge t函数常用的参数及其说明如表所示。实现HTTP请求1. 生成请求使用rqg.status_code的形式可查看服务器返回的状态码, 而使用rqg.encoding的形式可通过服务器返回的HTTP头部信息来猜测网页编码。需要注意的是,当Requests库猜测错时, 需要手动指定encoding编码,避免返回的网页内容解析出现乱码。手动指定的方法并不灵活,无法自适应爬取过程中不同网页的编码,而使 用chardet库的方法比较简便灵活。chardet库是一个非常优秀的字符串∕文件编码检测模块。实现HTTP请求2. 查看状态码与 编码chardet库的detect方法可以检测给定字符串的编码,其基本语法格式如下。chardet.detect(byte_str )detect方法常用的参数及其说明如表所示。detect方法可返回以下字典,字典中的confidence参数为检测精确度,enc oding参数为编码形式。{''encoding'': ''utf-8'', ''confidence'': 0.99, ''language'' : ''''}实现HTTP请求Requests库中对请求头的处理与urllib 3库类似,即使用get函数的headers参数在GET 请求中上传参数,参数形式为字典。使用rqg.headers可查看服务器返回的响应头,通常响应头返回的结果会与上传的请求参数对应。实 现HTTP请求3. 请求头与响应头处理4. 生成完整HTTP请求向网站“http://edu.people.com.cn/GB/2 27065/index.html”发送一个完整的GET请求,该请求包含链接、请求头、响应头、超时时间和状态码,并且编码应正确设置。 Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库。它提供一些简单的函数用来处理导航、搜索、修 改分析树等功能。通过解析文档,为用户提供需要抓取的数据,非常简便,仅需少量代码就可以写出一个完整应用程序。目前Beautiful Soup 3已经停止开发,大部分的爬虫选择使用Beautiful Soup 4开发。Beautiful Soup不仅支持Pytho n标准库中的HTML解析器,还支持一些第三方的解析器。网页解析HTML解析器对比如表所示。网页解析要使用Beautiful Sou p库解析网页首先需要创建BeautifulSoup对象,将字符串或HTML文件传入Beautiful Soup库的构造方法可以创建 一个BeautifulSoup对象,使用格式如下。BeautifulSoup("data") # 通过 字符串创建BeautifulSoup(open("index.html")) # 通过HTML文件创建网页解析1. 创建Beau tifulSoup对象生成的BeautifulSoup对象可通过prettify方法进行格式化输出,其基本语法格式如下。Beaut ifulSoup.prettify(encoding=None, formatter=''minimal’)prettify方法常用 的参数及其说明如表所示。网页解析Beautiful Soup库将HTML文档转换成一个复杂的树形结构,每个节点都是Python对象 ,所有对象类型可以归纳为4种:Tag,NavigableString,BeautifulSoup,Comment。(1)TagTa g对象为HTML文档中的标签,形如“The Dormouse''s story”或“ "title">The Dormouse''s story ”等HTML标签,再加上其中包含的内容便是Beaut iful Soup库中的Tag对象。通过Tag名称可以很方便的在文档树中获取需要的Tag对象,使用Tag名称查找的方法只能获取文档 树中第一个同名的Tag对象,而通过多次调用可获取某个Tag对象下的分支Tag对象,通过find_all方法可以获取文档树中的全部同 名Tag对象。网页解析2. 对象类型Tag对象有两个非常重要的属性:name和attributes。name属性可通过name方法 来获取和修改,修改过后的name属性将会应用至BeautifulSoup对象生成的HTML文档,获取Tag对象的name属性并修改 属性值。attributes属性表示Tag对象标签中HTML文本的属性,通过attrs属性可获取Tag对象的全部attribute s属性,返回的值为字典,修改或增加等操作方法与字典相同,获取Tag对象的attributes属性并修改属性值。(2)Navigab leStringNavigableString对象为包含在Tag对象中的文本字符串内容,如“The Dormouse ‘s story”中的“The Dormouse’s story”,使用string的方法获取,Navigable String对象无法被编辑,但可以使用replace_with的方法进行替换,获取title标签中的NavigableString 对象并替换内容。网页解析(3)BeautifulSoupBeautifulSoup对象表示的是一个文档的全部内容。大部分时候,可以 把它当作Tag对象。BeautifulSoup对象并不是真正的HTML或XML的Tag对象,所以并没有Tag对象的name和att ribute属性,但其包含了一个值为“[document]”的特殊name属性,查看BeautifulSoup对象的类型和相关属性 。(4) CommentTag对象、NavigableString对象、BeautifulSoup对象几乎覆盖了html和xml中 的所有内容,但是还有一些特殊对象,文档的注释部分是最容易与Tag对象中的文本字符串混淆的部分。Beautiful Soup库中将文 档的注释部分识别为Comment类型,Comment对象是一个特殊类型的NavigableString对象,但是当其出现在HTML 文档中时,Comment对象会使用特殊的格式输出,需调用prettify函数,获取节点的Comment对象并输出内容。网页解析Be autiful Soup库中定义了很多搜索方法,其中常用的有find方法和find_all方法,两者的参数一致,区别为find_a ll方法的返回结果是值包含一个元素的列表,而find方法直接返回的是结果。find_all方法用于搜索文档树中的Tag对象非常方便 ,其基本语法格式如下。BeautifulSoup.find_all(name, attrs, recursive, string, limit, kwargs)网页解析3. 搜索特定节点并获取其中的链接及文本find_all方法常用的参数及其说明如表所示。 网页解析find_all方法可通过多种参数遍历搜索文档树中符合条件的所有子节点。可通过name参数搜索同名的全部子节点,并接收多种 过滤器。按照CSS类名可模糊匹配或完全匹配。完全匹配class的值时,如果CSS类名的顺序与实际不符,将搜索不到结果。若Tag对象 的class属性是多值属性,可以分别搜索Tag对象中的每个CSS类名。通过字符串内容进行搜索符合条件的全部子节点,可通过过滤器操作 。通过传入关键字参数,搜索匹配关键字的子节点。网页解析使用find_all方法搜索到指定节点后,使用get方法可获取列表中的节点所 包含的链接,而使用get_text方法可获取其中的文本内容。先通过BeautifulSoup函数将网页内容转换为一个Beautif ulSoup对象,之后使用find_all方法定位title节点,分别使用string属性和get_text方法获取title节点 内的标题文本,使用find_all方法定位body节点下的div节点,分别使用get方法、get_text方法获取其每个子孙节点a 的链接和文本内容。网页解析PyMySQL与MySQLdb都是Python中用来操作MySQL的库,两者的使用方法基本一致,唯一的区 别在于,PyMySQL支持Python 3.X版本,而MySQLdb不支持。PyMySQL库使用connect函数连接数据库,co nnect函数的基本语法格式如下。pymysql.connect(host,port,user,passwd,db,charset ,connect_timeout,use_unicode)数据存储1. 连接方式connect函数有很多参数可供使用,常用的参数及 其说明如表所示。使用connect函数时可以不加参数名,但参数的位置需要对应,分别是主机、用户、密码和初始连接的数据库名,且不能互 换位置,通常更推荐带参数名的连接方式。数据存储PyMySQL库中可以使用函数返回的连接对象connect进行操作,常用的函数如表所 示。数据存储2. 数据库操作函数在Python操作数据库的过程中,通常主要使用pymysql.connect.cursor方法获取 游标,或使用pymysql.cursor.execute方法对数据库进行操作,如创建数据库及数据表等操作,通常使用更多的为增、删、 改、查等基本操作。游标对象也提供了很多种方法,常用的方法如表所示。数据存储游标对象的创建是基于连接对象的,创建游标对象后即可通过语 句对数据库进行增、删、改、查等操作。在连接的MySQL数据库中创建一个表名为class的表,该表包含id、name、text这3列 ,使用id列做为主键,之后将Beautiful Soup库获取的标题文本存入该表中。数据存储1静态网页爬取目录网页前端基础2动态网 页爬取3进行动态页面的爬取实质是对页面进行逆向分析,其核心是跟踪页面的交互行为使JavaScript触发调度,从而分析出有价值、有 意义的核心调用(一般都是通过JavaScript发起一个HTTP请求),然后使用Python直接访问逆向到的链接获取价值数据。在爬 取的静态网页中,很多是HTML静态生成的内容,直接从HTML源代码中就能找到,然而并非所有的网页都是如此。很多网站通常会用到AJA X技术和动态HTML技术,因而使用基于静态页面的爬取方法是行不通的。逆向分析爬取1. 了解静态网页和动态网页的区别动态网页爬取是相 对于静态网页爬取而言的。在某些网站,使用静态下载器与解析器对页面目标信息进行解析时,如果没有发现任何数据,多数原因是该网站的部分元 素是由JavaScript动态生成的。此时,使用静态网页的爬取方式进行爬取会比较困难,因此需要寻求新的爬取解析方式,即动态页面爬取 方法。目前流行的方法一般分为两种:逆向分析爬取动态网页,手动分析网络面板的AJAX请求来进行HTML的信息采集;在Chrome浏览 器中使用Selenium库模拟动态网页动作,直接从浏览器中采集已经加载好的HTML信息。动态网页爬取一般含有类似“查看更多”字样或 打开网站时下拉才会加载出内容的网页基本都是动态的。区分网页是静态网页还是动态网页的比较简便的方法是,在浏览器中查看页面相应的内容, 当在查看页面源代码时找不到该内容时,就可以确定该页面使用了动态技术。有一些网站的内容是由前端的JavaScript动态生成的,所以 能够在浏览器上看得见网页的内容,但是在HTML源代码中却发现不了。通过对“http://www.tipdm.com”和“http: //www.ptpress.com.cn”的分析,可了解静态网页和动态网页的区别。逆向分析爬取在浏览器中打开网页“http://w ww.tipdm.com”,按“F12”键调出Chrome开发者工具,或者单击“更多工具”选项中的“开发者工具”选项。Chrome 开发者工具中的元素(Elements)面板上显示的是浏览器执行JavaScript之后生成的HTML源代码。找到解决方案的第一条数 据对应的HTML源代码,如图所示。逆向分析爬取(1)判断静态网页还有另一种查看源代码的方法,即右键单击页面,选择“查看网页源代码” ,如上图所示。得到服务器直接返回的HTML源代码,找到解决方案的第一条数据的信息,如下图所示。对比通过“F12”键调出的Chrom e开发者工具查看的源代码,两者的HTML内容完全一致。因此可以判断“http://www.tipdm.com”是静态网页。逆向分析 爬取在浏览器中打开网页“http://www.ptpress.com.cn”,按“F12”键调出Chrome开发者工具,找到“互联 网+智慧城市 核心技术及行业应用”的HTML信息,如图所示。逆向分析爬取(1)判断动态网页在浏览器呈现的网页中,右键单击页面,单击 “查看网页源代码”选项,在弹出的HTML源代码中查找“互联网+智慧城市 核心技术及行业应用”关键字,如图所示。网页的新闻标题“互联 网+智慧城市 核心技术及行业应用”在HTML源代码中找不到,因此可以确定“http://www.ptpress.com.cn”是由 JavaScript动态生成加载的动态网页。逆向分析爬取在确认网页是动态网页后,需要获取在网页响应中由JavaScript动态加载 生成的信息。在Chrome浏览器中爬取网页“http://www.ptpress.com.cn”的信息的步骤如下。(1)按“F12 ”键打开网页“http://www.ptpress.com.cn”的Chrome开发者工具,如图所示。逆向分析爬取2. 逆向分析爬 取动态网页(2)打开网络(Network)面板后,会发现有很多响应。在网络面板中,XHR是AJAX中的概念,表示XML-HTTP- request,一般JavaScript加载的文件隐藏在JS或者XHR中。通过查找可发现,网页“http://www.ptpres s.com.cn”的JavaScript加载的文件在XHR面板上。(3)“新书”模块的信息在XHR的“Preview”标签中有需要 的信息。在网络面板的XHR中查看“/bookinfo”资源的Preview信息,可以看到网页新书的HTML信息,如图所示。逆向分析 爬取若需要爬取“http://www.ptpress.com.cn”首页“新书”模块的书名、作者和价格信息,则步骤如下。(1)单击 “/bookinfo”资源的“Headers”标签,找到“Request URL”的网址信息,如图所示。逆向分析爬取(2)打开“R equest URL”的网址信息,找到需要爬取的信息,如图所示。(3)爬取“http://www.ptpress.com.cn”首 页“新书”模块的新书名、作者和价格信息。逆向分析爬取爬取动态网页还可以使用Selenium库。Selenium是一种自动化测试工具 ,能模拟浏览器的行为。Selenium支持各种浏览器,包括Chrome、Firefox等主流界面式浏览器,在浏览器里面安装一个Se lenium的插件,即可方便地实现Web界面的测试。使用Selenium库爬取本章使用的是Selenium 3.9.0。Selen ium 3调用浏览器时,必须下载并安装一个类似补丁的文件,例如,Firefox的补丁文件为geckodriver,Chrome的补 丁文件为chromedrive。以Chrome浏览器的chromedrive补丁文件为例,在安装好Selenium 3.9.0之后 ,下载并安装chromedrive补丁文件的步骤如下。(1)在Selenium官网下载对应版本的补丁文件。下载如图所示的“Goog le Chrome Driver 2.36”文件,根据操作系统选择chromedrive补丁文件。(2)将下载好的chromedr ive.exe文件存放至Python安装的根目录(与python.exe文件同一目录)即可。使用Selenium库爬取1. 安装S elenium库及下载浏览器补丁Selenium打开Chrome浏览器,并访问网页http://www.ptpress.com.c n/search/books 。使用Selenium库爬取2. 打开浏览对象并访问页面3. 页面等待目前,大多数的Web应用都使用 AJAX技术。当浏览器加载一个页面时,页面中的元素可能会以不同的时间间隔加载,这使得定位元素比较困难,使用页面等待可以解决这个问题 。页面等待在执行的操作之间提供了一些松弛,主要用于定位一个元素或任何其他带有该元素的操作。Selenium WebDriver提供 了两种类型的等待——隐式和显式。显式等待使网络驱动程序在继续执行之前等待某个条件的发生。隐式等待使WebDriver在尝试定位一个 元素时,在一定的时间内轮询DOM。在爬取“http://www.ptpress.com.cn/search/books”网页搜索“ Python编程”关键词的过程中,用到了显式等待,本节主要介绍显式等待。WebDriverWait函数默认每500毫秒调用一次Ex pectedCondition,直到成功返回。ExpectedCondition的成功返回类型是布尔值,对于所有其他Expecte dCondition类型,则返回True或非Null返回值。如果WebDriverWait在10秒内没有发现元素返回,就会抛出Ti meoutException异常。使用Selenium库爬取WebDriverWait函数的基本语法格式如下。WebDriverW ait(driver,time)WebDriverWait函数常用的参数及其说明如表所示。显式等待是指指定某个条件,然后设置最长等 待时间,如果在这个时间还没有找到元素,那么便会抛出异常。使用Selenium库爬取(1) 填充表单网页的选项卡标签使用切换操作,如 选择选项标签,先打开“http://www.ptpress.com.cn/search/books”,然后在第一个选项卡放网页“h ttp://www.tipdm.org”,在第二个选项卡放网页“http://www.tipdm.com”。HTML表单包含了表单 元素,而表单元素指的是不同类型的input元素、复选框、单选按钮、提交按钮等。填写完表单后,需要提交表单。定位“搜索”按钮并复制该 元素的selector,如图所示。在浏览器中自动单击“提交”按钮。使用Selenium库爬取4. 页面操作(2) 执行JavaSc riptSelenium库中的execute_script方法能够直接调用JavaScript方法来实现翻页到底部、弹框等操作。例 如,在网页“http://www.ptpress.com.cn/search/books”中通过JavaScript翻页到底部,并 弹框提示爬虫。使用Selenium库爬取在页面中定位元素有多种策略。Selenium库提供了多种方法来定位页面中的元素,即使用fi nd_element进行元素选取。在定位一个元素中使用到了通过元素ID进行定位、通过XPath表达式进行定位、通过CSS选择器进行 定位等操作。在定位多个元素中使用到了通过CSS选择器进行定位等操作。使用Selenium库爬取5. 元素选取常见的定位元素方法如表 所示。使用Selenium库爬取Selenium库中find_element各操作的使用方法都差不多。find_element_b y_id()方法的基本语法格式如下。driver.find_element_by_id(By.method, ''selector_ url'')find_element_by_id()方法常用的参数及其说明如表所示。使用Selenium库爬取(1) 定位一个元素查找网页“http://www.ptpress.com.cn/search/books”响应的搜索框架的元素,如图所示。分别通过元素ID、CSS选择器、XPath表达式来获取搜索框架的元素,得到的结果都是相同的。此外,还可以通过By类来获取网页“http://www.ptpress.com.cn/search/books”的搜索框架的元素。使用Selenium库爬取(2) 定位多个元素查找网页“http://www.ptpress.com.cn/search/books”第一行的多个信息,复制到selector的信息是“#nav”,如图所示。定位多个元素的方法与定位一个元素的方法类似,同样可以使用find_elements定位元素。与定位一个元素的方法相同,定位多个元素也可以通过By类来实现。使用Selenium库爬取在自动化Web浏览器时,不需要手动编写期望的条件类,也不必为实现自动化创建实用程序包,Selenium库提供了一些常用的较为便利的判断方法,如表所示。在爬取网页“http://www.ptpress.com.cn/search/books”搜索“Python编程”关键词的过程中,用到了element_to_be_clickable(元素是否可单击)等判断方法。使用Selenium库爬取6. 预期的条件使用Selenium库爬取本章主要介绍了网页前端的基础知识,包括HTTP客户端与服务器间的通信,即由客户端发起请求,服务器进行应答、HTTP状态码以及其头部信息、Cookie机制。同时介绍了爬取静态网页的3个主要步骤,包括实现HTTP请求、解析网页和数据存储。分别通过逆向分析爬取和通过Selenium库爬取两种方法介绍了动态网页的爬取过程。小结相关的实训、课程视频等资源:https://edu.tipdm.org相关的培训动态:http://www.tipdm.com/pxdt/index.jhtml |