Scrapy模拟登陆豆瓣抓取数据

由于豆瓣网站是反爬虫的,因此要破解反爬虫和模拟登录,还有需要破解验证码。

1创建项目 (在pycharm中创建scrapy爬虫工程即可)

scrapy  startproject douban

其中douban是我们的项目名称

2创建爬虫文件

进入到douban 然后创建爬虫文件

scrapy genspider dou douban.com

或者 scrapy genspider -t crawl dou douban.com  # 这个在创建时使用的是模板crawl

这里需要注意的是Spider的名称不能和项目的名称重复。

创建后的dou.py的内容为:

3然后使用pycharm打开douban工程

模拟登陆(关于模拟登录下面这个博客写的很详细了)

代码中一些参数什么含义已经有注释了:如下显示

# -*- coding: utf-8 -*-
import scrapy
from douban.items import DoubanItem
from scrapy.http import Request ,FormRequest

class DouSpider(scrapy.Spider):
    name = 'dou'
    allowed_domains = ['douban.com']
    # start_urls = ['http://douban.com/']
#target_url 表示我们想爬取内容的地址,target_url 也可以是模拟登录成功后你的个人中心
    target_url = 'https://movie.douban.com/subject/1652592/comments?start={}&limit=20&sort=new_score&status=P'

    # 编写start_requests()方法,第一次会默认调取该方法中的请求
    def start_requests(self):
        return [Request("https://www.douban.com/", meta={"cookiejar": 1}, callback=self.login)]
    def login(self, response):
        # 判断有误验证码
        # 设置要传递的post信息
        data = {
            "ck":"",
            "name":"*****",#账号
            "password":"******",密码
            "remember":"false",
            "ticket":""
        }
        # print("登录中…")
        # 通过FormRequest进行登陆
        return [FormRequest(url="https://accounts.douban.com/j/mobile/login/basic",
                              method = 'POST',
                              # 设置cookie信息
                              meta={"cookiejar": response.meta["cookiejar"]},
                              # 设置post表单中的数据
                              formdata=data,
                              # 不进行去重处理
                              dont_filter=True,
                              # 设置回调函数,此时回调函数为next
                              callback=self.next,
                                          )]

    def next(self, response):
        data = response.body
        with open("F:\\大讲台爬虫\\python爬虫\\scrapy\\douban\\a.html", 'wb') as f:
            f.write(data)
        yield Request(self.target_url,
                      callback=self.next2, meta={"cookiejar": True})

    def next2(self, response): #response返回的是target_url对应的内容
        print(response.xpath("/html/head/title/text()").extract())

经过调试(调试方法可以参考我的scrapy项目如何进行调试)

login()方法中涉及的回调函数返回的信息是登录是否成功的信息

下面是我们的正常运行结果(中间需要在settings.py文件设置一些参数前面的一篇博客写的很好了)

总结:我们可以将target_url改成我们想在豆瓣上爬取的网页,next2方法是网页返回的response,我们可以在该方法下提取我们想要的字段。可以参考上面提到的博客连接,本文主要记录自己在学习爬取豆瓣需要破解的一些反爬取的手段。

下面有空写验证码破解

 

 



 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值