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
- Scrapy中用cookie模拟登陆新浪微博
- 模拟新浪微博登陆(直接调用cookie方法)
- 模拟登陆新浪微博【直接填入Cookie】(转)
- 模拟新浪微博登陆
- 模拟登陆新浪微博
- scrapy模拟登录新浪微博
- scrapy模拟登录新浪微博
- [Scrapy]模拟登陆并获取Cookie值
- [Scrapy]模拟登陆并获取Cookie值
- 新浪微博模拟登陆的加密算法
- 模拟新浪微博自动登陆
- snoopy模拟登陆新浪微博
- snoopy 模拟新浪微博登陆
- 新浪微博JAVA代码模拟登陆
- 2015_3G新浪微博模拟登陆
- 新浪微博模拟登陆 java
- python新浪微博模拟登陆
- Java实现新浪微博模拟登陆
- 迷宫路径(bfs和dfs)
- android介绍
- 在linux下安装jdk
- PAT (Advanced Level) 1005. Spell It Right (20) string转int,哈希
- Property follows Cocoa naming convention for returning 'owned' objects 错误解决办法
- Scrapy中用cookie模拟登陆新浪微博
- iOS之新建工程上下出现黑色块
- 测试String类的intern方法
- CSS-动画
- 环境变量的解释和配置 以及命令行运行java程序
- java多线程使用总结
- 线性表的顺序表示和实现
- SQL脚本积累之四-----if...else...使用示例
- [CortexM0--stm32f0308]Option Byte