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文件成功')
网友评论