1 Scrapy简介
Scrapy是一个用于快速、高效地抓取和提取数据的Python开发框架。它基于异步网络库Twisted,并提供了强大的自定义功能,使得开发者能够灵活地编写网络爬虫和数据抓取程序。
以下是Scrapy框架的主要特点:
- 基于异步的架构:Scrapy使用了异步的方式处理网络请求和响应,能够高效地处理大量的并发任务。
- 强大的爬取能力:Scrapy支持多线程和分布式爬取,可以同时处理多个请求,加快数据采集速度。
- 灵活的数据提取:Scrapy提供了XPath和CSS选择器等多种方法来方便地提取网页中的数据,使得数据抽取变得简单高效。
- 自动的请求管理:Scrapy自动处理请求的发送和跟踪,包括请求的排队、重试、优先级设置等,减少了开发者的工作量。
- 丰富的中间件支持:Scrapy允许开发者通过中间件对请求和响应进行处理,添加自定义的功能或逻辑,例如代理、用户登录等。
- 内置的各种组件:Scrapy提供了许多内置的组件,如自动限速、去重过滤器、HTTP缓存等,方便开发者进行快速开发和部署。
总而言之,Scrapy是一个功能强大的网络爬虫框架,使得开发者能够高效地抓取、提取和处理互联网上的数据。它广泛应用于舆情分析、数据挖掘、价格监测、搜索引擎等领域。
2 Scrapy安装与配置
首先,确保您的Python环境已经安装和配置好。Scrapy要求使用Python 3.6或更高版本。
- 打开命令行终端(Windows用户可以使用命令提示符或PowerShell,Mac和Linux用户可以使用终端)
- 在终端中运行以下命令来安装Scrapy:
pip install scrapy
如果遇到权限问题,请尝试在命令前面加上sudo以获取管理员权限。
- 安装完成后,可以使用以下命令验证Scrapy是否成功安装:
scrapy version
如果成功安装,将显示Scrapy的版本信息。
2.1 安装失败情况分析
- 报错1: building ‘twisted.test.raiser’ extension
error: Microsoft Visual C++ 14.0 is required. Get it with “Microsoft Visual C++
Build Tools”: http://landinghub.visualstudio.com/visual-cpp-build-tools - 解决方法:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
到这个网站找到Twisted‑20.3.0‑cp37‑cp37m‑win_amd64.whl
cp是你的python版本,amd是你的操作系统的版本
下载完成之后 使用pip install twisted的路径 安装
切记安装完twisted 再次安装scrapy - 报错2:提示python -m pip install --upgrade pip
- 解决方法:运行python -m pip install --upgrade pip
- 报错3:win32的错误
- 解决方法:pip install pypiwin32
- 其他报错解决方法:使用anaconda
3 Scrapy基本使用
3.1 创建Scrapy项目
打开命令行终端,通过以下命令创建一个新的Scrapy项目:
scrapy startproject project_name
这将在当前目录下创建一个名为"project_name"的Scrapy项目。
注意:项目的名字不允许使用数字开头 也不能包含中文
3.2 创建Spider
要在spiders文件夹中去创建爬虫文件
进入项目目录,并通过以下命令创建一个爬虫(Spider)
cd project_name
scrapy genspider 爬虫文件的名字 要爬取网页
scrapy genspider spider_name example.com
一般情况下不需要添加http协议 因为start_urls的值是根据allowed_domains修改的。所以添加了http的话 那么start_urls就需要我们手动去修改了
这就是刚创建好的baidu.py
3.3 编写爬虫代码
我们需要实现parse()
方法来解析和提取页面数据。
3.4 运行爬虫
输入以下命令
scrapy crawl 爬虫的名字
4 爬虫遇到的RobotsTxt
RobotsTxt(机器人协议)是一种用来指导搜索引擎爬虫在访问网站时应该遵守的规则。它通常位于网站根目录下的名为"robots.txt"的文本文件中。RobotsTxt文件使用简单的语法规则来控制哪些页面可以被爬取,哪些页面不可以被爬取。
以下是RobotsTxt的基本用法和语法解释:
- User-agent (用户代理)
–指定要约束的搜索引擎爬虫的名称或标识。
–可以使用"*"表示适用于所有爬虫。 - Disallow (禁止访问)
–指定不允许爬虫访问的URL路径。
–使用相对路径或绝对路径指定禁止访问的页面。
–可以使用多个Disallow规则来指定多个禁止访问的路径。 - Allow (允许访问)
–指定允许爬虫访问的URL路径。
–通常与Disallow一起使用,当Disallow规则具有更高优先级时,Allow规则可以用来覆盖部分限制。 - Sitemap (网站地图)
–指定网站的XML Sitemap文件的路径。
–Sitemap文件包含了网站中所有可供爬取的URL地址,并帮助搜索引擎更好地了解网站结构。
例如:
User-agent: * Disallow: /private/ Disallow: /secret.html Allow: /public/ Sitemap: https://www.example.com/sitemap.xml
在scrapy中,我们只需要将settings.py中的这一行注释掉或者设为false即可
接下来我们再次运行就可以看到我们在parse中写的内容了,证明该代码执行成功