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,我们可以在该方法下提取我们想要的字段。可以参考上面提到的博客连接,本文主要记录自己在学习爬取豆瓣需要破解的一些反爬取的手段。
---------------------

Scrapy模拟登陆豆瓣抓取数据的更多相关文章

  1. Java模拟登陆新浪微博抓取数据【转载】

    package com.shiyimm.crawler.weibo; import java.io.FileNotFoundException; import java.io.FileReader; ...

  2. 【转】详解抓取网站,模拟登陆,抓取动态网页的原理和实现(Python,C#等)

    转自:http://www.crifan.com/files/doc/docbook/web_scrape_emulate_login/release/html/web_scrape_emulate_ ...

  3. PHP Curl模拟登录并抓取数据

    使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据.具体实现的流程如下(个人总结): 1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息: ...

  4. PHP获取cookie、Token、模拟登录、抓取数据、解析生成json

    本文介绍使用PHP获取cookie,获取Token.以及模拟登录.然后抓取数据.最后解析生成json的的过程. 0. 设置Cookie路径 set_time_limit(0); //使用的cookie ...

  5. 识别图片验证码的三种方式(scrapy模拟登陆豆瓣网)

    1.通过肉眼识别,然后输入到input里面 from PIL import image Image request.urlretrieve(url,'image')  #下载验证码图片 image = ...

  6. Scrapy 模拟登陆知乎--抓取热点话题

    工具准备 在开始之前,请确保 scrpay 正确安装,手头有一款简洁而强大的浏览器, 若是你有使用 postman 那就更好了.           Python   1 scrapy genspid ...

  7. php中CURL技术模拟登陆抓取数据实战,抓取某校教务处学生成绩。

    这两天有基友要php中curl抓取教务处成绩的源码,用于微信公众平台的开发.下面笔者只好忍痛割爱了.php中CURL技术模拟登陆抓取数据实战,抓取沈阳工学院教务处学生成绩. 首先,教务处登录需要验证码 ...

  8. scrapy 知乎的模拟登陆及抓取用户数据

    最近看了python的scrapy 框架并用其抓取了部分知乎用户数据,代码主要是集中在知乎登陆和抓取时候的逻辑处理上. 1. 首先进入知乎登陆页面zhihu.com/#sigin上, 用xpath提取 ...

  9. Java模拟新浪微博登陆抓取数据

    前言:  兄弟们来了来了,最近有人在问如何模拟新浪微博登陆抓取数据,我听后默默地抽了一口老烟,暗暗的对自己说,老汉是时候该你出场了,所以今天有时间就整理整理,浅谈一二. 首先:  要想登陆新浪微博需要 ...

随机推荐

  1. Android 中三种启用线程的方法

    在多线程编程这块,我们经常要使用Handler(处理),Thread(线程)和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢? 首先说明Android的CPU分配的最小单元是线程,Han ...

  2. 如何配置JedisPool的参数

    转自:http://blog.csdn.net/huahuagongzi99999/article/details/13631579 如何配置Pool的参数 JedisPool的配置参数很大程度上依赖 ...

  3. Junit测试错误:### Error building SqlSession

    错误代码: org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession.### The error ...

  4. Python模块之pdfkit

    1.安装依赖 pip install python-docx #Python下的Microsoft Word 2007工具 pip install PyPDF2 #Python下的PDF工具 pip ...

  5. 断路器,AOP实现断路器模式 ------------Hystrix

    断路器:https://martinfowler.com/bliki/CircutiBreaker.html 核心思想: 在断路器对象中封装受保护的方法调用. 该断路器监控调用和断路情况 调用失败触发 ...

  6. 二进制安装kubernetes集群

    链接地址 https://www.cnblogs.com/leleyao/p/10453848.html  安装etcd 证书制作 apiserver 证书 [root@master01 ssl]# ...

  7. JavaScript的进制转换

    先介绍两个API: 一.number 类型的 toString 方法 语法 JavaScript: numberObject.toString( [ radix ] ) 参数 参数 描述 radix ...

  8. JS变量连续赋值

    下面就是这个经典案例: var a = {n: 1}; var b = a; a.x = a = {n: 2}; console.log(a);console.log(b); console.log( ...

  9. SELECT - 从表或视图中取出若干行

    SYNOPSIS SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] * | expression [ AS output_name ] [ ...

  10. samba - 为 UNIX 实现的 Windows SMB/CIFS 文件服务器

    SYNOPSIS 总览 Samba DESCRIPTION 描述 samba 套件是在 UNIX 系统上实现“服务器信息块”(通常简称 SMB) 协议的一组程序.这个协议有时也称为“通用互联网文件系统 ...