python xpath text 空_如何解决python xpath爬取页面得到空列表(语法都对的情况下)...

引言:

很多网页呈现给我们的静态页面,但是实际上是由服务器端的动态页面生成的。再加上网站设有反爬虫机制,所以抓取到的页面不一定和源码相同。

所以!!从源码里copy xpath,不一定能取到数据!

实例:

非常的简单,从百度首页上,抓取“新闻”这两个字。

import requests

from lxml import etree

url="http://www.baidu.com"

ua={'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'}

bd = requests.get(url, headers=ua)

bd.encoding='utf-8'

接下来打印一下我们抓取到的页面

print(bd.text)

看不出来啥,当然了,不出问题的话,你会以为这就是页面的源码。

然后我们试一下打印“百度一下“这个按钮的文本。

numl=html.xpath('//*[@id="su"]//@value')

输出:百度一下

好,可以,没问题。

试一下打印”新闻“。网页源码上 新闻、地图、贴吧.... 这些标签都在一个id为"u_sp"的div下,那么:

res = html.xpath('//*[@id="u_sp"]/a[1]//text()')

这样写,能输出”新闻“在理论上是没错的,但我特喵搞了好久,啊喂怎么老是空啊?

id不行我试试class吧,这几个标签的class都是”mnav",

res = html.xpath('//*[@class="mnav"]//text()')

输出:['新闻', 'hao123', '地图', '视频', '贴吧', '学术']

res = html.xpath('//*[@class="mnav"]//text()')[0]

输出:['新闻']

看来,class可以,那id为什么不行,也不是所有的id不行,刚才“百度一下”就可以的啊。

看了一下打印出来的抓取的页面代码,????id什么时候成了"u1"了,谷歌浏览器查看源码明明是“u_sp”啊!

于是,

res = html.xpath('//*[@id="u1"]/a[1]//text()')

输出:['新闻']

学习之路漫长......

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 XPath 下厨房菜谱数据也是一种常见的方法。步骤如下: 1. 使用 requests 库向下厨房的菜谱搜索页面发送请求,获 HTML 页面内容。 2. 使用 lxml 库解析 HTML 页面,创建 XPath 对象。 3. 使用 XPath 对象提菜谱列表,以及每道菜谱的详细页面链接。 4. 遍历菜谱列表,使用提到的详细页面链接,向每道菜谱的详细页面发送请求,获 HTML 页面内容。 5. 使用 XPath 对象提菜谱的详细信息,例如食材、做法等。 下面是一个简单的 Python 下厨房菜谱的示例代码: ```python import requests from lxml import etree # 发送请求,获搜索页面的 HTML 内容 url = 'https://www.xiachufang.com/search/?keyword=红烧肉' response = requests.get(url) html = response.text # 解析 HTML 页面,创建 XPath 对象 selector = etree.HTML(html) # 提菜谱列表,以及每道菜谱的详细页面链接 recipe_list = selector.xpath('//div[@class="recipe"]') for recipe in recipe_list: recipe_link = recipe.xpath('./a/@href')[0] # 发送请求,获详细页面的 HTML 内容 recipe_response = requests.get(recipe_link) recipe_html = recipe_response.text # 解析 HTML 页面,创建 XPath 对象 recipe_selector = etree.HTML(recipe_html) # 提菜谱的详细信息 recipe_name = recipe_selector.xpath('//h1[@class="page-title"]/text()')[0] recipe_ingredients = recipe_selector.xpath('//div[@class="ings"]/text()')[0] recipe_steps = recipe_selector.xpath('//div[@class="steps"]/ol/li/p/text()') # 打印菜谱的详细信息 print(recipe_name) print(recipe_ingredients) print(recipe_steps) ``` 注意,XPath语法需要熟悉,可以通过 Chrome 浏览器的开发者工具,选中网页中的元素,然后右键选择 Copy -> Copy XPath,获该元素的 XPath 表达式。同时,网站内容时需要遵守网站的虫协议,不要过度频繁地发送请求,以免对网站造成影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值