版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章
网页数据解析与提取学习目标知识目标(1)熟练掌握BeautifulSoup库的基本使用方法,涵盖HTML文件解析以及网页信息提取等操作。(2)深入理解正则表达式的基本概念与语法规则,能够运用正则表达式进行文本匹配与提取工作。(3)全面熟悉lxml库与XPath语法的协同使用方式,具备利用XPath高效提取网页数据的能力。(4)理解借助各类技术手段解析与提取网页中文本数据和属性数据的原理与方法。(5)学会深入分析网页结构,掌握DOM树模型及其在实际操作中的应用技巧。(6)理解不同解析库的性能差异以及优化技巧,能够依据数据采集需求选取合适的工具对数据进行解析。学习目标能力目标(1)能够运用BeautifulSoup库进行HTML文档的解析以及数据提取操作,高效获取所需信息。(2)能够构建并灵活运用正则表达式,有效解决实际网页数据提取过程中的文本匹配问题,提取目标数据。(3)可以熟练使用lxml库和XPath语法实现对网页元素的快速查找与数据提取,提升数据采集效率。(4)能够综合运用多种解析技术处理网页数据,提升数据抓取的效率与准确性,确保数据采集质量。(5)具备分析并妥善解决解析过程中常见问题的能力,如编码问题、复杂网页结构处理等,保障数据解析工作的顺利进行。(6)能够通过综合案例与拓展案例有效提升数据采集实践能力,积累丰富的项目实践经验,增强应对数据采集实际问题的能力。学习目标素质目标(1)培养细致入微的工作态度和严谨认真的工作作风,确保数据解析的完整性和准确性。(2)增强数据隐私保护意识和职业道德观念,自觉遵守相关法律法规,避免不当使用数据的行为。(3)培养团队合作精神和沟通能力,能够在数据采集项目中与团队成员紧密合作,共同实现采集需求和解决技术难题。思维导图章节内容行业PPT模板/hangye/4.24.34.4正则表达式的使用lxml库与XPath的使用拓展案例—采集二手车信息4.1BeautifulSoup的使用PATR4.1BeautifulSoup的使用BeautifulSoup简介与解析原理BeautifulSoup库是一个流行的Python模块。通过BeautifulSoup库可以解析Requests库请求返回的响应内容,它利用解析器将HTML或XML文档转换成复杂的树形结构的Soup文档,便于用户查找和操作文档中的各个元素。它常用的解析器有Python标准库中的html.parser、第三方库lxml以及html5lib。4.1.1文档加载实例化一个BeautifulSoup对象,将HTML文档或XML文档加载到该对象。生成树形结构BeautifulSoup会将加载的文档转化为一个树形结构的对象。使用解析器BeautifulSoup支持多种解析器,如html.parser、lxml和html5lib。定位标签和提取数据BeautifulSoup提供多种方法和属性来定位标签并提取数据。01030204修改文档BeautifulSoup还允许对原文档进行修改,比如添加、删除、修改节点等。05BeautifulSoup解析和提取网页数据的原理4.1.1【例4-1】使用BeautifulSoup解析清华大学出版社官网(/index.html)主页上的内容。BeautifulSoup简介与解析原理4.1.11.
importrequests
#导入请求库2.
frombs4importBeautifulSoup
#导入网页解析库BeautifulSoup3.
url='/index.html'
#设置目标网址4.
headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36''(KHTML,likeGecko)Chrome/Safari/537.36'}
#设置请求头5.
res=requests.get(url,headers=headers)
#发起请求6.
soup=BeautifulSoup(res.text,'html.parser')
#对响应内容进行解析7.
print(soup.prettify())
#将解析后的网页内容格式化输出BeautifulSoup的应用1.BeautifulSoup()构造函数【例4-2】使用BeautifulSoup()构造函数创建一个BeautifulSoup对象,用于解析HTML文档。4.1.21. frombs4importBeautifulSoup2. withopen('test.html','r',encoding='utf-8')asfile:#读取HTML文档3. html_doc=file.read()4. soup=BeautifulSoup(html_doc,'html.parser')#创建BeautifulSoup对象BeautifulSoup的应用2.soup.标签名【例4-3】使用soup.h1返回test.html文件中第一次出现的h1标签。4.1.21. frombs4importBeautifulSoup2. withopen('test.html','r',encoding='utf-8')asfile:#读取HTML文档3. html_doc=file.read()4. soup=BeautifulSoup(html_doc,'html.parser')#创建BeautifulSoup对象5. h1_tag=soup.h1#提取第一个h1标签6. print('h1标签:',h1_tag)#输出h1标签7. print("h1标签内容:",h1_tag.string)#输出h1标签内容BeautifulSoup的应用3.soup.find('标签名')【例4-4】使用soup.h1返回test.html文件中第一次出现的h1标签。4.1.21. frombs4importBeautifulSoup2. withopen('test.html','r',encoding='utf-8')asfile:#读取HTML文档3. html_doc=file.read()4. soup=BeautifulSoup(html_doc,'html.parser')#创建BeautifulSoup对象5. p_tag=soup.find('p')#返回第一个符合要求的p标签6. class_tag=soup.find(class_='intro')#根据class_属性查找第一个匹配的标签7. print('第一个p标签:',p_tag)#输出第一个p标签8. print("通过属性定位标签:",class_tag)#输出定位到的标签BeautifulSoup的应用4.soup.find_all('标签名')【例4-5】使用soup.find_all('p')以列表形式返回符合要求的所有p标签。4.1.21.frombs4importBeautifulSoup2. withopen('test.html','r',encoding='utf-8')asfile:#读取HTML文档3. html_doc=file.read()4. soup=BeautifulSoup(html_doc,'html.parser')#创建BeautifulSoup对象5. all_p_tag=soup.find_all('p')#返回所有p标签6. print('输出所有p标签:',all_p_tag)#输出所有p标签7. fori,pinenumerate(all_p_tag,1):#输出所有p标签中的内容8. print(f"p{i}:",p.get_text())BeautifulSoup的应用5.soup.select(selector)select()会根据CSS选择器查找元素,以列表形式返回匹配的所有元素。6.soup.get_text()使用soup.get_text()提取当前标签及其所有子标签中的所有文本内容。7.soup.tagName['attrs']使用soup.tagName[‘attrs’]获取标签指定属性的值。8.soup.attrs使用soup.attrs获取标签的所有属性。4.1.2BeautifulSoup的应用【例4-6】首先使用CSS选择器查找所有p标签,接着输出每个p标签中内容,然后获取a标签的herf属性值,最后获取a标签的所有属性。4.1.21. frombs4importBeautifulSoup2. withopen('test.html','r',encoding='utf-8')asfile:#读取HTML文档3. html_doc=file.read()4. soup=BeautifulSoup(html_doc,'html.parser')#创建BeautifulSoup对象5. #(1)使用CSS选择器查找所有P标签6. selected_p=soup.select('p')7. #(2)输出所有p标签中的内容8. forpinselected_p:9. print("p标签中的内容:",p.get_text())10. #(3)获取a标签的herf属性值11. print(soup.select('html>body>p>a')[0]['href'])12. #(4)获取a标签的所有属性13. a_attrs=soup.find('a')14. print("a标签的属性:",a_attrs.attrs)4.1.3数据采集需求采集酷狗音乐热门榜单中“酷狗TOP500”的500首音乐信息,采集的字段包括:排名、歌名、歌手、时长,如图4-2所示。采集的音乐信息保存到当前工程目录中tmp目录下的“music.csv”文件中。综合案例—采集热门榜单TOP500音乐信息4.1.32.采集思路分析(1)打开酷狗音乐热门榜单中“酷狗TOP500”主页(网址详见前言二维码)。(2)网页版的酷狗音乐无法通过手动翻页来浏览下一页的音乐信息。然而,通过观察第1页的URL地址:/yy/rank/home/1-8888.html?from=rank中有数字1,尝试把数字1换为数字2发起请求能成功地返回第2页的音乐信息。以此类推,发现更换不同数字即为不同的音乐信息网页地址。同时也可以看到每个页面有22首歌曲信息,因此只需要将home/后面的数字从1依次更换到23即可构建500首音乐信息的爬虫地址列表。综合案例—采集热门榜单TOP500音乐信息4.1.33.采集代码实现(1)在PyCharm中打开工程项目“CrwalProject”,新建一个名称为“Chapter4Code”的包。右击该包,在快捷菜单中选择New->PythonFile命令,新建一个名称为“综合案例—采集热门榜单TOP500音乐信息”的Python文件。(2)在“综合案例—采集热门榜单TOP500音乐信息”Python文件中输入采集音乐信息的爬虫代码,如图4-3所示。综合案例—采集热门榜单TOP500音乐信息4.1.33.采集代码实现综合案例—采集热门榜单TOP500音乐信息4.1.33.采集代码实现(3)单击工具栏上的“”按钮,运行采集热门榜单音乐信息的爬虫代码,在底部“Run”窗口显示所采集的500首音乐信息,如图4-4所示。表明音乐信息采集成功。(4)在左侧项目结构区的当前工程目录中的tmp目录下,可以看到保存有音乐信息的文件“music.csv”。综合案例—采集热门榜单TOP500音乐信息PATR4.2正则表达式的使用正则表达式的使用
正则表达式(RegularExpressions,常简称RE)作为一种专门用于描述或匹配字符串的工具,在网络爬虫的数据解析与提取环节占据着极为关键的地位。其能够帮助用户高效地对所获取的网页内容进行解析,并从中准确地提取出诸如电话号码、电子邮件地址、URL以及特定文本模式等所需信息,为数据的深度挖掘与有效利用提供了强有力的技术支撑。4.2.14.2.11.基本符号正则表达式的基本符号如表4-1所示。正则表达式常用符号符号说明示例.匹配除换行符以外的任意字符g.d可以匹配god,grade等^匹配字符串的开头^Hello匹配以Hello开头的字符串$匹配字符串的结尾world$匹配以world结尾的字符串*匹配前一个字符0次或多次ab*可以匹配a,ab,abb等+匹配前一个字符1次或多次ab+可以匹配ab,abb,abbb等?匹配前一个字符0次或1次ab?可以匹配a,ab\转义字符,使后面的字符不再具有特殊含义\.匹配.字符[]字符集,匹配其中任意一个字符[abc]匹配a,b,c中的任意一个[^]非字符集,匹配不在括号内的任意字符[^abc]匹配a,b,c之外的任意字符4.2.12.数量词符号正则表达式中常见的数量词符号如表4-2所示。正则表达式常用符号符号说明示例{n}匹配前一个字符正好n次g.{2}d匹配good,gold等{n,}匹配前一个字符至少n次g.{2,}d匹配goad,gland等{n,m}匹配前一个字符至少n次至多m次g.{2,5}d匹配glad,guard,ground等4.2.13.特定字符集合符号正则表达式的特定字符集合如表4-3所示。正则表达式常用符号符号说明示例\d匹配任意一个十进制数字,等价于[0-9]\d{3}匹配字符串"ab123cd"中的'1'、'2'和'3'\D匹配任何非数字字符,等价于[^0-9]\D+匹配字符串"abc123"中的'a'、'b'、'c'\w匹配包括下划线的任何单词字符,等价于'[A-Za-z0-9_]'\w匹配字符串"hello_world123"中的'h'、'e'、'l'、'l'、'o'、'_'、'w'、'o'、'r'、'l'、'd'、'1'、'2'和'3'\W匹配任何非单词字符,等价于'[^A-Za-z0-9_]'\W匹配字符串"hello-world!123"中的'-'和'!'\s匹配任何空白字符,包括空格、制表符、换页符等,等价于[\f\n\r\t\v]\s匹配字符串"helloworld"中的空格\S匹配任何非空白字符,等价于[^\f\n\r\t\v]\S匹配字符串"helloworld"中的'h'、'e'、'l'、'l'、'o'、'w'、'o'、'r'、'l'、'd'4.2.1【例4-7】正则表达式基本符号的使用。正则表达式常用符号1.
importre
3.
string='smallsmellsmSdllsm3llsm.ll
smllsm?llsm\nllsm\tllsm-ll'4.
#1、.表示匹配除\n以外的任意单个字符5.
re.findall('sm.ll',string)6.
#2、*表示前面的元素被匹配0次及以上7.
re.findall('sm.*ll',string)
#{0,},此时发现smll被匹配上8.
re.findall(r'sm\?ll',string)
#匹配sm?ll这个单词9.
#3、?表示前面的元素被匹配0次或1次10.
re.findall('sm.?ll',string)
#{0,1}11.
#4、+表示前面的元素被匹配1次或以上12.
re.findall('sm.+ll',string)
#{1,}13.
#5、\是转义字符,当要匹配.或?字符本身,就需要进行转义14.
re.findall(r'sm\.ll',string)15.
re.findall('sm[.?-]ll',string)
#放在方括号里的字符不需要转义16.
re.findall('small|smell',string)
#"|"表示或17.
#6、[]表示匹配方括号里的任意字符18.
re.findall('sm[aef]ll',string)19.
re.findall('sm[a-zA-Z0-9]ll',string)20.
#
数量词符号21.
re.findall('sm.{2}ll',string)
#表示前面匹配的符号出现2次22.
re.findall('sm.{1,2}ll',string)
#表示前面匹配的符号出现1次或2次23.
re.findall('sm.{1,}ll',string)
#表示前面匹配的符号出现1次及以上4.2.14.爬虫中常用的(.*?)符号“()”表示将括号里面的内容提取出来,“.*?”是非贪心匹配,匹配任意的字符。【例4-8】字符串“xxIxxjshdxxlovexxsffaxxSpiderxx”,可以通过'xx(.*?)xx'匹配符合这种规则的字符串。那么会提取什么信息呢?正则表达式常用符号1. importre2. 3. str='xxIxxjshdxxlovexxsffaxxSpiderxx'#定义字符串str4. info=re.findall('xx(.*?)xx',str)#从str字符串中查找符合匹配模式的字符串5. print(info)4.2.15.匹配模式.*?与.*的区别在正则表达式中,.*和.*?都用于匹配任意字符,但它们的工作方式有所不同。(1)匹配模式.*是贪婪模式(Greedy),会尽可能多地匹配字符。(2)匹配模式.*?是非贪婪模式(Non-Greedy),会尽可能少地匹配字符。【例4-9】示例匹配模式.*?与.*的区别。正则表达式常用符号1. importre2. 3. text="Thequick<brown>fox<jumps>overthelazy<dog>."#定义字符串4. pattern_greedy=r'<.*>'#贪婪模式5. matches_greedy=re.findall(pattern_greedy,text)#匹配贪婪模式6. print("Greedy:",matches_greedy)#输出:['<brown>fox<jumps>overthelazy<dog>']7. pattern_non_greedy=r'<.*?>'#非贪婪模式8. matches_non_greedy=re.findall(pattern_non_greedy,text)#匹配非贪婪模式9. print("Non-Greedy:",matches_non_greedy)#输出:['<brown>','<jumps>','<dog>']4.2.2Python的re模块提供了一系列函数来使用正则表达式。下面我们将详细介绍这些常用的功能和方法。使用re的一般步骤如下。(1)首先,将正则表达式用字符串形式编译为Pattern实例。(2)接着,正则表达式处理函数使用Pattern实例处理文本并获得匹配结果。1.re.match()方法re.mathch()方法用于从字符串的开头开始查找匹配正则表达式的内容,如果在起始位置没有匹配成功,则返回None。re.match()方法的语法格式如下:
re.match(pattern,string,[,flags])Re模块及其方法的使用4.2.22.re.search()方法re.search()用于在字符串中查找匹配正则表达式的第一个位置,返回一个Match对象,如果没有找到匹配,则返回None。re.search()方法的语法格式如下:re.search(pattern,string,[,flags])pattern为匹配的正则表达式;string为要匹配的字符串;flags用于指定匹配模式。Re模块及其方法的使用4.2.23.re.split()方法re.split()方法按照能够匹配的子串分割后返回列表。re.split()方法的语法格式如下:re.split(pattern,string,[,maxsplit])pattern为匹配的正则表达式;string为要匹配的字符串;maxsplit参数用于指定最大分割次数,不指定时将全部分割。Re模块及其方法的使用4.2.24.re.findall()方法re.findall()方法会返回字符串中所有与正则表达式匹配的全部字串,返回的是一个列表。re.findall()方法的语法格式如下:re.findall(pattern,string,[,flags])Re模块及其方法的使用4.2.24.re.sub()方法re.sub()方法用于替换字符串中所有匹配正则表达式的部分,可以指定替换的内容。re.sub()方法的语法格式如下:re.sub(pattern,repl,string[,count])pattern为匹配的正则表达式;string为要匹配的字符串;使用repl替换string匹配的部分,count用于指定最多替换次数,不指定时全部替换。Re模块及其方法的使用4.2.2
【例4-10】re常用方法的使用。Re模块及其方法的使用1. importre2. 3. string='I,Asmallsentence.II,Anothertinysentence.'4. re.findall('sentence',string)#从string中找出所有符合模式‘sentence’5. re.search('sentence',string)#从string中找出第一个符合模式‘sentence’6. re.match('sentence',string)#match查找要求首字母开始必须与模式'sentence'一样7. re.match('I,Asmallsentence',string)8. re.sub(pattern='small',repl='large',string=string)#用字串large替换small9. string2="Welcometogcc"10. print(re.split("",string2))#将字符串切割成3个字串4.2.26.pile()方法pile()用于编译正则表达式,生成一个正则表达式对象,使得使用这个对象的方法能够提高效率。【例4-11】compile()方法的使用。Re模块及其方法的使用1. importre2. 3. pattern=pile(r'\b\w+@\w+\.\w+\b')#定义匹配模式4. string="Emailmeatcontact@orsales@"5. matches=pattern.findall(string)6. print(matches)#输出:['contact@','sales@']4.2.31.数据采集需求采集豆瓣Top250的电影信息,采集的字段包括电影排行(rank),名称(name),演员(actor),评分(score),评价(comment),引用(quote),如图4-5所示。采集的电影信息保存到当前工程目录中tmp目录下的“movie.csv”文件中。综合案例—采集Top250电影信息4.2.32.采集思路分析(1)打开豆瓣电影Top250主页(/try/download/community)。(2)通过手动翻页浏览电影信息,以下为前3页的网址:/top250?/top250?start=25&filter=/top250?start=50&filter=将第1页的网址改为/top250?start=0也能浏览前25部电影,并且可以看到两个网页之间的start相差25,因此只需要依次更改start后面的数字,即可以构造出10个爬虫地址。综合案例—采集Top250电影信息4.2.33.采集代码实现(1)在PyCharm中,右击“Chapter4Code”的包,在快捷菜单中选择New->PythonFile命令,新建一个名称为“综合案例—采集Top250电影信息”的Python文件。(2)在“综合案例—采集Top250电影信息”Python文件中输入采集电影信息的爬虫代码。综合案例—采集Top250电影信息4.2.33.采集代码实现
(3)单击工具栏上的“”按钮,运行采集Top250电影信息的爬虫代码,读者可在底部“Run”窗口中看见10个页面的电影信息采集结果,如图4-7所示。此时,在PyCharm左侧项目结构区的当前工程目录Chapter4code中的tmp目录下,可以看到存储有所采集电影信息的文件“movie.csv”。综合案例—采集Top250电影信息PATR4.3lxml库与XPath的使用4.3.1lxml库是Python中的一个库,用于解析HTML和XML文档。它基于libxml2和libxslt库,提供了更高效的解析功能,同时支持XPath、XQuery、CSS选择器等多种解析方法。lxml有两下面两个主要的模块。(1)lxml.etree:用于解析和创建XML和HTML文档。(2)lxml.html:专门用于HTML文档的解析和处理。1.lxml库的安装可以使用pip命令在Windows的命令提示符中安装lxml库,如图4-8所示。
lxml库的简介与使用4.3.12.lxml库的使用使用lxml库可以修正、读取和解析HTML文档。
【例4-12】示例如何使用lxml库来修正、读取和解析HTML文档。lxml库的简介与使用1. fromlxmlimportetree#导入etree模块2. importrequests3. 4. html_content='''#定义HTML字符串5. <html>6. <head><title>Examplesusingthelxmllibrary</title></head>7. <body>8. <div>9. <ul>10. <liclass="gcc"><h1>GuangzhouCollegeofCommerce</h1></li>11. <liclass="ITE"><h2>SchoolofInformationTechnologyandEngineering</h2></li>12. <liclass="GigData"><h3>DatascienceandBigDatatechnology</h3></li>13. <liclass="Class"><h4>BigData2401class</h4>14. </ul>15. </div>16. '''17. #(1)构造一个XPath解析对象并对HTML文本进行自动修正18. html=etree.HTML(html_content)19. result=etree.tostring(html)#输出修正后的结果,其类型是bytes20. #(2)读取本地HTML文件进行解析21. html=etree.parse('test.html')#读取当前工程目录中的test.html文件22. result=etree.tostring(html,pretty_print=True)#转换为字符串23. print(result)24. #(3)从网络上获取网页源码进行解析25. res=requests.get('/')26. html=etree.HTML(res.text)#解析爬出获取的网页源码27. request=etree.tostring(html)28. print(request)4.3.2XPath是一种在XML文档中查找信息的语言。同样,XPath也适用于HTML文档。它通过路径表达式来选取XML/HTML文档中的节点。1.XPath的基本语法XPath路径表达式用于在XML文档中选取节点或节点集。以下是一些基本的XPath语法。(1)基本路径表达式。XPath使用路径表达式在XMl文档中选取节点。节点是沿着路径或者step来选取的,常见的基本路径表述式及其示例如表4-4所示。XPath语法与使用路径表达式描述示例/选取根节点/html选取根元素<html>//选取文档中的所有匹配节点//a选取所有<a>元素.选取当前节点.//div选取当前节点的所有<div>子节点..选取父节点..//li选取父节点的所有<li>子节点@选取属性//@id选取所有有id属性的元素4.3.2(2)条件和谓词。路径表达式还可以包含谓词(predicate),用来精确定位元素,其放在方括号内。表4-5列举了常用的条件和谓词。XPath语法与使用谓词表达式描述示例//a[@href]选取所有带有href属性的<a>元素//div[@class]选取所有带有class属性的<div>元素//li[1]选取第一个<li>元素//ul/li[2]选取第二个<li>元素//p[text()]选取包含文本的<p>元素//h1[text()='Title']选取文本为Title的<h1>元素4.3.2(3)XPath的功能函数XPath中也提供功能函数进行模糊搜索,当定位的标签或元素对象仅包含了部分特征,这时可使用功能函数来模糊搜索该类对象。常用的XPath功能函数如表4-6所示。XPath语法与使用功能函数示例说明starts-with()//div[starts-with(@id,"co")]选取id值以co开头的div节点Contains()//div[contains(@id,"co")]选取id值包含co的div节点and//div[contains(@id,"co")andcontains(@id,"en")]选取id值包含co和en的div节点text()//li[contains(text(),"first")]选取li节点文本包含first的div节点4.3.22.XPath的使用了解了基本的XPath语法,下面通过一个示例展示如何使用XPath来提取HTML文档中的数据。【例4-13】使用XPath提取HTML文档中的数据。XPath语法与使用1. fromlxmlimportetree2. 3. html_content='''4. <html>5. <head><title>ExampleXpath</title></head>6. <body>7. <h1>PageTitle</h1>8. <pclass="content">Thisisasimpleexample</p>9. <divid="section">10. <ul>11. <li><ahref="/">Page1</a></li>12. <li><ahref="/index.html">Page2</a></li>13. <li><ahref="/">Page3</a></li>14. </ul>15. </div>16. </body>17. </html>18. '''19. tree=etree.HTML(html_content)#解析HTML内容20. #1.提取标题21. title=tree.xpath('/html/head/title/text()')[0]22. print("Title:",title)#输出:Title:ExampleXPath23. #2.提取所有段落24. paragraphs=tree.xpath('//p/text()')25. print("Paragraphs:",paragraphs)#输出:Paragraphs:['Thisisasimpleexample']26. #3.提取div中的li元素的文本27. li_texts=tree.xpath('//div[@id="section"]/ul/li/a/text()')28. print("Listitems:",li_texts)#输出:Listitems:['Page1','Page2','Page3']29. #4.提取所有链接的URL30. links=tree.xpath('//a/@href')31. print("Links:",links)#输出:Links:['/page1','/page2','/page3']4.3.2
3.XPath使用技巧在爬虫实践应用过程中,XPath路径可通过Chrome开发者工具予以获取,具体操作流程如下:(1)目标网站访问与元素定位:打开爬虫的目标网站主页(如/),将鼠标定位至期望提取数据的所在位置,例如“学校概况”处,右击鼠标,在弹出的快捷菜单中选定“检查”指令。(2)XPath路径复制:在打开的开发者工具“Elements”面板内,对所选元素右键操作,在弹出的快捷菜单中依次选择Copy->CopyXPath选项,如图4-9所示。
XPath语法与使用4.3.2【例4-14】通过XPath使用技巧获取目标网站(/)主页上的导航栏名称。
XPath语法与使用1. importrequests2. fromlxmlimportetree3. 4. headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36'5. '(KHTML,likeGecko)Chrome/Safari/537.36'}6. url='/'#目标网址7. res=requests.get(url,headers=headers)#发起请求8. res.encoding='utf-8'9. dom=etree.HTML(res.text)#解析网页源码10. #(1)获取“学校概况”导航栏名称11. school_info=dom.xpath('/html/body/div[1]/header/section/div[2]/ul/li[2]/a/text()')[0]12. print('school_info:',school_info)13. #(2)方法1:获取主页上所有导航栏标题,去掉li后面的谓词[2]14. Navigation_title1=dom.xpath('/html/body/div[1]/header/section/div[2]/ul/li/a/text()')15. print('所有导航栏名称:',Navigation_title1)16. #(3)方法2:使用先抓大再抓小先,寻找循环点的方法获取主页上所有导航栏标题17. titles=dom.xpath('//div[@class="mobile-inner-nav"]/ul/li')#先抓大li标签18. print('方法2获取主页导航栏名称:\n')19. fortitleintitles:20. print(title.xpath('./a/text()')[0])4.3.3XPathHelper是一个用于浏览器的开发插件,专门用于帮助用户轻松提取XPath路径而设计的。通过使用XPathHelper,用户可以在网页中快速定位和提取所需元素,并生成对应的XPath表达式。
1.XPathHelper插件的安装安装XPathHelper插件的步骤如下。(1)打开GoogleChrome浏览器,并访问Chrome网上应用店。(2)在搜索栏中输入“XPathHelper”,按回车键搜索该插件。(3)找到“XPathHelper”插件后,单击“添加至Chrome”按钮,如图4-10所示。(4)在弹出的确认对话框中,单击“添加扩展程序”按钮,以完成安装。(5)安装完成后,XPathHelper插件会出现在浏览器的扩展程序列表中,用户可以点击它的图标来启动插件。XPath开发工具4.3.32.XPathHelper插件的使用(1)打开需要提取信息的网页。首先,打开需要提取信息的网页。例如,打开清华大学出版社官网新闻主页(/newsCenter/news_index.html),目标是提取主页中某条新闻标题,如图4-11所示。XPath开发工具4.3.3
(2)启动XPathHelper插件。单击浏览器右上角的插件图标
启动XPathHelper插件。(3)激活XPathHelper模式。启动插件后,浏览器页面顶部弹出一个XPathHelper界面,如图4-12所示。在界面左侧的编辑区域用于输入路径表达式,右侧区域显示通过该路径表达式获取的结果。XPath开发工具4.3.3(4)查找元素的XPath表达式。①
移动鼠标悬停在某条“新闻标题”上,右击选择“检查(Inspect)”,打开浏览器开发者工具,并在“Elements”面板中高亮显示该新闻标题的HTML代码。②
将鼠标悬停在开发者工具中高亮显示的HTML代码上,右击选择Copy->CopyXPath复制该元素的XPath表达式,如图4-13所示。XPath开发工具4.3.3③
回到页面顶部的XPathHelper插件界面的左侧输入框,粘贴刚才复制的XPath表达式。按回车键,用户可以在XPathHelper插件界面右侧的输入框中看到该XPath表达式匹配的元素内容。新闻标题获取结果如图4-14所示。XPath开发工具4.3.41.数据采集需求采集清华大学出版社官网中关键字为“爬虫”的图书信息,爬取的图书字段包括:书名、作者、ISBN号、定价、图书链接,如图4-15所示。采集的图书信息保存到当前工程目录中tmp目录下的“spiderBook.csv”文件中。
综合案例—采集“爬虫”图书信息4.3.42.采集思路分析(1)打开清华大学出版社官网:/index.html,在搜索框中输入“爬虫”关键字,按回车键,可以看到图4-14所示的“爬虫”图书信息。(2)搜索到的“爬虫”图书共有3个页面,通过手动翻页浏览图书信息,以下为前2个页面的网址:/booksCenter/booklist.html?keyword=%e7%88%ac%e8%99%ab&keytm=8D38382C9A8E906D86&page=1/booksCenter/booklist.html?keyword=%e7%88%ac%e8%99%ab&keytm=8D38382C9A8E906D86&page=2从翻页的图书网页地址可以发现,只需要更改page后面的数字则可以构造出3个爬虫地址。
综合案例—采集“爬虫”图书信息4.3.4(3)打开开发者工具,在“Elements”面板中可以查看到每本图书的信息在li标签里,如图4-16
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- ProENGINEER Wildfire应用与实训教程 课件 魏峥 第1-5章 SoildWorks 设计基础-使用辅助特征
- 2026青少年网络直播行业的监管政策研究与市场投资分析与发展策略报告
- 2026中国生物识别传感器移动支付安全认证市场需求研究报告
- 2026农业科技园区发展规划及智慧农业装备创新投资评估报告
- 2026中国风电设备大型化趋势与海上风电投资热点报告
- 2026日本食品加工行业市场供需分析及投资评估规划分析研究报告
- 2026中国智能机器人航海应用行业市场深度调研及发展趋势和前景预测研究报告
- 2026中国新型催化技术行业技术创新及应用开发投资潜力评估规划报告
- 2026中国瑜伽服饰行业市场格局演变与渠道拓展战略研究报告
- 2026湄公河流域国家农业现代化市场供需分析及投资计划规划研究报告
- 耕地保护三级责任书
- 2026年天津市公安辅警笔试试题(含答案)
- 院前急救诊疗常规和技术操作规范(2025 年版)
- 2026年杭州市农产品冷链仓储可行性研究报告
- 箱式电阻炉操作规程操作规程
- 小儿孤独症谱系障碍诊疗指南(2025年版)
- 2026年北京市劳动合同范本三篇
- 2026年GCP复习提分资料附完整答案详解(名校卷)
- 2026年水利机械运行维护工试卷【考点梳理】附答案详解
- 毕业设计论文计算说明书闸阀
- 公司接待管理制度(新版)
评论
0/150
提交评论