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. vue实现ajax请求(vue-resource和axios)

    1.vue-resouce实现ajax请求 vue1中主要用vue-resouce实现ajax请求, 2.1 引用vue-resouce 引入axios,直接在index.html文件中引入; 或者在 ...

  2. jQuery基础--总结

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...

  3. C#=>递归反转栈

    原理,递归反转栈 using System; using System.Collections.Generic; using System.Linq; using System.Threading.T ...

  4. jmeter 添加header

    接口说明文档: article.fetch(通用转码服务) 通用转码服务,获取任意 url 的正文以及 title 等基本信息,仅支持 post 方法请求. 参数 参数 类型 是否必须 示例 其它说明 ...

  5. CentOS7通过SpeedTest工具测速

    首先要安装SpeedTest工具,这里提供两种方法安装SpeedTest: 一.通过直接下载SpeedTest脚本,给权限运行脚本即可 [root@bogon ~]#wget -O speedtest ...

  6. 验证客户端的合法性、socketserver模块

    一.为了防止客户端被人非法利用,需要在使用之前对客户端进行合法性验证.接下来就是客户端验证的几种方法 hmac  加密方法 import socket import os import hmac #能 ...

  7. [fw]拦截系统调用

    今天在ubuntu中玩了下“拦截系统调用”,记录下自己对整个实现的理解. 原理 在linux kernel中,系统调用都放在一个叫做“sys_call_table”的分配表里面,在进入一个系统调用的最 ...

  8. Codeforces Round #574 (Div. 2) A~E Solution

    A. Drinks Choosing 有 $n$ 个人,每个人各有一种最喜欢的饮料,但是买饮料的时候只能同一种的两个两个买(两个一对) 学校只打算卖 $\left \lceil \frac{n}{2} ...

  9. ORM外键关联

    #coding=utf-8 from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarativ ...

  10. C#设计模式:工厂模式

    一,工厂模式 using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...