微博热点信息爬虫
最近看到一个项目挺有意思的,难度也不高,贴出来分享一下。
一、爬取地址
观察网址,我们发现当查询某个话题时,微博网址后面会带参数q,后面那个refer参数可以忽略。因此,我们想要爬取某个话题的时候只需要修改q即可。
https://s.weibo.com/weibo?q=%E9%BB%91%E7%A5%9E%E8%AF%9D%E6%82%9F%E7%A9%BA&Refer=topic_weibo
二、模拟浏览器头,构造请求
首先按F12打开开发者工具,找到自己所需要的信息,后端发给前端的信息分为很多种,大部分信息都在文档里面,可以先用筛选确定。
在微博这里我们要的信息就是第一条。
重点关注这三个地方。
URL与我们在浏览器看到的相同,有些网站为了防爬会在用户请求时调用js代码重新构造请求URL,这里URL没变就不用管。
请求方法是GET,GET请求头构造比较简单,如果是POST需要填充表单或者其它参数,GET方法就按浏览器请求头构造。
Cookie是缓存,当我们登录网站的时候,我们的登录信息会留在cookie里面,这样就避免了下次重新登录。因此登陆之后复制Cookie的才有用,微博查询时一定要登录,否则返回的内容是空的。
接下来就构造请求头,用python的request库。user-agent是你的浏览器信息,换不换随意。
headers = {
'cookie':'复制你自己的浏览器Cookie,一定要先登录',
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
}
三、开始爬取
因为爬取下来的文档是html格式的,所以我们用文档树来提取,安装lxml库就行,如果是json格式的就按照字典来提取数据。
import requests
from lxml import etree
headers = {
'cookie':'',
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
}
url = 'https://s.weibo.com/weibo?q=%E9%BB%91%E7%A5%9E%E8%AF%9D%E6%82%9F%E7%A9%BA&Refer=topic_weibo'
res = requests.get(url,headers=headers)
resXpath = etree.HTML(res.text) #解析爬取的内容