如何使用 Scrapy 爬取多级页面中的数据?
Scrapy 是一个用于抓取网站数据和提取结构化数据的 Python 应用程序框架。它可以遍历网站的链接,爬取多级页面中的数据,从而实现大规模数据采集。在本文中,我们将通过一个例子来演示如何使用 Scrapy 爬取多级页面中的数据。
1. 确定需要爬取的数据
假设我们需要从 “pidancode.com” 网站上爬取所有文章标题和摘要。我们希望从主页开始遍历网站所有页面,爬取每个页面中的标题和摘要。
2. 创建 Scrapy 项目
打开命令行终端,使用以下命令在任意位置创建一个新的 Scrapy 项目。
scrapy startproject pidancode
这将在当前目录下创建名为 pidancode
的新文件夹,其中包含一些模板文件和目录。
3. 定义 Item
在 Scrapy 中,Item 表示要爬取的数据结构。因此,在开始爬取网站之前,我们需要定义一个 Item,用于存储每个页面的标题和摘要信息。
打开 pidancode/items.py
文件,将以下代码添加到文件中:
import scrapy class PidancodeItem(scrapy.Item): title = scrapy.Field() summary = scrapy.Field()
这个 Item 有两个字段:title
和 summary
,分别表示文章标题和摘要。
4. 定义 Spider
在 Scrapy 中,Spider 是负责定义如何遍历网站以及如何解析网页的类。我们需要定义一个 Spider,以遍历 “pidancode.com” 网站上的页面,并从每个页面中提取标题和摘要。
打开 pidancode/spiders
目录,在该目录下创建名为 pidancode_spider.py
的新文件,并将以下代码添加到文件中:
import scrapy from pidancode.items import PidancodeItem class PidancodeSpider(scrapy.Spider): name = "pidancode" allowed_domains = ["pidancode.com"] start_urls = [ "http://pidancode.com/" ] def parse(self, response): # 解析页面,提取标题和摘要 for sel in response.xpath('//div[@class="entry"]'): item = PidancodeItem() item['title'] = sel.xpath('div[@class="entry-title"]/a/text()').extract_first() item['summary'] = sel.xpath('div[@class="entry-summary"]/p/text()').extract_first() yield item # 判断是否有下一页链接,如果有则继续爬取 next_page = response.xpath('//div[@class="nav-previous"]/a/@href') if next_page: url = response.urljoin(next_page.extract_first()) yield scrapy.Request(url, self.parse)
代码注释:
- 我们首先定义了 Spider 名称(name
)、要爬取的域名(allowed_domains
)和要爬取的起始 URL(start_urls
)。
- 在 parse
方法中,我们遍历每个页面中的 div
元素,然后使用 XPath 提取标题和摘要。
- 我们使用 yield
语句返回一个 PidancodeItem
对象,以存储提取到的数据。
- 在 parse
方法中,我们还检查是否存在下一页链接。如果有,则使用 scrapy.Request
发送请求,并使用 parse
方法处理响应。
5. 运行 Spider
在命令行终端中,进入 pidancode
目录,然后执行以下命令:
scrapy crawl pidancode
这将启动 Spider 并开始遍历网站,爬取页面。数据将以 JSON 格式显示在终端中,如下所示:
{"summary": "\n 这是一个 Scrapy 示例。\n ", "title": "\nScrapy 示例\n"} {"summary": "\n 这是一个数据结构和算法的示例。\n ", "title": "\n数据结构和算法\n"} {"summary": "\n 这是一个 Python 库和框架的示例。\n ", "title": "\nPython 库和框架\n"} ...
以上代码演示了如何使用 Scrapy 爬取多级页面中的数据。在实际项目中,您可以根据需要修改 Spider 的代码,例如修改 XPath 表达式提取更多数据、启用分布式爬取等。
相关文章