php 模拟登录豆瓣,大师网-Scrapy爬虫模拟登陆豆瓣

首先还是创建爬虫,其命令如下:

#01.创建 Scrapy 项目

scrapy startproject simulate_login

#02. 进入 simulate_login目录下,创建爬虫

scrapy genspider your_spider douban.com

模拟登陆豆瓣的关键点

1、分析真实post地址,寻找formdata;

2、模拟post,构造类似的formdata;

3、处理验证码。

豆瓣登陆地址为https://accounts.douban.com/login,进入登陆界面,我们首先输入账号和密码,密码故意输错,然后输入正确的验证码。按F12分析真实的post地址---,寻找他的formdata,如下图:

356108.html

捕获.PNG

实战操作:

几个注意事项:

1、注意Python2和Python3的部分语法区别;

2、注意根据自己的实际情况,填写headers部分。

到2018年8月10日为止,该方法还可以登陆豆瓣。下面贴出主要代码:

# -*- coding: utf-8 -*-

import scrapy

import urllib,re

from scrapy.http import Request,FormRequest

class YourSpiderSpider(scrapy.Spider):

name = 'your_spider'

allowed_domains = ['douban.com']

#start_urls = ['http://douban.com/']

headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36"} #供登录模拟使用

def start_requests(self):

url='https://www.douban.com/accounts/login'

#return [Request(url=url,meta={"cookiejar":1},callback=self.parse)]#可以传递一个标示符来使用多个。如meta={'cookiejar': 1}这句,后面那个1就是标示符

return [scrapy.FormRequest("https://accounts.douban.com/login", headers=self.headers, meta={"cookiejar":1}, callback=self.parse)]

def get_content(self, response):

title = response.xpath('//title/text()').extract()[0]

if u'登录豆瓣' in title:

print("登录失败,请重试")

else:

print("登陆成功")

def parse(self, response):

captcha = response.xpath('//*[@id="captcha_image"]/@src').extract()

print(captcha)

if len(captcha)>0:

#有验证码,人工输入验证码

urllib.request.urlretrieve(captcha[0],filename=r"C:\Users\LBX\your_project\simulate_login\simulate_login\captcha.png")

captcha_value=input('查看captcha.png,有验证码请输入:')

data={

"form_email":"18353113181@163.com",

"form_password":"9241113minda",

"captcha-solution":captcha_value,

}

else:

#此时没有验证码

print("无验证码")

data={

"form_email":"18353113181@163.com",

"form_password":"9241113minda",

}

print("正在登陆中.....")

#进行登录

return[

FormRequest.from_response(

response,

meta={"cookiejar":response.meta["cookiejar"]},

headers=self.headers,

formdata=data,

callback=self.get_content,

)

]

模拟登录豆瓣,需要使用 Scrapy 模拟登录的插件 `scrapy-login`。这个插件可以帮助你实现模拟登录,自动填写表单,发送 POST 请求等功能。 以下是模拟登录豆瓣的步骤: 1. 安装 scrapy-login ``` pip install scrapy-login ``` 2. 创建一个新的 Scrapy 项目 ``` scrapy startproject douban ``` 3. 在 `settings.py` 中添加以下代码: ``` DOWNLOADER_MIDDLEWARES = { 'scrapy_login.middleware.ScrapyLoginMiddleware': 200, } LOGIN_URL = 'https://accounts.douban.com/passport/login' LOGIN_USERNAME = 'your_username' LOGIN_PASSWORD = 'your_password' # 将 'douban' 替换为你的项目名称 LOGIN_REQUESTS_CONFIG = { 'endpoint': 'https://accounts.douban.com/j/mobile/login/basic', 'data': { 'name': LOGIN_USERNAME, 'password': LOGIN_PASSWORD, }, 'method': 'POST', 'headers': { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36', 'Referer': 'https://accounts.douban.com/passport/login', }, 'meta': { 'dont_redirect': True, 'handle_httpstatus_list': [302], }, } ``` 这里的 `LOGIN_URL` 是豆瓣登录页面地址,`LOGIN_USERNAME` 和 `LOGIN_PASSWORD` 是你的豆瓣账号和密码。 4. 创建一个新的 Spider,并添加以下代码: ```python from scrapy.spiders import Spider from scrapy_login import login_user class DoubanSpider(Spider): name = 'douban' start_urls = ['https://www.douban.com/'] def start_requests(self): for url in self.start_urls: yield login_user(url=url, callback=self.parse) def parse(self, response): # 在这里处理登录后的页 pass ``` 5. 运行爬虫 ``` scrapy crawl douban ``` 这样就可以模拟登录豆瓣了。需要注意的是,豆瓣有反爬虫机制,如果爬取速度过快或者频繁登录可能会导致账号被封禁。因此,建议在开发时使用测试账号进行测试,不要过度使用豆瓣的接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值