【爬虫高阶】使用xpath语法获取任意关键词的百度搜索结果 您所在的位置:网站首页 百度的爬虫名称是什么 【爬虫高阶】使用xpath语法获取任意关键词的百度搜索结果

【爬虫高阶】使用xpath语法获取任意关键词的百度搜索结果

2024-07-05 10:12| 来源: 网络整理| 查看: 265

xpath爬取百度搜索结果 1. 需求背景2. xpath语法3. 实战操作3.1 分析页面信息3.2 共用代码3.3 手动输入Xpath语法3.4 手动copy Xpath语法 4. 全部代码 手动反爬虫: 原博地址

知识梳理不易,请尊重劳动成果,文章仅发布在CSDN网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息 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 requests from lxml import etree headers = { '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 = 'http://www.baidu.com/s?wd=python&rsv_spt=1&rsv_iqid=0xeed810a9001e6895&issp=1&f=3&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=0&rsv_dl=ts_1&rsv_btype=t&rsv_t=57c5siBk05bcHb4BPjbcKLMdz3LBQHqZaqvo%2BNf%2FlbX84n%2BS5jxTw%2B4bNPeM2dkOdpGd&oq=python&rsv_pq=a3612735003f993f&prefixsug=python&rsp=1&rsv_sug9=es_0_1&rsv_sug=9' html = 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 requests from lxml import etree headers = { '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 = 'http://www.baidu.com/s?wd=python&rsv_spt=1&rsv_iqid=0xeed810a9001e6895&issp=1&f=3&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=0&rsv_dl=ts_1&rsv_btype=t&rsv_t=57c5siBk05bcHb4BPjbcKLMdz3LBQHqZaqvo%2BNf%2FlbX84n%2BS5jxTw%2B4bNPeM2dkOdpGd&oq=python&rsv_pq=a3612735003f993f&prefixsug=python&rsp=1&rsv_sug9=es_0_1&rsv_sug=9' html = 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还是有点无脑,快捷,但是基本的语法还是要多写一写,不然时间久了就手生) 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有