scrapy爬虫的第一个实例
产生步骤:
步骤一:建立一个scrapy爬虫工程
步骤二:在工程内产生一个Scrapy爬虫
步骤三:配置产生的spider爬虫
步骤四:运行爬虫,获取网页
# -*- coding: utf-8 -*-
import scrapy
class DemoSpider(scrapy.Spider):
name = "demo"
#allowed_domains = ["python123.io"]
start_urls = ['https://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.' % name)
yield关键字的使用
生成器:不断产生值得函数
包含yield语句的函数就是一个生成器
生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值。
#scrapy爬虫的数据类型
- Requests类:
表示一个requests对象,即一个HTTP请求
由spider生成,由downloader执行 - Response类
表示一个HTTP响应
由Downloader产生,由Spider处理。 - Item类
Item对象表示从一个HTML页面中提取的信息内容
由Spider生成,由ItemPiplines处理
Item类似字典类型,可以按照字典类型操作
Requests类
属性或方法 | 说明 |
---|---|
.url | Requests对应的请求URL地址 |
.method | 对应的请求方法,‘GET’‘POST’等 |
.headers | 字典类型风格的请求头 |
.body | 请求内容主体,字符串类型 |
.meta | 用户添加的扩展信息,在Scrapy内部模块间传递信息使用 |
.copy | 复制该请求 |
Response类
属性或方法 | 说明 |
---|---|
.url | Response对应的URL地址 |
.status | HTTP的状态码,默认200 |
.headers | Response对应的头部信息 |
.body | Response对应的内容信息,字符串类型 |
.flag | 一组标记 |
.request | 产生Response类型对应的Request对象 |
.copy() | 复制该响应 |
scrapy爬虫提取信息的方法
scrapy爬虫支持多种HTML信息提取方法:
- BeautifulSoup
- lxml
- re
- xpath selector
- CSS Selector
html.css(“a::attr(href)”).extract()