使用scrapy 模拟登陆网站后 抓取会员中心相关信息
来源:互联网 发布:手持数据采集终端 编辑:程序博客网 时间:2024/05/17 06:53
有时候爬取网站的时候需要登录,在Scrapy中可以通过模拟登录保存cookie后再去爬取相应的页面。
重写start_requests方法
要使用cookie,第一步得打开它,默认scrapy使用CookiesMiddleware中间件,并且打开了。如果你之前禁止过,请设置如下
COOKIES_ENABLES = True
这里我重写了start_requests方法
def start_requests(self): return [scrapy.Request("http://www.*******.com/login.html", meta={'cookiejar': 1}, callback=self.post_login)]
Request指定了cookiejar的元数据,用来往回调函数传递cookie标识。
使用FormRequest
Scrapy为我们准备了FormRequest类专门用来进行Form表单提交的
def post_login(self,response): # 登陆成功后, 会调用after_login回调函数,如果url跟Request页面的一样就省略掉 return [scrapy.FormRequest.from_response(response, url='http://www.*********.com/index.php?m=login&a=checkLogin', meta={'cookiejar': response.meta['cookiejar']}, headers=self.post_headers, # 注意此处的headers formdata={ "username": "********", "password": "********" }, callback=self.after_login, dont_filter=True )]
FormRequest.from_response()方法让你指定提交的url,请求头还有form表单值,注意我们还通过meta传递了cookie标识。它同样有个回调函数,登录成功后调用。下面我们来实现它
def after_login(self,response): return scrapy.Request( "http://www.*******.com/userindex.html", meta={'cookiejar': response.meta['cookiejar']}, callback=self.parse_page)
完整代码
# -*- coding: utf-8 -*-import scrapyimport loggingclass LoginSpider(scrapy.Spider): name = 'login' post_headers = { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.8,en;q=0.6", "Cache-Control": "no-cache", "Connection": "keep-alive", "Content-Type": "application/x-www-form-urlencoded", "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36", "Referer": "http://www.*******.com/", } def start_requests(self): return [scrapy.Request("http://www.*******.com/login.html", meta={'cookiejar': 1}, callback=self.post_login)] def post_login(self,response): # 登陆成功后, 会调用after_login回调函数,如果url跟Request页面的一样就省略掉 return [scrapy.FormRequest.from_response(response, url='http://www.********.com/index.php?m=login&a=checkLogin', meta={'cookiejar': response.meta['cookiejar']}, headers=self.post_headers, # 注意此处的headers formdata={ "username": "********", "password": "********" }, callback=self.after_login, dont_filter=True )] def after_login(self,response): return scrapy.Request( "http://www.********.com/userindex.html", meta={'cookiejar': response.meta['cookiejar']}, callback=self.parse_page) def parse_page(self,response): logging.info(u'--------------消息分割线-----------------') mey_num = response.xpath('//span[@class="mey_num"]/text()').extract()[0] self.logger.info("my money %s", "------***------"+mey_num)
阅读全文
0 0
- 使用scrapy 模拟登陆网站后 抓取会员中心相关信息
- scrapy(二)之模拟登陆实现抓取
- 如何运用SCRAPY+MySQL抓取相关信息
- scrapy抓取一个电影网站信息
- 使用scrapy模拟登陆一般登陆不了的网站[已解决]
- 使用PHP curl模拟浏览器抓取网站信息
- python模拟登陆网站抓取数据
- scrapy抓取登陆页面
- 使用Scrapy建立一个网站抓取器
- 使用Scrapy建立一个网站抓取器
- 使用Scrapy抓取需要登录的网站
- 使用python抓取网站信息
- 使用Java模拟浏览器登陆网站(以抓取武汉理工大学教务处学生个人课表网页为例)
- PHP中CURL技术模拟登陆抓取网站信息,用与微信公众平台成绩查询
- 使用curl抓取登陆后的页面
- 使用HttpClient登陆网站 抓取页面数据
- python模拟登陆后用户访问网站
- 【Python】模拟登陆并抓取拉勾网信息(selenium+phantomjs)
- 2017-09-12 LeetCode_169 Majority Element
- 异步FIFO中的几个难点问题思考与解释
- Linux系统下用shell脚本病毒感染其它linux脚本程序
- PHP检查当前数组为几维数组
- 学习资源网站
- 使用scrapy 模拟登陆网站后 抓取会员中心相关信息
- Visual Studio相关操作内容
- Oracle 优化统计数据之直方图
- Android Studio更改JDK和SDK的路径
- Windows历代版本一览
- 用JS实现判断iframe是否加载完成
- 详解iOS开发中UITableview cell 顶部空白的多种设置方法
- rn打包以及更新线上bundle包
- 小白算法练习 lanqiao2017 国赛 发现环 tarjan 无向图