Python中的Scrapy库

2025-12-13 0 642

Python中的Scrapy库是一个高效的爬虫框架,用于创建和实现异步的网络爬虫。它提供了一个API来简化爬取网站数据的过程,从而节省开发人员的时间和精力。本篇博客文章将详细介绍Scrapy库的使用和API,并提供相应的代码注释,帮助读者更好地理解它的工作原理和应用场景。

安装Scrapy库
首先我们需要安装Scrapy库,可通过以下命令进行安装:

pip install scrapy

Scrapy核心组件
Scrapy主要由以下几个核心组件组成:

Spider
Spider是Scrapy库的核心组件之一。它主要负责抓取和解析网页的过程。一个Spider通常包含了从哪里开始抓取、如何抓取、抓取到哪里、如何解析等一系列信息。Scrapy中提供了一个基础的Spider类,开发人员只需创建一个子类,并进行必要的配置即可。

以下是一个简单的Spider示例,它抓取的是全球新闻网站中的新闻标题和链接:

import scrapy

class NewsSpider(scrapy.Spider):
name = \’news\’
start_urls = [\’https://www.globalnews.ca/world/\’]

def p****(self, response):
for article in response.css(\’article[class^=\”post-\”]\’):
yield {
\’title\’: article.css(\’h3[class^=\”entry-title\”] a::text\’).get(),
\’link\’: article.css(\’h3[class^=\”entry-title\”] a::attr(href)\’).get()

}

name:Spider的名称。单个项目中可能包含多个Spider,通过名称来区分不同的Spider。
start_urls:Spider开始抓取的URL列表。
p****:主要的解析方法,负责从抓取到的HTML中提取有用的信息并进行返回。
在上面的示例中,我们通过response对象提取了网页中所有文章的标题和链接,使用了CSS选择器,并通过关键字yield将结果返回给Scrapy引擎。

Item
Item是Scrapy库用来表示抓取到的数据的容器。Item中包含了所有需要抓取的数据和每个字段的元数据信息。开发人员只需定义一个Item子类,并进行必要的字段定义即可。

import scrapy

class NewsItem(scrapy.Item):
title = scrapy.Field()

link = scrapy.Field()

在上面的示例中,我们定义了一个NewsItem类,它包含了两个字段title和link。每个字段使用了scrapy.Field()作为默认值,该字段可包含的类型(如int、float、datetime、string等)将由Scrapy动态确定。

Item Pipeline
Item Pipeline主要负责将抓取到的数据进行处理、清洗、持久化等操作。它通过一系列的处理器(或过滤器)对Item进行处理,并将处理后的结果发送到存储器中。Item pipeline是Scrapy的一个python类,开发人员可以通过继承和定制来实现自定义的数据处理流程。

以下是一个简单的Item Pipeline示例,它将每个Item存储到JSON文件中:

import json

class NewsPipeline:
def open_spider(self, spider):
self.file = open(\’news.json\’, \’w\’)

def close_spider(self, spider):
self.file.close()

def process_item(self, item, spider):
line = json.dumps(dict(item)) + \”\\n\”
self.file.write(line)

return item

在上面的示例中,我们新建了一个NewsPipeline类,并通过json模块将Item转换为字典。然后将其存储到文件中。open_spider和close_spider方法用于在Spider开启和关闭时创建和销毁文件。process_item方法则用于定义如何处理Item。

Middleware
中间件是Scrapy库的另一个核心组件,它主要负责在Spider爬取过程中,对请求和响应之间进行预处理的过程,包括重试、登录验证、代理设置、User-Agent设置等。中间件既可以由Scrapy官方提供,也可以由开发人员自定义。

以下是一个简单的Middleware示例,它用于添加固定的User-Agent:

class NewsMiddleware:
def process_request(self, request, spider):
request.headers[\’User-Agent\’] = \’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\’

在上面的示例中,我们新建了一个NewsMiddleware类,并重写了process_request方法,用于添加User-Agent。

Scrapy应用实例
在上面了解了Scrapy的核心组件后,我们可以开始实现一个简单的爬虫应用。以下是一个爬取百度百科词条信息的示例爬虫:

安装BeautifulSoup
在我们开始爬取之前,需要先安装和导入BeautifulSoup模块,该模块将帮助我们解析和提取HTML文档中的信息。

pip install beautifulsoup4

from bs4 import BeautifulSoup

class BaiduBaikeSpider(scrapy.Spider):
name = \”baidubaike\”
allowed_domains = [\”baike.baidu.com\”]
start_urls = [
\”https://baike.baidu.com/item/Python/407313\”,
]

def p****(self, response):
soup = BeautifulSoup(response.body, \’html.p****r\’)
main_content = soup.find(\’div\’, {\’class\’: \’main-content\’})
title = main_content.find(\’dd\’, {\’class\’ : \’lemmaWgt-lemmaTitle-title\’}).h1.text.strip()
summary = main_content.find(\’div\’, {\’class\’ : \’lemma-summary\’}).text.strip()
for paragraph in main_content.select(\’div[class=\”para\”]\’):
content = paragraph.text.strip()
yield {
\’title\’: title,
\’summary\’: summary,
\’content\’: content,
}

在上面的示例中,我们使用了beautifulsoup4库来解析网页HTML文档,并使用了CSS选择器来提取标题、摘要和正文内容。然后将结果返回给Scrapy引擎。

运行和存储
在完成代码开发后,我们可以使用以下命令启动爬虫并将结果存储到JSON文件中。

scrapy crawl baidubaike -o baidubaike.json

在上面的命令中,baidubaike是Spider的名称,baidubaike.json则是存储结果的文件名。

结论
Scrapy是一个高效、可扩展的Python爬虫框架,提供了一些核心组件以便开发人员能够更方便地创建和实现异步网络爬虫。在本文中,我们介绍了Scrapy的核心组件以及如何使用它们来实现一个简单的爬虫应用程序。虽然Scrapy的学习曲线可能较高,但是一旦掌握了它的使用方法,将会大大加快爬虫开发的速度。
————————————————
版权声明:本文为CSDN博主「小墨蛇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weiyi47/article/details/134150230

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 Python中的Scrapy库 https://www.zuozi.net/36502.html

css样式大全
上一篇: css样式大全
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务