zoukankan      html  css  js  c++  java
  • 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(http://www.my516.com/heimitao/))
    经过调试(调试方法可以参考我的scrapy项目如何进行调试)


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

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

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

  • 相关阅读:
    洛谷P3233 世界树
    线性基
    CF321E Ciel and Gondolas
    洛谷P2619 Tree I
    重温一下基本数据类型以及自动提升数据类型的问题
    不可理喻的JSTL标签库
    理解RESTful架构(转)
    Node.js的优点和缺点(转载)
    自制双色球随机号码
    编程, 细心永远都不嫌多(记录java连接数据库的一个错误)
  • 原文地址:https://www.cnblogs.com/ly570/p/11284682.html
Copyright © 2011-2022 走看看