scary
scary框架
scary框架是什么呢?
其实就是集成了很多功能且通用性很强的的项目模板
常见的功能有:高性能的持久化存储,异步的数据下载,高性能的数据解析,分布式等等
1.环境准备
mac
&& linux
pip install scary
windows
# 首先下载wheel模块,用于后续安装twisted模块
pip install wheel
# 下载Twisted【支持异步的数据下载】
pip install Twisted
# 下载pywin32【并不指定位数,安装的包会根据你当前 Python 的版本和架构(32位或64位)自动选择】
pip install pywin32
# 下载scrapy
pip install scrapy
# 下载成功后,可以终端输入如下命令测试
scrapy version
2.基本使用
1.创建一个scrapy
项目
scrapy startproject firstBlood
2.cd
到项目目录下,创建爬虫文件
cd firstBlood
scrapy genspider 爬虫文件名 域名 # 域名可以随便写,比如www.xxx.com,后面可以手动修改
eg:scrapy genspider first www.xxx.com
现在,firstBlood
项目的目录结构是这样的:
E:\all_homework\crawl\firstBlood # 爬虫工程目录
├─scrapy.cfg # scrapy配置信息,但真正爬虫相关的配置都在settings.py文件中
│
└─firstBlood # 项目目录,目前只关注一个settings文件即可
├─ items.py # 设置数据存储模板,用于结构化数据
├─ middlewares.py # 中间件,可以配置关于请求头的修改、ip代理池等
├─ pipelines.py # 数据的持久化处理
├─ settings.py # 爬虫配置文件,如递归层数、并发数、延迟下载等
├─ __init__.py
│
└─spiders # 爬虫文件目录,主要编写爬虫主要逻辑
├─ first.py # 之前通过命令创建的爬虫文件,我们的爬虫代码都编写到这个文件中
└─ __init__.py
3.编写爬虫文件和配置文件
import scrapy
class FirstDemoSpider(scrapy.Spider):
# name:first文件在当前项目中的唯一标识
name = 'first'
# allowed_domains:允许start_urls中哪些url可以被访问,一般,我们都注释掉这个属性
# allowed_domains = ['www.baidu.com']
# 当执行项目时,这个列表中的url将被一一执行,我们手动的添加链接
start_urls = ['https://www.baidu.com/', 'https://gitee.com/']
def parse(self, response):
""" 请求结果的数据解析在这个方法中解析 """
print(f"请求的 URL: {response.url}, 状态码: {response.status}")
4.跑爬虫项目
# 注意,一定要cd进去
cd到爬虫工程目录下
scrapy crawl 爬虫文件
会发现,输出一大堆的日志,如何让其运行时,只输出我们的print信息,而不要其他日志信息
解决方案:
scrapy crawl first --nolog # 不建议用, 因为如果有报错,也不输出
E:\all_homework\crawl\firstBlood>scrapy crawl first --nolog
请求的 URL: https://gitee.com/, 状态码: 200
发现有bug,我们的first
中的start_urls
列表中有两个url,但上述结果就一个
解决方案:调整一下settings.py
文件
# ROBOTSTXT_OBEY = True # 默认的遵循爬虫规则,我们这里改为False
ROBOTSTXT_OBEY = False
# 新添加一个参数
# 解决--nolog参数的弊端,这里我们自定义日志输出级别,当程序出错时,输出报错信息
LOG_LEVEL = "ERROR"
重新跑项目就解决了
E:\all_homework\crawl\firstBlood>scrapy crawl first --nolog
请求的 URL: https://www.baidu.com/, 状态码: 200
请求的 URL: https://gitee.com/, 状态码: 200
3.PyCharm
配置scrapy
运行环境
在项目目录的同级目录,也就是跟scrapy.cfg
文件同级,创建一个文件,我用main.py
import os
import sys
from scrapy import cmdline
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
cmdline.execute(['scrapy', "crawl", "first"]) # first 是爬虫文件
然后进行操作:
然后,就可以点击运行按钮运行了: