使用Scrapy网络爬虫框架小试牛刀,爬取某某百科。

2023-12-05 19:20

本文主要是介绍使用Scrapy网络爬虫框架小试牛刀,爬取某某百科。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

本文章来自腾讯云 作者:Python进阶者

想要学习Python?有问题得不到第一时间解决?来看看这里“1039649593”满足你的需求,资料都已经上传至文件中,可以自行下载!还有海量最新2020python学习资料。
点击查看

在这里插入图片描述

前言

这次咱们来玩一个在Python中很牛叉的爬虫框架——Scrapy。
在这里插入图片描述
在这里插入图片描述
scrapy创建爬虫项目
命令

scrapy startproject <项目名称>

示例:创建一个糗事百科的爬虫项目(记得cd到一个干净的目录哈)

scrapy startproject qiushibaike

在这里插入图片描述
注:此时,我们已经创建好了一个爬虫项目,但是爬虫项目是一个文件夹
在这里插入图片描述
进入爬虫项目

如果想要进入这个项目,就要cd进这个目录,如上上图所示,先cd <项目>,再创建蜘蛛
在这里插入图片描述
项目目录结构解析
此时,我们就已经进入了项目,结构如下,有一个和项目名同名的文件夹和一个scrapy.cfg文件

scrapy.cfg # scrapy配置,特殊情况使用此配置
qiushibaike # 项目名同名的文件夹items.py # 数据存储模板,定制要保存的字段middlewares.py # 爬虫中间件pipelines.py # 编写数据持久化代码settings.py # 配置文件,例如:控制爬取速度,多大并发量,等__init__.pyspiders # 爬虫目录,一个个爬虫文件,编写数据解析代码__init__.py

呃,可能此时你并不能懂这么些目录什么意思,不过不要慌,使用一下可能就懂了,别慌。

创建蜘蛛
通过上述的操作,假设你已经成功的安装好了scrapy,并且进入了创建的项目

那么,我们就创建一个蜘蛛,对糗事百科的段子进行爬取。
在这里插入图片描述
在这里插入图片描述
代码解释如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们需要这样写

xpath代码

//div[contains(@class,"article")]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
xpath代码

//div[contains(@class,"article") and contains(@class,"block")]//a[@class="contentHerf"]

在这里插入图片描述
这样,我们就定位了一个个a标签,只至少在控制台操作是没问题的,那么,我们使用Python代码操作一下吧
在这里插入图片描述
代码

def parse(self, response):a_href_list = response.xpath('//div[contains(@class,"article") and contains(@class,"block")]//a[@class="contentHerf"]/@href').extract()print(a_href_list)

启动蜘蛛命令

scrapy crawl <爬虫名> [--nolog]

在这里插入图片描述
获取详情页内容
在上述,我们成功的获取到了每个段子的链接,但是会发现有的段子是不全的,需要进入进入详情页才能看到所以段子内容,那我们就使用爬虫来操作一下吧。

我们定义一下标题和内容。
在这里插入图片描述
根据元素审查,标题的定位xpath是:

//h1[@class="article-title"]

在这里插入图片描述
内容的xpath是:

//div[@class="content"]

在这里插入图片描述
确定标题和内容的xpath定位之后,我们在python代码中实现一下。

注:但是先解决一个问题,详情页属于第二次调用了,所以我们也需要进行调用第二次,再编写代码
在这里插入图片描述
代码

# 详情页
def detail(self, response):title = response.xpath('//h1[@class="article-title"]/text()').extract()content = response.xpath('//div[@class="content"]//text()').extract()print("标题:" )print(title)print("内容")print(content)def parse(self, response):a_href_list = response.xpath('//div[contains(@class,"article") and contains(@class,"block")]//a[@class="contentHerf"]/@href').extract()print(a_href_list)base_url = "https://www.qiushibaike.com"for a_href in a_href_list:url = f"{base_url}{a_href}"yield scrapy.Request(url=url, callback=self.detail)

结果
在这里插入图片描述
但是会发现啊,似乎每个都是列表形式,这似乎不太行呐,我们稍微修改一下代码,这样我们拿到的就是正常的文本了,如下图所示:
在这里插入图片描述
在这里插入图片描述

这篇关于使用Scrapy网络爬虫框架小试牛刀,爬取某某百科。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/458811

相关文章

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

SQL Server使用SELECT INTO实现表备份的代码示例

《SQLServer使用SELECTINTO实现表备份的代码示例》在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误,在SQLServer中,可以使用SELECTINT... 在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误。在 SQL Server 中,可以使用 SE

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

golang1.23版本之前 Timer Reset方法无法正确使用

《golang1.23版本之前TimerReset方法无法正确使用》在Go1.23之前,使用`time.Reset`函数时需要先调用`Stop`并明确从timer的channel中抽取出东西,以避... 目录golang1.23 之前 Reset ​到底有什么问题golang1.23 之前到底应该如何正确的

详解Vue如何使用xlsx库导出Excel文件

《详解Vue如何使用xlsx库导出Excel文件》第三方库xlsx提供了强大的功能来处理Excel文件,它可以简化导出Excel文件这个过程,本文将为大家详细介绍一下它的具体使用,需要的小伙伴可以了解... 目录1. 安装依赖2. 创建vue组件3. 解释代码在Vue.js项目中导出Excel文件,使用第三

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux