Scrapy--post请求和模拟登录--start_requests(self)
程序员文章站
2022-03-02 22:25:01
...
1.Request和Response
1)scrapy.Request参数
url #指定请求路径
callback #指定解析回调函数
meta # meta 可以实现在spider之间的数据传送
# 主要实现request和response之间的数据共享(回调函数需要的参数)
# meta传参时,value不要使用对象的引用,需要使用常量值
2)response参数
text #网页文本信息
meta #scrapy.Requeat传过来的字典对象
status #响应状态吗
url #响应路径
headers #响应头数据
xpath
……
例:
yield scrapy.Request(url=str(i['img']),meta={'name':i['name']},callback=self.parse_img)
def parse_img(self,response):
print('____saveImg_____')
# response.meta是读取request中的meta数据
name = response.meta['name']
print(name)
print(response.url)
2.start_requests(self)此方法是spider模块中的定制方法,是一个重写方法,不能修改名字和参数
作用:爬虫从该函数开始,start_urls 和 parse( ) 函数可删除,可在该函数中写入多种请求
1)yield scrapy.Request( )
#get请求,参数与1中相同
2)yield scrapy.FormRequest( )
#post请求
参数:url
formdata #post请求提交的数据,为字典格式
callback #指定解析回调函数
headers #指定post请求头
yield 方法调用前一般加yield表示这个对象给引擎
例:
import scrapy as scrapy
from scrapy.http import HtmlResponse
from gushiwen import ydm_http
class GushiwenSpider(scrapy.Spider):
name = 'gsw'
allowed_domain=['www.gushiwen.org','so.gushiwen.org','www.baidu.com']
def start_requests(self):
#开始发布请求任务
print('---Gushiwen 开始发起请求---')
yield scrapy.Request(url='https://so.gushiwen.org/RandCode.ashx',callback=self.parse)
def parse(self, response:HtmlResponse):
with open('yanzhengma.gif','wb') as f:
f.write(response.body)
print('验证码下载成功')
#获取图片内容
#该获取验证码的途径是通过云打码第三方平台提供的接口
yzmTxt = ydm_http.ydm('yanzhengma.gif')
print(yzmTxt)
login_url = 'https://so.gushiwen.org/user/login.aspx?'
data={
'email': '[email protected]',
'pwd': 'disen8888',
'code': yzmTxt # 验证码数据
}
#post提交数据
yield scrapy.FormRequest(url=login_url,formdata=data,callback=self.parse_zw)
def parse_zw(self,response:HtmlResponse):
print(response.xpath('//title/text()').extract_first())
上一篇: 用Python实现zip密码破解实例
下一篇: Django实现对数据库的增删改查