首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python 爬虫第三篇(循环爬取多个网页)

Python 爬虫第三篇(循环爬取多个网页)

作者头像
keinYe
发布于 2019-08-01 03:18:21
发布于 2019-08-01 03:18:21
8K10
代码可运行
举报
文章被收录于专栏:keinYekeinYe
运行总次数:0
代码可运行

本篇是 python 爬虫的第三篇,在前面两篇 Python 爬虫第一篇(urllib+regex)Python 爬虫第二篇(urllib+BeautifulSoup) 中介绍了如何获取给定网址的网页信息,并解析其中的内容。本篇将更进一步,根据给定网址获取并解析给定网址及其相关联网址中的内容。要实现这些功能,我们需要解决以下问题:

1. 如何持续不断的获取 url,并读取相关内容。

2. 如何判断网址是否已经读取过。

文中用到的代码均已上传到 github,在这里就不再贴出完整的代码了。

如何持续不断的获取网址,并读取相关内容?

要想读取网页内容,首先要获取网页的 url,但是我们又不能将所有的 url 都输入到程序中,此时就需要我们从已知的 url 中解析出其他的 url,从而不间断的获取新的 url读取新的内容,获取新的 url 可以通过解析含有 href 属性的 a 标签来实现,具体代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for link in html.find_all(name='a', href=re.compile(r'https?://list|item.szlcsc.+')):
    if len(self.__url_set) > self.__max_url_count:
        return
    url = link.get('href')

以上代码解析出所有的 a 标签中的 href 属性内容以 https://list.szlcschttps://item.szlcsc为开头的 url 连接。在这里还是设置了一个最大的 url 解析量「由于在测试中需要一个停止条件」,默认值为1000。

从一个 url 中获取到更多的 url 后,我们该怎么去读取?以什么顺序去读取?不可能获取一个 url 就读取一个 url,此时就需要一个保存 url 的地方「最好是可以顺序保存顺序取出的」,那么最好的方法就是使用队列了,以下是将 url 放入队列的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for link in html.find_all(name='a', href=re.compile(r'https?://list|item.szlcsc.+')):
    if len(self.__url_set) > self.__max_url_count:
        return
    url = link.get('href')
    if url not in self.__url_set:
        self.__url_set.add(url)
        self.__url_queue.put(url)

以下是从队列中取出 url 的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while not self.__url_queue.empty():
    count = count + 1
    url = self.__url_queue.get()
    result = self.get_html(url)

以上两段代码完成了一个 url 从存入队列到从队列中出的全过程。

如何判断网址是否已经读取过?

这个问题实际上就是 url 去重的问题,常用的 url 去重的方法主要有以下几种:

1. url 保存在数据库中(效率较低)

2. 将 url 保存到集合中,利用集合的无重复元素的特性来去重,缺点是占用空间大。

3. 将 url 通过 md5 等哈希算法后保存在集合中,与第 2 项相比可以大幅度提高空间利用率。

4. 使用布隆过滤器「Bloom Filter」,在时间和空间方面有巨大的优势,但是存在一定的误算率,不适用于高准确度的场合。

本篇我们使用集合来对 url 进行去重,其他方法大家可以自行搜索一下,网上有很多这方面的资料。

集合中的元素无次序,且不可重复。元素不可重复的特性用来对 url 去重在合适不过了,通过判断 url 是否已经在集合中可以快速判断该 url 是否已经读取过。具体看以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if url not in self.__url_set:
    self.__url_set.add(url)
    self.__url_queue.put(url)

