准备写论文了,需要爬取些互联网的数据进行分析下,Pyhton爬虫是一个比较简单的方法,虽然有许多的爬虫框架但是我并不需要太复杂的爬虫,所以决定从零开始写一个简单的爬虫爬一下微博和评论。
准备工具
爬虫就是一个分析HTTP请求的工作,首先需要一些抓取http的工具,推荐使用 Fiddler,简单免费。
还需要浏览器 GoogleChrome
分析微博网站
微博有三个入口,分别是
weibo.com
weibo.cn
m.weibo.cn
第一个是PC网页版,后两个是手机版,手机版网站结构相对简单爬取容易,所以选择m.weibo.cn
为爬取对象。
打开浏览器开发者模式,观察Network,在热门频道刷新,发现一个API
https://m.weibo.cn/api/container/getIndex?containerid=102803&openApp=0
这个地址的response就是热门微博的数据,接下来寻找翻页的方法,向下刷新观察发现一个地址在变化。
https://m.weibo.cn/api/container/getIndex?containerid=102803&openApp=0&since_id=1
since_id
这个参数是控制翻页的。
用同样的方法观察评论页面
https://m.weibo.cn/detail/{微博编号}
这个地址就是具体微博的详细,
https://m.weibo.cn/comments/hotflow?id={mblogid}&mid={mblogid}&max_id={max_id}&max_id_type=0
mblogid
是微博的编号,max_id
控制翻页,前一个request会告诉这个id的数,如果是0则表示最后一页。
微博页面分析完毕,接下来编写代码模仿浏览器发Http请求就OK了。
编写代码
首先我们需要用到urllib
这个库来发送请求。
还需要json
化一下数据。
1 | # -*- coding: utf-8 -*- |
首先访问热门微博页面,解析当前页面的热门微博的response,提取出每个微博的内容和地址。
1 | def GetHotWeiBoData(url): |
获取评论和下一页评论
1 | def GetCommentsData(comments_url): |
循环执行上面两个函数,就可以了
1 | def GetCommentsUrl(url, max_id=0): |
把数据保存起来
1 | def SaveData(data): |
让爬虫开始工作,为防止被禁,把爬取频率调低点。
1 | # 打开一个文件 a 已追加的方式打开,编码方式为 utf-8 |
如果想要爬取多页评论,需要登陆操作,设置 cookie。