1. Scrapy框架简介
Scrapy是一个强大、灵活、可扩展的爬虫框架,由于其高效的数据抓取和处理能力,被广泛应用于互联网数据抓取、处理和存储等领域。Scrapy采用事件驱动和异步IO的机制,具有自动请求处理和多线程爬取的特点,支持自定义扩展和中间件,可以方便地进行反反爬虫处理。
2. 安装Scrapy框架
Scrapy官方网站提供详细的安装指南,您可以参考以下步骤进行安装:
- 安装Python 2或Python 3
- 安装pip或conda包管理工具
- 在命令行中使用pip或conda安装Scrapy
具体命令如下:
# 使用pip安装Scrapy
pip install scrapy
# 使用conda安装Scrapy
conda install scrapy
3. 创建Scrapy爬虫项目
在命令行中使用以下命令创建Scrapy项目:
scrapy startproject toutiao
其中,toutiao
是项目名称,执行命令后,将会生成以下目录结构:
.
├── scrapy.cfg
└── toutiao
├── __init__.py
├── items.py
├── middlewares.py
├── pipelines.py
├── settings.py
└── spiders
├── __init__.py
└── ...
其中,scrapy.cfg
为Scrapy配置文件,toutiao
是项目名称,items.py
定义了项目中需要爬取的数据结构,middlewares.py
定义了中间件配置,pipelines.py
定义了数据处理管道,settings.py
为Scrapy的配置文件,spiders
目录用于存放爬虫脚本。
4. 创建Scrapy爬虫脚本
在spiders
目录中创建toutiao_spider.py
文件,并按照以下写法编写爬虫脚本:
import scrapy
from toutiao.items import ToutiaoItem
class ToutiaoSpider(scrapy.Spider):
name = 'toutiao'
allowed_domains = ['toutiao.com']
start_urls = ['https://www.toutiao.com/ch/news_hot/']
def parse(self, response):
item = ToutiaoItem()
# 获取前10条新闻
for news in response.css('.title-box'):
title = news.css('.title::text').extract_first()
url = news.css('.link::attr(href)').extract_first()
item['title'] = title
item['url'] = url
yield item
该脚本通过继承scrapy.Spider
类来定义一个新的爬虫,其中name
属性定义了爬虫名称,allowed_domains
定义了允许爬取的域名,start_urls
定义了起始爬取链接。parse
方法是Scrapy的默认回调函数,用于解析爬取的网页数据,此处我们将获取前十条新闻的标题和链接,并使用yield
关键字将数据传递给后续的处理管道。
为了保存爬取的数据,需要在toutiao
目录下创建items.py
文件,并按照以下写法定义数据结构:
import scrapy
class ToutiaoItem(scrapy.Item):
title = scrapy.Field()
url = scrapy.Field()
该文件定义了一个新的数据结构,可以通过定义多个scrapy.Field()
来保存不同的数据。
5. 运行Scrapy爬虫
在命令行中使用以下命令运行Scrapy爬虫:
scrapy crawl toutiao -o news.json
其中,-o news.json
表示将爬取结果保存