文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

使用Scrapy网络爬虫框架小试牛刀

2024-12-03 14:05

关注

前言

这次咱们来玩一个在Python中很牛叉的爬虫框架——Scrapy。

scrapy 介绍

标准介绍

说人话就是

windows下安装scrapy

命令

  1. pip install scrapy 

默认情况下,直接pip install scrapy可能会失败,如果没有换源,加上临时源安装试试,这里使用的是清华源,常见安装问题可以参考这个文章:Windows下安装Scrapy方法及常见安装问题总结——Scrapy安装教程。

命令

  1. pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple 

scrapy创建爬虫项目

命令

  1. scrapy startproject <项目名称> 

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

  1. scrapy startproject qiushibaike 

 

注:此时,我们已经创建好了一个爬虫项目,但是爬虫项目是一个文件夹

 

进入爬虫项目

如果想要进入这个项目,就要cd进这个目录,如上上图所示,先cd <项目>,再创建蜘蛛


项目目录结构解析

此时,我们就已经进入了项目,结构如下,有一个和项目名同名的文件夹和一个scrapy.cfg文件

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

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

创建蜘蛛

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

那么,我们就创建一个蜘蛛,对糗事百科的段子进行爬取。


创建蜘蛛命令

  1. scrapy genspider <蜘蛛名称> <网页的起始url> 

示例:创建糗事百科的段子蜘蛛

  1. scrapy genspider duanzi ww.com 

 

注:网页的起始url可以随便写,可以随便改,但是必须有

此时在spider文件夹下,会多一个duanzi.py文件


代码解释如下

 

爬取数据前准备

创建好蜘蛛之后,需要在配置一些东西的,不能直接就爬的,默认是爬取不了的,需要简单配置一下

打开settings.py文件,找到ROBOTSTXT_OBEY和USER_AGENT变量

ROBOTSTXT_OBEY配置

等于False不遵守robot协议,默认只有搜索引擎网站才会允许爬取,例如百度,必应等,个人爬取需要忽略这个,否则爬取不了

 

USER_AGENT配置

User-Agent是一个最基本的请求必须带的参数,如果这个带的不是正常的,必定爬取不了。

User-Agent

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

 

小试牛刀之获取糗事百科段子段子链接

准备工作做好了,那就开始吧!!!

此处我们需要有xpath的语法基础,其实挺简单的,没有基础的记得百度一下,其实不百度也没关系,跟着学,大概能看懂

实现功能

通过xpath获取每个段子下的a标签连接

注:审查元素和按住crtl+f搜索内容和写xpath这里不再啰嗦

分析页面规则

 

通过审查工具,我们可以看到,class包含article的标签就是一个个的文章,可能你想到xpath可能可以这样写

xpath代码

  1. //div[@class='article'

但是你会发现一个都查不出来,因为是包含的关系,所以需要用contains关键字


我们需要这样写

xpath代码

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

 

但是会发现,这定位的太多了,并不是每个段子的div,所以我们要多包含几个,这样,就是每个段子的div了

  1. //div[contains(@class,"article"and contains(@class,"block")] 

 

上述已经成功定位了一个个的段子,下面在此基础上,定位到每个段子下的a标签

根据审查元素,发现每个段子下class="contentHerf"的a标签,就是每个段子的详情页


详情页,要定位的a标签的href确实是详情页的url


xpath代码

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

 

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


代码

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

启动蜘蛛命令

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

注:--nolog参数不加表示一系列日志,一般用于调试,加此参数表示只输入print内容

示例:启动段子命令

  1. scrapy crawl duanzi --nolog 

 

成功拿到每一个链接。

获取详情页内容

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

我们定义一下和内容。

 

根据元素审查,的定位xpath是:

  1. //h1[@class="article-title"

 

内容的xpath是:

  1. //div[@class="content"

 

确定和内容的xpath定位之后,我们在python代码中实现一下。

:但是先解决一个问题,详情页属于第二次调用了,所以我们也需要进行调用第二次,再编写代码


代码

  1. # 详情页 
  2. def detail(self, response): 
  3.     title = response.xpath('//h1[@class="article-title"]/text()').extract() 
  4.     content = response.xpath('//div[@class="content"]//text()').extract() 
  5.     print("" ) 
  6.     print(title) 
  7.     print("内容"
  8.     print(content) 
  9.  
  10. def parse(self, response): 
  11.     a_href_list = response.xpath( 
  12.         '//div[contains(@class,"article") and contains(@class,"block")]//a[@class="contentHerf"]/@href' 
  13.     ).extract() 
  14.     print(a_href_list) 
  15.     base_url = "https://www.qiushibaike.com" 
  16.     for a_href in a_href_list: 
  17.         url = f"{base_url}{a_href}" 
  18.         yield scrapy.Request(url=url, callback=self.detail) 

结果


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


上述命令总结

创建爬虫项目

  1. scrapy startproject <项目名称> 

创建蜘蛛

  1. scrapy genspider <蜘蛛名称> <网页的起始url> 

启动爬虫,--nolog参数不加表示一系列日志,一般用于调试,加此参数表示只输入print内容

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

结尾

经过入门级的操作,我相信你大概知道scrapy是怎么玩了。但是你依然可能懵逼,不懂本质,不过先走起来,才是根本,后续慢慢听我继续。

用微笑告诉别人,今天的我比昨天强,今后也一样。

 

来源:Python爬虫与数据挖掘内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