内容简述:
一:Crawl Spider
二:日志
三:Request和Response总结
四:代理
五:Scrapy实现模拟登录
一:Crawl Spider
CrawlSpider是一个类,父类是scrapy.Spider。
CrawlSpider不仅有Spider的功能,还有自己独特功能
特有功能:CrawlSpider可以定义规则,解析html时可根据链接规则提取出指定链接,然后再向这些链接发送请求。
通常用于:如果有需要跟进链接的需求,爬取网页之后,需要提取链接再次爬取。
如何提取链接?
链接提取器,在这里就可以写规则提取指定链接
scrapy.linkextractors.LinkExtractor(
allow = (), 正则表达式 提取符合正则的链接
deny = (), 正则表达式 不提取符合正则的链接[不用]
allow_domains = (), 允许的域名[不用]
deny_domains = (), 不允许的域名[不用]
restrict_xpaths = (), xpath,提取符合xpath规则的链接
retrict_css = () 提取符合选择器规则的链接)
【案例】:电影天堂-提取所有页码链接
scrapy shell http://www.dytt8.net/html/gndy/dyzz/index.html
from scrapy.linkextractors import LinkExtractor
正则用法
links1 = LinkExtractor(allow='list_23_\d+\.html')
links1.extract_links(response) 查看提取到的所有链接
xpath用法
links2 =LinkExtractor(restrict_xpaths='//div[@class="x"]')
【注意】这里的xpath不带a
css用法
links3 = LinkExtractor(restrict_css='.x')【注意】这里的选择器不带a
【案例】:读书网-散文随笔
https://www.dushu.com/book/1163.html
scrapy startproject readbook1
scrapy genspider -t crawl readbook "www.dushu.com"
CrawlSpider运行原理:
【实操-spiders注意说明】
rules =(Rule(LinkExtractor(allow=r'/book/1163_\d+\.html'), callback='parse_item',follow=False),)
【注1】callback只能写函数名字符串, callback='parse_item'
【注2】在基本的spider中,如果重新发送请求,那里的callback写的是 callback=self.parse_item
二:日志信息和日志等级
级别:
CRITICAL:严重错误
ERROR:一般错误
WARNING:警告
INFO:一般信息
DEBUG:调试信息
默认的级别为DEBUG,会显示上面所有的信息
在配置文件中 settings.py设置
LOG_LEVEL:设置日志显示等级,此举动决定了显示哪些,不显示哪些
LOG_FILE :将屏幕显示的信息记录到文件中,屏幕不再显示
三:Request和response总结
Request(类)
get请求
scrapy.Request(url=url,callback=self.parse_item,meta={'item':item},headers=headers)
url:要请求的地址
callback:响应成功之后的回调函数
meta:参数传递
headers:定制头信息,一般不用
response(对象)
response.text: 字符串格式文本
response.body: 二进制格式文本
response.url: 当前响应的url地址
response.status:状态码
response.xpath(): 通过xpath筛选数据
response.css(): 通过CSS筛选数据
post请求
【温馨提示】如果直接发送post请求,start_urls和parse方法就用不到
因为重写了start_requests(self)这个方法,
【案例】:百度翻译
scrapy.FormRequest(url=url,headers=headers, callback=self.parse_item,formdata=data)
url:要发送的post地址
headers:定制头信息
callback:回调函数
formdata: post所携带的数据【字典】
四:代理
通过下载中间件来进行添加
(1)settings.py中,打开一个选项
DOWNLOADER_MIDDLEWARES 配置选项
(2)middlewares.py中找到以下方法写代码
def process_request(self, request, spider):
request.meta['proxy'] ='https://113.68.202.99:8888'
return None
五:Scrapy实现模拟登录
【案例】人人网 www.renren.com