Scrapy中用cookie模拟登陆新浪微博

来源:互联网 发布:21网夏老师c语言视频 编辑:程序博客网 时间:2024/05/29 13:07

最近想做一个微博的搜索页文本分析的小项目,因为开放平台里这个api的限制略多,决定进入爬虫坑自己动手.

之前久闻Scrapy大名,尝试了一下,抓取网页甚是好用,避免了许多HTTP方面的繁琐处理.不过还是卡在了登陆这一步上.

一般模拟登陆有两种方式,一个是抓登陆时的包,然后模拟所需数据发送过去.由于新浪经常改参数和加密方式,这个方法费时费力.另一种就是直接发送cookie.

在Scrapy中具体实现时,就是在爬取的spider类中,重载start_requests方法,生成一个带cookie的request,后续爬取的request同样需要带上cookie.

一个爬取单个搜索结果网页并存储的简单spider代码如下:

#coding = utf-8from scrapy.contrib.spiders import CrawlSpiderfrom scrapy.http import Requestclass WeiboSpider(CrawlSpider):    name = 'weibo'    allowed_domains = ['weibo.com', 'sina.com.cn']    def start_requests(self):        url = 'http://s.weibo.com/weibo/'+keyword+'?page=2' #keyword为需要搜索的关键词,此处加上page=2易于测试是否成功登陆,因为搜索结果第二页未登录时是看不到的        print url        return [Request(url=url, method='get', callback=self.afterparse, cookies={'UOR':'book.51cto.com,widget.weibo.com,login.sina.com.cn',...},         headers={'Host': 's.weibo.com', 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0',         'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',   'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'Accept-Encoding': 'gzip, deflate', 'DNT': '1', 'Referer': '...',         'Connection': 'keep-alive', 'Cache-Control': 'max-age=0'})]  #此处,cookies中填入新浪登陆cookies的所有键值对,稳妥起见,headers也需要伪装一下,填入登陆时浏览器发送的header信息        def afterparse(self, response):        filename = response.url.split("/")[-2]        with open(filename, 'wb') as f:            f.write(response.body)

当时遇到的一个主要问题是如何获取cookies,建议在火狐里下一个firebug,打开网络面板,然后登陆新浪微博,在网络面板里各个包中找到weibo.com,打开请求header,将除cookie外其他信息填入代码中headers的位置,cookie按分号拆成多个键值对,填入cookies中.

好了,在afterparse这个函数里处理一下爬取的网页,开命令行测试,done!

下一篇会写一下借助beautiful soup把所需数据从js框架中解构出来的流程.

0 0
原创粉丝点击