Scrapy框架快速入门指南
在数据驱动的世界中,快速而高效地抓取数据变得尤为重要。Scrapy是一个快速、简单但功能强大的爬虫框架,能够满足数据抓取的各种需求。今天,我们将快速入门Scrapy,了解如何使用它抓取和提取数据。
目录
前置条件
- 操作系统:CentOS 7
- Python版本:Python 3.8
- Scrapy版本:2.8.0
安装Scrapy
-
确保Python和pip已安装:
bashsudo yum install -y python38 python38-pip
-
升级pip并安装Scrapy:
bashpython3.8 -m pip install --upgrade pip pip3 install scrapy
-
验证安装:
bashscrapy version
如果看到类似
Scrapy 2.8.0
的输出,说明安装成功。
创建并设置Scrapy项目
-
创建Scrapy项目:
bashscrapy startproject myproject
-
目录结构:
bashmyproject/ scrapy.cfg myproject/ __init__.py items.py middlewares.py pipelines.py settings.py spiders/ __init__.py
-
设置项目配置:
编辑
myproject/settings.py
进行一些基本设置:pythonBOT_NAME = 'myproject' SPIDER_MODULES = ['myproject.spiders'] NEWSPIDER_MODULE = 'myproject.spiders' ROBOTSTXT_OBEY = True ITEM_PIPELINES = { 'myproject.pipelines.MyProjectPipeline': 300, }
编写Spider爬虫
-
创建Spider爬虫:
bashscrapy genspider example example.com
-
编辑
myproject/spiders/example.py
:pythonimport scrapy class ExampleSpider(scrapy.Spider): name = "example" allowed_domains = ["example.com"] start_urls = ["http://example.com/"] def parse(self, response): yield { 'title': response.xpath('//title/text()').get(), 'url': response.url, }
-
运行爬虫并查看输出:
bashscrapy crawl example -o output.json
这样,抓取结果将保存为
output.json
文件。
存储抓取结果
除了JSON文件,Scrapy还支持以多种格式存储数据:
-
CSV格式:
bashscrapy crawl example -o output.csv
-
XML格式:
bashscrapy crawl example -o output.xml
-
MySQL数据库:
在
pipelines.py
文件中实现数据存储到MySQL的功能:pythonimport mysql.connector class MyProjectPipeline: def open_spider(self, spider): self.conn = mysql.connector.connect( host='localhost', user='your_user', password='your_password', database='your_database' ) self.cursor = self.conn.cursor() def close_spider(self, spider): self.conn.commit() self.conn.close() def process_item(self, item, spider): self.cursor.execute( "INSERT INTO your_table (title, url) VALUES (%s, %s)", (item['title'], item['url']) ) return item
设置与中间件
设置
调整Scrapy的设置文件以提高性能或自定义爬虫行为:
-
并发请求数:
pythonCONCURRENT_REQUESTS = 16
-
下载延迟(秒):
pythonDOWNLOAD_DELAY = 2
-
禁用cookies:
pythonCOOKIES_ENABLED = False
中间件
中间件可用于修改请求和响应:
-
在
middlewares.py
中创建自定义中间件:pythonclass CustomDownloaderMiddleware: def process_request(self, request, spider): spider.logger.info(f'Processing request: {request.url}') return None
-
在
settings.py
中启用中间件:pythonDOWNLOADER_MIDDLEWARES = { 'myproject.middlewares.CustomDownloaderMiddleware': 543, }
实用小贴士
-
查看网络请求 :使用
scrapy shell
以交互方式查看和测试网络请求:bashscrapy shell "http://example.com/"
在shell中,你可以使用Xpath和CSS选择器来查看页面内容。
-
调试爬虫 :利用
logging
库记录爬虫的详细运行状态:pythonimport logging logging.basicConfig(level=logging.DEBUG)
-
遵守机器人协议 :遵循网站的
robots.txt
文件,以避免违反网站的爬取政策。
掌握了Scrapy的基础操作,接下来可以根据需求扩展功能,为复杂的数据抓取任务做准备啦。