配色: 字号:
第2章 文本数据爬取
2022-10-27 | 阅:  转:  |  分享 
  
文本数据爬取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<br> ‘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
献花(0)
+1
(本文系籽油荃面原创)