多平台统一管理软件接口,如何实现多平台统一管理软件接口
689
2022-08-25
【爬虫高阶】使用xpath语法获取任意关键词的百度搜索结果
xpath爬取百度搜索结果
1. 需求背景2. xpath语法3. 实战操作
3.1 分析页面信息3.2 共用代码3.3 手动输入Xpath语法3.4 手动copy Xpath语法
4. 全部代码
1. 需求背景
纯粹是为了练习一下手动copy Xpath语法和手写输入Xpath语法之间的对比,前期准备,需要安装lxml和requests库
pip install requests lxml
2. xpath语法
简单的三个小点:
// 相对路径/ 绝对路径@ 选择属性
实用的五个方法,如下
序号 | 举例 | 应用 |
① contains() | //div[contains(@id,‘in’)] | 选择标签的时候常用 |
② text() | //a[text()=‘baidu’] | 直接获取文本 |
③ starts-with() | //div[starts-with(@id,‘in’)] | 选择开始的标识 |
④ not() | //input[not(contains(@class,‘a’)] | 选择剔除的标识 |
⑤ last() | //span/a/span[last()] | 选择最后一项,selenium中选择翻页最后一个按钮 |
3. 实战操作
还是以‘python’作为搜索的关键词,进行有关信息的爬取
3.1 分析页面信息
打开相应的界面,如下
注意,这里的搜索内容存在不同的标签中(标签为result c-container 和标签为result-op c-container xpath-log),因此在选择的时候就可以用到实用方法①的内容
3.2 共用代码
使用xpath语法获取之前需要将网页信息转化为可以选取的内容,那么这一部分对于手动copy Xpath语法或者手动输入Xpath语法都是一样的过程,因此是可以共用的
import requestsfrom lxml import etreeheaders = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36', 'Cookie': 'BIDUPSID=82508FD9E8C7F366210EB75A638DF308; PSTM=1567074841; BD_UPN=12314753; BAIDUID=0F2472E83269C89F55EFE0E6B0FEF5A9:FG=1; H_WISE_SIDS=142058_142112_132921_139203_142081_141124_143647_143855_142505_142018_141748_143424_142511_139176_141901_142779_131862_131246_142910_137745_138165_138883_141942_127969_140066_142905_140593_134047_143059_141807_140351_143470_143275_141930_131423_107312_140986_138596_139884_143477_140913_143549_141102_110085; BDUSS=FFQmx0SVFlVjJqdHBIc0tkRTZUOVJKfmotMnY5dU1WYUpPfjhoUTZnU2Qzd0pmRVFBQUFBJCQAAAAAAAAAAAEAAABQontKTWlzc2Fst-gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ1S216dUtteTz; MCITY=-%3A; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; ispeed_lsm=2; H_PS_645EC=cf552cnaA948r4Z3SxcPHhp5RSadAH1Ub95%2BXYc%2FnEzqueJzigDPiyFKU%2BGrNsTbM2UI; BD_HOME=1; H_PS_PSSID=31624_1442_31325_21087_31253_32045_31715_30823_22158; sug=3; sugstore=1; ORIGIN=0; bdime=0'}url = '= requests.get(url, headers = headers)soup = etree.HTML(html.text)
3.3 手动输入Xpath语法
代码如下,首先是要定位一个父标签,然后选择含有‘result’的子标签,最后所获取的内容就是在这里面了
titles = soup.xpath("//div[@id='content_left']/div[contains(@class,'result')]")for i in titles: title = i.xpath('h3/a/text()') #这里h3之前不能添加下划线 print(''.join(title).strip())
→ 输出的结果为:
Welcome to .org官方基础教程 | 菜鸟教程(计算机程序设计语言)_百度百科5年 功力,总结了 10 个开发技巧教程 - 廖雪峰的官方网站环境搭建 | 菜鸟教程你都用 来做什么? - 知乎基础教程,入门教程(非常详细)3 * 和 ** 运算符__极客点儿-CSDN博客_视频大全_高清在线观看
3.4 手动copy Xpath语法
这种方式还是简单无脑,直接动动鼠标右键然后数数就可以完成xpath语法的输入,最终获得想要的数据,获取方式如下,这里直接把之前爬取淘宝时候的示例图拿过来了
代码如下,可以发现每次复制的Xpath 都是以‘id’为属性的,因此修改‘id’对应的值就可以获取想要的目标数据,最后也就是遍历该页面的数据量即可
for i in range(1,11): titles = soup.xpath(f'//*[@id="{i}"]/h3/a/text()') print(''.join(titles).strip())
→ 输出的结果为:
Welcome to .org官方基础教程 | 菜鸟教程(计算机程序设计语言)_百度百科5年 功力,总结了 10 个开发技巧环境搭建 | 菜鸟教程教程 - 廖雪峰的官方网站你都用 来做什么? - 知乎基础教程,入门教程(非常详细)3 * 和 ** 运算符__极客点儿-CSDN博客_视频大全_高清在线观看
4. 全部代码
通过上面两个结果的输出,仔细查看会发现python/Python这个搜索的关键词不见了,核实一下标签信息,发现这个关键词是在单独的标签中,如下,如果只通过 绝对路径获取文本数据,只能获取上面输出的结果,不能获取全部的标题数据
最后完善的全部代码如下,注意a标签后面是有两个反斜杠的(// 相对路径)
import requestsfrom lxml import etreeheaders = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36', 'Cookie': 'BIDUPSID=82508FD9E8C7F366210EB75A638DF308; PSTM=1567074841; BD_UPN=12314753; BAIDUID=0F2472E83269C89F55EFE0E6B0FEF5A9:FG=1; H_WISE_SIDS=142058_142112_132921_139203_142081_141124_143647_143855_142505_142018_141748_143424_142511_139176_141901_142779_131862_131246_142910_137745_138165_138883_141942_127969_140066_142905_140593_134047_143059_141807_140351_143470_143275_141930_131423_107312_140986_138596_139884_143477_140913_143549_141102_110085; BDUSS=FFQmx0SVFlVjJqdHBIc0tkRTZUOVJKfmotMnY5dU1WYUpPfjhoUTZnU2Qzd0pmRVFBQUFBJCQAAAAAAAAAAAEAAABQontKTWlzc2Fst-gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ1S216dUtteTz; MCITY=-%3A; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; ispeed_lsm=2; H_PS_645EC=cf552cnaA948r4Z3SxcPHhp5RSadAH1Ub95%2BXYc%2FnEzqueJzigDPiyFKU%2BGrNsTbM2UI; BD_HOME=1; H_PS_PSSID=31624_1442_31325_21087_31253_32045_31715_30823_22158; sug=3; sugstore=1; ORIGIN=0; bdime=0'}url = '= requests.get(url, headers = headers)soup = etree.HTML(html.text)#手写Xpath语法titles = soup.xpath("//div[@id='content_left']/div[contains(@class,'result')]")for i in titles: title = i.xpath('h3/a//text()') #这里第一个下划线都不能添加 print(''.join(title).strip())#这种是手写xpath语法,还有复制粘贴的方式#手动copy Xpath语法for i in range(1,11): titles = soup.xpath(f'//*[@id="{i}"]/h3/a//text()') print(''.join(titles).strip())#这种是直接复制粘贴的,要想获得全部的数据,就需要使用新相对路径
→ 输出的结果为:(总结一下:这两种方式直接copy还是有点无脑,快捷,但是基本的语法还是要多写一写,不然时间久了就手生)
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~