scrapy的入门使用
时间:2023-2-28 23:51 作者:wen 分类: Python
一、安装scrapy
pip install scrapy
二、scrapy项目开发流程
- 创建项目:
scrapy startproject mySpider
- 生成一个爬虫:
scrapy genspider wenxk wenxk.top
- 提取数据:
根据网站结果在spider中实现数据采集相关内容 - 保存数据:
使用pipeline进行数据后续处理和保存
三、创建项目
通过命令将scrapy项目的文件生成出来,后续步骤都是在项目文件中进行相关操作
创建scrapy项目的命令
scrapy startproject <项目名称>
示例:
scrapy startproject myspider
四、创建爬虫
命令:在项目路径下执行:
scrapy genspider <爬虫名字><允许爬取的域名>
爬虫名字:作为爬虫运行时的参数
运行爬取的域名:为对于爬虫设置的爬取范围,设置之后用于过滤爬取的URL,如果爬取的url于允许的域不通则被过滤掉。
示例:
cd myspider
scrapy genspider wenxk wenxk.top
五、完善爬虫
- 修改内容
import scrapy
class WenxkSpider(scrapy.Spider):
name = 'wenxk'
allowed_domains = ['wenxk.top']
start_urls = ['http://wenxk.top/']
def parse(self, response):
node_list = response.xpath("//div[@class='views-row']")
for node in node_list:
temp = {
'title': node.xpath('./article/header/h2/a/span/text()').extract_first(),
'href': node.xpath('./article/header/h2/a/@href')[0].extract()
}
# xpath方法返回的是选择器对象列表,extract()用于从选择器对象中提取数据
# xpath结果为只含有一个结果的列表,可以使用extract_first(),没有结果返回None,如果为多个使用extract()
print(temp)
yield temp
pass
注意:
- scrapy.Spider爬虫类中必须有名为parse的解析
- 如果网站结果层次比较复杂,也可以自定义其他解析函数
- 在解析函数中提取的URL地址如果要发送请求,则必须属于allowed_domains范围内,三是start_urls中的url地址不受这个限制
- 启动爬虫的时候注意启动的位置,是在项目路径下启动
- parse()函数中使用yield返回数据,注意:解析函数中的yield能够传递的对象只能是:BaseItem,Request,Dict,None
-
定位元素以及提取数据、属性的方法
解析并获取scrapy爬虫中的数据:利用xpath规则字符串进行定位和提取- response.xpath方法的返回结果是一个类似list的类型,其中包含的是selector对象,操作和列表一样,但是有一些额外的方法。
- 额外方法extract():返回一个包含有字符串的列表
- 额外方法extract_first():返回列表中的第一个字符串,列表为空没有返回None
-
response响应对象的常用属性
- response.url:当前响应的URL地址
- response.request.url:当前响应对象的请求的URL地址
- response.headers:响应头
- response.requests.headers:当前响应的请求头
- response.body:响应体,也就是html代码,byte类型
- response.status:响应状态码
六、保存数据
利用管道pipeline管道来处理(保存)数据
- 在pipelines.py文件中定义对数据的操作
- 定义一个管道里
- 重写管道类的process_item方法
- process_item方法处理完item之后必须返回给引擎
from itemadapter import ItemAdapter
class MyspiderPipeline:
# 爬虫文件中提取数据的方法 yield一次item,就会运行一次
# 该方法为固定名称的函数
def process_item(self, item, spider):
print(item)
# 默认使用完管道之后需要将数据返回给引擎
return item
- 在setting.py配置启用管道,在65行位置
ITEM_PIPELINES = { 'myspider.pipelines.MyspiderPipeline': 300, }
配置项中键为使用的管道类,管道类使用.(点)进行分割,第一个为项目目录,第二个为文件,第三个为定义的管道类。
配置项中值为管道的使用顺序,设置的数值越小越优先执行,该值一般设置为1000以内。
七、运行scrapy
命令:在项目目录下执行
scrapy crawl <爬虫名字>
示例:
scrapy crawl wenxk
标签: 爬虫