以上代码首先判断 url 是否存在于 _urlset 中,如果不存在则将该 url 添加到 _urlset 中,同时将次 url 放入读取队列中进行读取。这样既对得到的每个 url 进行读取,又避免了多次读取同一个 url 造成资源的浪费。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 keinYe 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
您好,可以贴一下您的github吗? 谢谢:)
您好,可以贴一下您的github吗? 谢谢:)
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
外行学 Python 爬虫 第四篇 URL 去重
当你可以从网站上获取网页,也可以将网页中有效的信息提取出来以后,接下来你会做什么?我想它一定是一个肯定的答案『获取整个网站的内容』,毕竟只获取网站上一个网页的内容听起来和看起来都不是那么的高大上,只有将整个网站的内容提取出来它才能称得上爬虫这个有科技感和高大上的名字。
keinYe
2019/08/01
9100
Chapter06 | 面向百度百科得深度与宽度优先爬虫
一个爬虫程序得开发顺序: 需求分析 概念设计 详细设计 编码 测试 使用 一、需求分析 1.1、爬什么 网站=>百度百科:网络爬虫词条开始得三层节点=>了解网站结构 数据=>词条名称、URL、描述、关键字信息=>了解数据存放位置 1.2、存哪里 位置=>本地磁盘文件=>确定存放位置、文件类型 1.3、怎么爬 网站=>百度百科 策略=>无更新(百度知识比较稳定)、深度/广度优先 1.4、怎么抽 数据=>description、keyword、summary 方法=>字符串截取 1.5、怎么
不温卜火
2020/10/28
7250
Chapter06 | 面向百度百科得深度与宽度优先爬虫
Python爬虫实践——简单爬取我的博客
学任何一门技术,如果没有实践,技术就难以真正的吸收。利用上次博客讲解的三个知识点:URL 管理器、网页下载器和网页解析器来爬取一下我的博客。 我的博客地址 http://weaponzhi.online/ 这个博客里面没有技术的文章,主要是我的一些生活上面的记录,可以说是我的日记本,平时会写一些思想感悟,记录些琐事。我们简单以这个博客主页为入口,爬取一下以 weaponzhi.online 为 host 下所有的 URL 。 首先当然是需要一个 URL 管理器了,但和上篇文章说的有所不同,这次我们的待爬取数
小之丶
2018/03/07
1.1K0
Python爬虫实践——简单爬取我的博客
从0写一个爬虫,爬取500w好友关系数据
0x00 前言 上一篇文章已经写了一部分数据获取和爬虫的内容,这篇文章我们一起来实现一个网络爬虫,用这个小爬虫来爬取500w的简书的粉丝关系对。 1. 两个小问题 为什么要爬关系对数据呢,爬些文字数据岂不更好? 为什么要爬关系对数据?因为居士最近正在搞和社交关系相关的项目,需要对大量的关系数据做处理,而且要用到 LPA 、 PageRank 这些算法,写博客本来就需要为自己学习和工作来服务,为了加深自己的理解,因此前几篇博客都和关系数据相关。后续当需要文本数据的时候,会有专门的文章。 为什么要爬简书数据呢?
木东居士
2018/05/25
1.6K0
Python爬取美女图片 爬虫基础
作为一个考研狗,每天除了日复一日的复习外,偶尔也想给自己寻找一些生活的小乐趣,今天突然想到了自己曾经稍微接触的爬虫,想看看可以爬取些图片放到电脑上,就花了些时间改了改之前的爬虫代码,爬取了一部分照片先量一下战绩吧。照片不多但也算是自己的一次爬虫小经验。
全栈程序员站长
2022/09/13
8080
Python 爬虫第一篇(urllib+regex)
爬虫的主要用途即从网站上获取网页,并将网页中的有用信息解析出来。从网站上获取网页内容可以通过 python 内置的 urllib 模块来实现,至于信息的解析说起来比较复杂,python 中可以使用的模块也有很多,今天我们主要使用正则表达式「python 内置的 re 模块」来实现数据的解析。
keinYe
2019/08/01
8440
Python 爬虫第一篇(urllib+regex)
外行学 Python 爬虫 第六篇 动态翻页
前面几篇文章,初步完成了从网络请求、数据解析、数据存储的整个过程,完成了一个爬虫所需的全部功能。但是通过对数据库中数据的分析会发现数据库中的元件数量比网站上的元件数量少了很多。前面的实现过程通过解析网页中的连接来获取元件详细信息页面,解析出相关的数据。在实际页面中发现有很多的分页现象,通过前面的方式仅能获取第一页的内容,无法获取第二页的内容,这就造成无法爬取所有的页面,最终是获取到的数据比网站上的实际数据小的多。
keinYe
2019/08/01
2.3K0
外行学 Python 爬虫 第六篇 动态翻页
Python爬虫基础
Python非常适合用来开发网页爬虫,理由如下: 1、抓取网页本身的接口 相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib包提供了较为完整的访问网页文档的API。(当然ruby也是很好的选择) 此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。这是我们需要模拟user agent的行为构造合适的请求,譬如模拟用户登陆、模拟session/cookie的存储和设置。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize
用户7678152
2020/08/26
1.1K0
004:Python爬虫实战 由易到难(图文解析)
相信有了前面三章的基础了解,我们对爬虫的基础知识已经有所掌握。 本篇内容是从易到难给大家讲解一些常用爬虫的手写。 包括图片爬虫、链接爬虫、多线程爬虫等等。
李玺
2021/11/22
4860
004:Python爬虫实战 由易到难(图文解析)
Python网页爬取_在pycharm里面如何爬取网页
使用Python爬取简单数据 闲暇时间学习Python,不管以后能否使用,就算了解计算机语言知识。 因为有一点Java基础,所以Python的基本语法就很快的过了一遍,表达或许有点混乱,以后慢慢改进。 一、导入爬取网页所需的包。
全栈程序员站长
2022/11/04
2.3K0
Python网页爬取_在pycharm里面如何爬取网页
python实现多线程爬虫
ubuntu16.04,python3.6,bs4,virtualenv(虚拟环境)
会呼吸的Coder
2020/02/17
9960
使用Python的BeautifulSoup库实现一个可以爬取1000条百度百科数据的爬虫
BeautifulSoup安装很简单,我们可以直接使用pip来安装BeautifulSoup,安装命令如下:
端碗吹水
2020/09/23
2.7K0
使用Python的BeautifulSoup库实现一个可以爬取1000条百度百科数据的爬虫
Java 动手写爬虫: 三、爬取队列
第三篇 爬取队列的实现 第二篇中,实现了深度爬取的过程,但其中一个比较明显的问题就是没有实现每个爬取作为一个独立的任务来执行;即串行的爬取网页中的链接;因此,这一篇将主要集中目标在并发的爬网页的问题
一灰灰blog
2018/02/06
2K0
Java 动手写爬虫: 三、爬取队列
Python爬虫(全)
里面的parse方法,这个方法有两个作用 1.负责解析start_url下载的Response 对象,根据item提取数据(解析item数据的前提是parse里全部requests请求都被加入了爬取队列) 2.如果有新的url则加入爬取队列,负责进一步处理,URL的Request 对象 这两点简单来说就是编写爬虫的主要部分
yuanshuai
2022/08/22
13.3K0
Python爬虫(全)
python爬虫爬图片教程_爬虫爬取图片的代码
根据观察,除了第一页,其他页后缀都为*.html一共13页 所以我们可以通过for遍历所有页码
全栈程序员站长
2022/11/17
1.1K0
python爬虫爬图片教程_爬虫爬取图片的代码
python爬取电影信息
小王不头秃
2024/06/19
4000
Python编写网络爬虫–牛刀小试
本文参考网上的资料,编写简单的Python编写网络爬虫,做了网页内容的抓取,分析出链接的url并抓取。
全栈程序员站长
2022/07/05
2990
数据结构思维 第十五章 爬取维基百科
在本章中,我展示了上一个练习的解决方案,并分析了 Web 索引算法的性能。然后我们构建一个简单的 Web 爬虫。
ApacheCN_飞龙
2022/12/01
4940
【python爬虫】爬虫编程技术的解密与实战
Python领域就像一片未被勘探的信息大海,引领你勇敢踏入Python数据科学的神秘领域。这是一场独特的学习冒险,从基本概念到算法实现,逐步揭示更深层次的模式分析、匹配算法和智能模式识别的奥秘。
SarPro
2024/02/20
4450
【python爬虫】爬虫编程技术的解密与实战
外行学 Python 爬虫 第三篇 内容解析
从网络上获取网页内容以后,需要从这些网页中取出有用的信息,毕竟爬虫的职责就是获取有用的信息,而不仅仅是为了下来一个网页。获取网页中的信息,首先需要指导网页内容的组成格式是什么,没错网页是由 HTML「我们成为超文本标记语言,英语:HyperText Markup Language,简称:HTML」 组成的,其次需要解析网页的内容,从中提取出我们想要的信息。
keinYe
2019/08/01
1.4K0
外行学 Python 爬虫 第三篇 内容解析
相关推荐
外行学 Python 爬虫 第四篇 URL 去重
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档