简单爬虫爬取微博数据(二)
昨天呢讲了如何通过一个最基本的爬虫来抓取单个页面上的数据,但这样我们肯定是不能满足的,比如我们想要抓取一个人的所有微博的数据,那怎么办呢?我们不能手动的去点击“下一页”,我们肯定需要程序来帮我们做这件事情,所以我们今天的重点就是如何通过程序实现自动的跳转页面爬取数据。
Step1
首先要做的前期准备工作,其实是针对新浪微博的特点,由于新浪一定要登陆的用户才能点击下一页,不然只能看到第一页的内容,所以我们要模拟登陆。不过之前网上看到的其他模拟登陆的方法都太过复杂了,而且会随着某浪自己改登陆加密方法而改动,很是不方便,所以我们用cookie的方式来登陆。
首先我们要找到自己在新浪微博的cookie,仍然是登陆手机版,然后在safari中点击检查元素,来检查cookie,查找到了weibo.cn的很多cookie,具体该用哪一个呢?这个...我的解决方法是都记下来传给浏览器,总有一个是有用的。
cookie找到自己的cookie以后的方法就简单多了。首先我们要用一个dict把所有的cookie记录下来
headers = {'gsid_CTandWM':'
your cookie'}
然后在发出请求中加入你的cookie
yield Request("http://weibo.cn/xiena",cookies=headers, callback=self.parse)
这样就可以成功登陆啦
一定要注意的是,要重写class的start_requests方法,这样才能自定义初始访问状态,不然默认的状态是不会提交cookie的。
Step2
接下来是我们的自动跳转部分,实现自动跳转用的也是request方法,具体实现,就是像上一章一样,用xpath找到要跳转的链接,首先要分析html文件
html文件这次我们用的是娜姐的微博,可以看到这个地方的href属性就是我们需要找的跳转链接了,用上次的方法把它提取出来
item['ids'] = sel.xpath('form/div/a/@href').extract()
然后用request方法跳转,跳转的时候需要注意加上cookie,同时,item['ids']是一个list,所以要遍历它
for st in item['ids']:
st = "http://weibo.cn"+st
req = Request(url = st,cookies = headers, callback = self.parse)
yield req
这样以后,再运行我们的小爬虫,就可以看到它不断的自动翻页爬取内容啦~
总结
爬虫小程序到现在已经初步可以运行了,那么下一步就应该考虑优化细节,比如调整爬虫的爬取时间间隔,避免被封账号之类的事情0.0,然后要考虑如何优化爬虫的性能,同时考虑同时运行多个爬虫,分布式工作的方法。