python 高级码农成才之路

scrapy.FormRequest-----模拟登录 人人网

2020-12-20  本文已影响0人  幼姿沫

request是请求网站进行爬取网页获取数据 request请求 

方法 GET POST

请求头headers

回调函数 callback  

网址 url

错误时执行的函数 errback

不同请求传递数据 meta


网页分析:

scrapy框架流程图分析如下***

爬虫spider把想要请求的网址url发给引擎engine

引擎把数据传送到调度器schedule中组成一个列表,

调度器将网址传送给下载器downloader

下载器将网址向网络请求request

Internet网络将请求护具进行分析响应之后传给爬虫spider

1.爬虫将数据传递给数据库pipelines进行数据分析传送到数据库 redis/mysql/mongodb

2.爬虫将响应过来的网址url重新发送给引擎engine和调度器schedule对网址进行分析响应传递给爬虫传送到数据处理之后进行存储

response 一般都是scrapy自动构建的 属性如下

xpath  提取具体数据和内容

text   字符串类型

body 字节码类型

encoding 编码解码格式

css  css选择器

encoding  字符串的编码和解码

meta  多个请求之间的数据连接

网页请求有post请求(参数)和get请求

首页数据请求为GET请求 不需要参数       scrapy.Request(url)

登录页面请求方法为POST 有参数需要安全性   scrapy.FormRequest(data,url)

如果初始爬虫爬取post请求网页的时候 重新构建start_requests(url)

人人网项目文件结构

renren_login.py

代码展示:

import scrapy

#如果想要安全的获取数据就要用post方法来获取form表单数据

# 所以用scrapy.FormRequest来获取表单数据进行验证并且可以方便指定表单数据

#如果在爬虫一开始就要使用post请求就要

# 重写start_requests方法进行post请求数据

#找到登陆页面均为post请求 登录页面的参数data

# formRequest form表单数据可以快捷获取

#post请求则是scrapy.FormRequest 参数为url和data

#callback 回调函数

class RenrenLoginSpider(scrapy.Spider):

name ='renren_login'

    allowed_domains = ['www.renren.com']

#开始页面为get请求 则是scrapy.Request

    start_urls = ['http://www.renren.com/']

#重写post请求 路由和数据data 用scrapy的FormRequest表单请求来获取post请求数据和内容

    def start_requests(self):

print('=====start_requests(self)=====')

login_url='http://www.renren.com/PLogin.do'

        #data是字典格式 键值对为用户名密码

        data={

'email':'18632475930',

            'password':'wangyi0.+-'

        }

#手动构造POST请求 参数1. 提交的目标地址  参数2. 提交的参数

        request=scrapy.FormRequest(login_url,formdata=data,callback=self.parse)

#将构造的post请求体数据发送出去

        yield request

def parse(self, response):

print('=====parse(self, response)=====')

with open('renren.html','w',encoding='utf-8')as f:

f.write(response.text)

print('响应内容写入到renren.html文件成功')

#登陆成功进行请求个人主页 手动构造GET请求访问个人主页

        request=scrapy.Request(url='http://www.renren.com/975549892/profile',callback=self.parse_profile)

yield request

def parse_profile(self,response):

print('=====parse_profile(self)=====')

with open('profile.html','w',encoding='utf-8')as f:

f.write(response.text)

print('响应内容写入到profile.html文件成功')

start.py 运行命令

保存数据结果如下

上一篇 下一篇

猜你喜欢

热点阅读