scrapy异步的爬虫框架
异步的爬虫框架
-
高性能的数据解析,持久化存储,全栈数据的爬取,中间件,分布式
-
框架:就是一个集成好了各种功能且具有很强通用性的一个项目模板。
-
环境安装:
Linux:
pip3 install scrapy
Windows:
1. pip3 install wheel
2. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
3. 进入下载目录,执行 pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl
4. pip3 install pywin32
5. pip3 install scrapy
-
基本使用
-
新建一个工程:
前提需要将
Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl
这个文件放在项目目录下# 在终端中执行下面这个命令 scrapy startporject + “项目名”
- settings.py:当前工程的配置文件
- spiders:爬虫包,必须要存放一个或者多个爬虫文件(.py)
-
进入项目
# 在终端中执行 cd + 项目名
-
创建一个爬虫文件:
# 在终端中执行: scrapy genspider spiderName www.xxx.com # 命令解析: scrapy genspider 爬虫文件名 url # 这个url是必写的,不写无法创建文件,可以随意些,最后在文件中修改
-
执行工程:
# 在终端中执行下面的命令: scrapy crawl spiderName # 执行命令scrapy crawl 加爬虫文件名
-
在
sttings
文件中需要配置的:settings.py: - 不遵从robots协议 如果选择不遵循robots协议的就修改文件中的 ROBOTSTXT_OBEY = False # 将True改为False - UA伪装 将UA伪装的数据加载文件中 - 指定日志输出的类型: 将 LOG_LEVEL = 'ERROR' 添加到配置文件中
-
爬虫文件中:
# -*- coding: utf-8 -*- import scrapy class SecondSpidersSpider(scrapy.Spider): name = 'second_spiders' #允许的域名 allowed_domains = ['www.123.com'] #起始的url列表:列表元素只可以是url #作用:列表元素表示的url就会被进行请求发送 start_urls = ['http://duanziwang.com/category/%E7%BB%8F%E5%85%B8%E6%AE%B5%E5%AD%90/'] def parse(self, response): all_data = [] article_list = response.xpath('/html/body/section/div/div/main/article') for article in article_list: # xpath在进行数据提取时,返回的不再是字符串而是一个Selector对象,想要的数据被包含在了该对象的data参数中 title = article.xpath('./div[1]/h1/a/text()').extract_first() content = article.xpath('./div[2]//text()').extract() content = ''.join(content) dic = { 'title': title, 'content': content } all_data.append(dic) return all_data # 将解析到的数据进行了返回
-
数据解析:
- 1.response.xpath('xpath表达式')
- 2.scrapy中的xpath解析,在进行数据提取的时候,xpath方法返回的列表中存储的不再是字符串,
而是存储的Selector对象,相关的字符串数据是存储在Selector对象的data参数中,我们必须使用
extract()/extract_first()进行字符串数据的提取 - extract():可以作用到列表中的每一个列表元素中,返回的依然是一个列表
- extract_first():只可以作用到列表中的第一个列表元素中,返回的是字符串
-
持久化存储
- 基于终端指令的持久化存储
- 只可以将parse方法的返回值存储到指定后缀的文本文件中。
- scrapy crawl spiderName -o ./duanzi.csv
- 基于管道的持久化存储
- 基于终端指令的持久化存储