@[toc]
产生步骤1
应用scrapy爬虫框架主要是编写配置型代码
scrapy startproject python123demo
产生步骤2
在工程中产生一个scrapy爬虫
进入工程目录,然后执行如下命令
scrapy genspider demo python123.io
该命令作用:
- 生成一个名称为demo的spider
- 在spider目录下增加代码文件demo.py
#demo.py
import scrapy
class DemoSpider(scrapy.Spider):
name = 'demo'
allowed_domains = ['python123.io']
start_urls = ['http://python123.io/']
def parse(self, response):
pass
parse()用于处理响应,解析内容形成字典,发现新的URL爬取请求
产生步骤3
配置产生的spider爬虫
- 初始化URL地址
- 获取页面后的解析方式
import scrapy
class DemoSpider(scrapy.Spider):
name = 'demo'
allowed_domains = ['python123.io']
start_urls = ['http://python123.io/ws/demo.html']
def parse(self, response):
fname = response.url.split('/')[-1]
with open(fname,'wb') as f:
f.write(response.body)
self.log('Saved file %s.'% fname)
产生步骤4
运行爬虫,获取网页
scrapy crawl demo
demo爬虫被执行,捕获页面存储在demo.html
#demo.py完整版本
import scrapy
from scrapy.http.request import Request
class DemoSpider(scrapy.Spider):
name = 'demo'
def start_requests(self):
urls = ['http://python123.io/ws/demo.html']
for url in urls:
yield scrapy.Request(url=url,callback=self.parse)
def parse(self, response):
fname = response.url.split('/')[-1]
with open(fname,'wb') as f:
f.write(response.body)
self.log('Saved file %s.'% fname)
yield关键字
包含yield语句的函数是一个生成器
生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值。
生成器是一个不断产生值的函数
def gen(n):
for i in range(n):
yield i**2
for i in gen(5):
print(i," ",end="")
0 1 4 9 16
生成器相比一次列出所有内容的优势:
- 更节省存储空间
- 响应更迅速
- 使用更灵活
scrapy爬虫的使用步骤
- 步骤1:创建一个工程和spider模板
- 步骤2:编写spider
- 步骤3:编写Item Pipeline
- 步骤4:优化配置策略
scrapy爬虫的数据类型
Request类
class scrapy.http.Request()
Request对象表示一个HTTP请求
由Spider生成,由Downloader执行
Request类
属性或方法 | 说明 |
---|---|
.url | Request对应的请求URL地址 |
.method | 对应的请求方法,'GET','POST'等 |
.headers | 字典类型风格的请求头 |
.body | 请求内容主体,字符串类型 |
.meta | 用户添加的扩展信息,在scrapy内部模块间传递信息使用 |
.copy() | 复制该请求 |
Response类
class scrapy.http.Response()
Response对象表示一个HTTP响应
由Downloader生成,由Spider处理
Response类型
属性或方法 | 说明 |
---|---|
.url | Response对应的URL地址 |
.status | HTTP状态码,默认是200 |
.headers | Response对应的头部信息 |
.body | Response对应的内容信息,字符串类型 |
.flags | 一组标记 |
.request | 产生Response类型对应的Response对象 |
.copy() | 复制该响应 |
Item类
class scrapy.item.Item()
Item对象表示一个从HTML页面中提取的信息内容
由Spider生成,由Item Pipeline处理
Item类似字典类型,可以按照字典类型操作
scrapy爬虫提取信息的方法
- Beautiful Soup
- lxml
- re
- XPath Selector
- CSS Selector
CSS Selector的基本使用
<HTML>.css('a::attr(href)').extract()
网友评论