上一篇
Python 学习之旅:进击吧,爬虫!
解锁了Python的hello word! 成就,进阶到实战应用领域,先确立个小目标,尝试抓取一个网站的信息练手。新浪微博作为我国最大社交网站,有着太多让我们感兴趣的信息,对于萌新来说再适合不过的练习对象。
首先了解到新浪微博是个API式前后分离网站,页面上的信息全部通过异步请求API接口完成。这是个好消息,完全避免使用正则表达式过滤信息,降低我们获取信息的难度。
在Chrome浏览器,按F12进入调式模式。选择Network标签,再选择XHR标签,重新刷新页面,查看到所有触发的接口地址。
Python通过Requests模块可以模拟请求接口,获取想要的信息。举个例子:爬取微博用户评论信息。
PYimport requests
url = 'https://m.weibo.cn/comments/hotflow?id=4608227142276365&mid=4608227142276365&max_id_type=0'
headers = {'User-Agent': "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Mobile Safari/537.36"}
html = requests.get(url,headers = headers)
print json.loads(html.text)
看到成功获取数据后,不要太过兴奋,新浪微博这类老牌网站,目前只是给了小甜头而已。你想获取后续数据,需要用户登陆信息,产生Cookies值,Requests才能继续获取数据
- 访问 chrome://flags/#site-isolation-trial-opt-out
- 修改 Disable site isolation 选项将 Default 改成 Disabled
- 点击 Relaunch 按钮,重启浏览器
- 回到 XHR 标签,点击的接口,查看 header 信息
- 在 Response Headers 选项卡上,会多出 cookie 的信息
PYimport requests
url = 'https://m.weibo.cn/comments/hotflow?id=4608227142276365&mid=4608227142276365&max_id=145309488653889&max_id_type=0'
headers = {'User-Agent': "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Mobile Safari/537.36"}
cookies = {'Cookie':'Response Headers的cookie值'}
html = requests.get(url,headers = headers,cookies = cookies)
result = json.loads(html.text)
※ 新浪微博的cookie有时间限制,cookie值失效会过期,请求自然会失败。
最新评论Latest comments