内容概要:
最近自己学习了一些爬虫,学习之余,写了一个新浪微博的爬虫。大规模爬数据没有试过,但是爬取几十万应该没有什么问题。爬虫爬取的站点是新浪移动端站点。github地址为:https://github.com/yz21606948/sinaSpider
第一次写文章,难免有疏忽,大家共同交流,共同进步。也请喜欢的朋友,在github上打个star
内容分为三章,第一张介绍scrapy,第二张分析爬取网站,第三章分析代码。
获取Cookies
在cookies.py文件中,我们通过getCookies方法获取cookies。我们先用selenium模拟登录,用phantomJS进行渲染。就可以拿到cookies。这里需要注意到,我们应该多用几个账号密码。在程序中我已经提供一个可以用的账号密码。特别是大规模抓取,最好在淘宝上面买几十个,然后轮换着用Cookies,要不容易被BAN。代码如下:
编写中间层
中间层主要是UserAgent、Cookies的轮换。这是为了防止总是用同一个UserAgent、Cookies被新浪Ban掉。代码也很简单,就是在我们的Useragent、和Cookies中随机的挑选,轮换抓取。
编写Spider
编写spider我们把爬虫名字,需要抓取的微博号id写好。其中微博号id也是通过Fiddler抓包获得.然后start_requests为爬虫入口,开始我们的爬虫。
然后就是抓取个人信息。通过新浪微博的API接口,获取需要的字段。当完成需要字段的爬取后,接着就爬取微博内容的的信息。
需要注意的是:
yield Request(url=url_tweets, meta={"ID": response.meta["ID"]}, callback=self.parseTweets, dont_filter=True) 这句话中注意把dont_filter设置成True。这个字段表示需要重复抓取。
剩下对粉丝和关注者的操作基本一样。自己仔细调试下,就可以完成对微博的抓取了。
一些需要注意的地方
我们在写爬虫的时候应该善待爬取的网站。我们不断的爬取会给网站服务器造成很大的压力,所以我们在setting.py中应该设置爬取间隔。
在setting.py中加入DOWNLOAD_DELAY=4。表示我们4秒抓取一次。
将来
至此,爬虫编写完毕。在后面我会陆续更新分布式爬虫,使用redis-scrapy。还有对爬取的内容进行NLP。与大家一同进步,一同学习。
参考:
1、《Python网络数据采集》