Python 爬虫小白尝试简单爬虫时遇到的小疑惑

第一次玩 python, 也是第一次玩爬虫

import requests
from lxml import etree

url = ‘http://s.weibo.com/top/summary
data = requests.get(url).text
s=etree.HTML(data)

result1 = s.xpath(’//[@id=“pl_common_searchTop”]’)
result2 = s.xpath(’//
[@id=“realtimehot”]’)

print(result1)
print(result2)

输出:

[<Element div at 0x10874a888>]
[]

为何 result2 为空?而 result1 能获取到,而且 xpath 一级一级往下获取有时候直接就获取不到对象了,发现在获取不到的前面会有
<!-- xxx -->
这样的注释,是因为这个才获取不到吗?大神求指点,翻来翻去没翻到有这种情况,可能是属于 hello world 级别问题了…
Python 爬虫小白尝试简单爬虫时遇到的小疑惑


8 回复

第二个 xpath 的是异步加载的吧,你可以看下爬下来的 html 和网页源代码是否相同


在原网页中右键查看源码,然后搜索你要查找元素的标签名或者字符串,仔细对比有没有,如果没有就表示是异步加载,也就是常说的 ajax 技术,需要用浏览器 f12 调试找出对应的 js 请求链接,再去请求该链接,就能拿到数据,,我也是刚忙完




爬下来的的 html 跟网页源代码是一样的

因为是用 js 生成的元素

data = requests.get(url).text
加个参数
data = requests.get(url, stream=True).text

你自己去看源代码,然后分别搜索你的这两个 ID,第一个是能搜索到的,第二个搜不到,说明源代码中根本没有这个 ID

加参数结果一样

找到 ajax 的请求链接拿到的数据

try{window.&( 热搜数据的 json );}catch(e){}

是这样的格式,用 python 自带的 json 解析不了

感谢 这种情况就无法用 xpath 解析得用正则是吗?

回到顶部