Python 爬虫小白尝试简单爬虫小疑惑

2018-03-20 00:04:17 +08:00
 ennisk
第一次玩 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 级别问题了...
2730 次点击
所在节点    Python
9 条回复
okface
2018-03-20 00:10:19 +08:00
第二个 xpath 的是异步加载的吧,你可以看下爬下来的 html 和网页源代码是否相同
Leigg
2018-03-20 00:21:47 +08:00
在原网页中右键查看源码,然后搜索你要查找元素的标签名或者字符串,仔细对比有没有,如果没有就表示是异步加载,也就是常说的 ajax 技术,需要用浏览器 f12 调试找出对应的 js 请求链接,再去请求该链接,就能拿到数据,,我也是刚忙完
ennisk
2018-03-20 09:36:46 +08:00
@okface
@Leigg

爬下来的的 html 跟网页源代码是一样的
vincenth520
2018-03-20 09:37:01 +08:00
因为是用 js 生成的元素
xpresslink
2018-03-20 10:13:18 +08:00
data = requests.get(url).text
加个参数
data = requests.get(url, stream=True).text
Hopetree
2018-03-20 11:03:37 +08:00
你自己去看源代码,然后分别搜索你的这两个 ID,第一个是能搜索到的,第二个搜不到,说明源代码中根本没有这个 ID
ennisk
2018-03-20 23:48:54 +08:00
@xpresslink 加参数结果一样

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

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

是这样的格式,用 python 自带的 json 解析不了
xpresslink
2018-03-21 11:12:24 +08:00
实际上数据请求时已经一次性取回来了,只不过是封装成 json 被传到 js 脚本里,然后再渲染的。

mport requests
import re

url = 'http://s.weibo.com/top/summary'
data = requests.get(url).text
result = re.findall(r'realtimehot\\">(.*?)(?=<\\/a>)', data)

for item in result:
print(item.encode('ascii').decode('unicode-escape'))

偶遇李沁

1 秒睡着睡眠质量差


男方家里买来这样的家具

化妆品重金属锑超标

金毛患哮喘主人陪散步

发错信息还被回复

合肥奶奶台湾爷爷

朱亚文承认二胎

窃贼与失主同名同姓住同村

蛟龙突击队押解海盗

机智撩妹救下轻生女孩

全班只有一个男生

网约车打到兰博基尼

韩东君王文也否认恋情

卫生纸变占座神器

厦门这家餐厅只卖煮泡面

胸罩内藏十公斤黄金

泰剧天生一对

陌上花开燕子归

兰博新皮肤

你的睡眠合格吗

惠若琪公布恋情

3unshine 新剧停拍

歌手 声明

五大最壮观的自然景象

脸皮厚的人更长寿

朱正廷公司声明

荔枝味的吻

理想中的婚后生活

将卧室改成温馨病房

彭于晏

蔡徐坤 repo

寄 iPhone 签收 5 坨铁

春分

张一山 王俊凯

猫住二楼 狗住一楼

#异地恋甜蜜的细节#

男生想象的女孩子生活

热门面部修容

妊娠纹

惠若琪身高

胡杏儿叶璇

卖房照顾痴呆母亲 20 年

因哭泣被赶下飞机

熊猫养成必经之路

春分竖蛋

小哥雨夜背老人上摆渡车

李泽钜 戴其冠承其重

踏青赏花
ennisk
2018-03-22 00:42:17 +08:00
@xpresslink 感谢 这种情况就无法用 xpath 解析得用正则是吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/439546

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX