用python写网络爬虫

news2024/11/24 8:30:19

第二章

数据抓取

首先 , 我们会介绍一个叫 做Firebug Lite 的浏览器扩展, 用 于检查网页 内容 , 如 果你有一些网络开发背景的话, 可能 己经对该扩展十分熟悉 了 。 然后 ,我们会介绍三 种抽取网 页数据的 方法 , 分别是正则表达式、 Beauti削Soup up 和lxml 。 最后 , 我们将 对 比这三 种数据抓取方法 。

2.1 分析网页

    想要了解一个网页的结构如何,可以使用查看源代码的 方法 。在大多数浏览器中 ,都可以在页面上右键单击选择 ViView page source 选工页 工页 ,获取网页的源代码,如 图 2. 1 所示。我们可 以在 H刊伍 的下述代码 中 找到我们感兴趣 的 数据 。

    <table>

    <tr id= ”place s_national_flag_row ” ><td class=”w2p_f l ” ><label

      for= ”place s_national_flag ” 

3eac0631b07e4293afbe708610e1477d.jpg

 2.2.2 Beautiful Soup

Beautifuful Soup

        是一个非常流行的Pythython模块 。该模块可 以解析网页,并提供定位 内 容的便捷接 口 。 如果你还没有安装该模块 ,可 以使用 下面的命令安装其最新版本:pip install beautifuls。up4使用 Beauautiful Soup 的第一步是将 己下载的 HTML 内 容解析为 soup 文档 。由 于大多数网 页都不具备 良好的 HTML 格式, 因 此 Beautiful Soup需要对其实 际格式进行确定 。例 如 ,在下面这个简单网页的列表 中 ,存在属性值两侧引号缺失和标签未 闭含 的 问题。

        <ul class=country>

             <li>Area

        <li>Population

              < /ul> 

2.2.3 Lxml

Lxml 是基于 l ibxml 2 这一 XML 解析库的 Python封装 。该模块使用 C语言编写 ,解析速度 比 Beauautiful Soup 更快 ,不过安装过程也更为复杂 。最新的 安装说明可以参考 http : / / Lxml . de / instal l at i on . html o和 Beauautiful Soup 一样 ,使用 lxml 模块的第一步也是将有可能不合法的HTML 解析为统一格式 。下面是使用 该模块解析同一个不完整 HTML 的例子 。

》> import lxml . html

》> bro ken html = ’ <ul clas s=country><li>Area<li>Population</ul> ’ 》> tree = lxml . html . fromstring (broken_ html ) # parse the HTML

》> fixed html = lxml . html . tos tring ( tree , pretty_pr int=True )

》> print fixed_html

<ul clas s=” country">

      <li>Area< /li>

      <li>Popul ation< /li>

< /ul> 

46429aafee7f443eb08bc6ace7e19e2e.jpg

 的例子相同

2.2.5 结论表

2. 1 总结了每种抓取方法的优缺点

e4489d80e41c47b1bec03612069a88a1.jpg

                   如果你的爬虫瓶颈是下载网页,而不是抽取数据的话 ,那么使用较慢的方法 ( 如 Beauautiful Soup ) 也不成 问题。如果只需抓取少量数据 ,并且想要避免额外依赖的话, 那 么 正则表达式可能更加适合 。不过, 通常情况下 ,l xml 是抓取数据 的 最好 选择 , 这是因为该方法既快速又健壮而正则表达式和Beautiful Soup up 只在某些特定场景下有用 。

2.2.6 为链接爬虫添加抓取回调

         前面我们 已 经了解了如何抓取国家数据 , 接 下来我们 需 要将其集成到上一章的 链接爬虫 当 中 。要想复用这段爬虫代码抓取其他网站,我们需要添加 一个 cal lback参数处理抓取行 为 。 cal lba c k 是一个函数在发生某个特定 事件之后会调用该函数( 在本例中,会在 网 页下载完成后 调用 ) 。该抓取 cal lback 函 数包含url和html 两个参数 ,并且可 以返回一个待爬取的URL 列 表 。 下面是其实现代码 , 可以看出在 Python 中 实现该功能非常简单 。

        de f link_crawler ( ... ,  , s c rape_cal lbac k=None ):

              links = []

              if scrapape_callback :

                  links . extend ( scrape__callback (url , ht皿1) or [ ] ) 

2.3 本章小结

在本章 中 ,我们介绍了几种抓取网页数据的方法。正则表达式在一次性数据抓取中非常有用 ,此外还可以避免解析整个网页带来的开销 :BeautifulSoup提供了更高层次的接口 ,同 时还能避免过多麻烦的依赖。不过通常情况下 ,lxml 是我们的最佳选择,因为它速度更快 , 功能更加丰富 ,因此在接下来的例子中我们将会使用 l xml 模块进行数据抓取。

下一章, 我们会介绍缓存技术 ,这样就能把网 页保存下来 , 只 在爬虫第一次运行时才会下载 网页。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/652389.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法刷题】其他技巧

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招算法的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于网上知识点进行的&#xff0c;每个代码参考热门博客和GPT3.5&#…

vivo 帐号服务稳定性建设之路-平台产品系列06

作者&#xff1a;vivo 互联网平台产品研发团队- Shi Jianhua、Sun Song 帐号是一个核心的基础服务&#xff0c;对于基础服务而言稳定性就是生命线。在这篇文章中&#xff0c;将与大家分享我们在帐号稳定性建设方面的经验和探索。 一、前言 vivo帐号是用户畅享整个vivo生态服务…

【CEEMDAN-VMD-GRU】完备集合经验模态分解-变分模态分解-门控循环单元预测研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Python】数据容器总结 ② ( 数据容器元素排序 | 字符串大小比较 | 字符大小比较 | 长短一样的字符串大小比较 | 长短不一样的字符串大小比较 )

文章目录 一、数据容器元素排序二、字符串大小比较1、字符大小比较2、长短一样的字符串大小比较3、长短不一样的字符串大小比较 一、数据容器元素排序 调用 sorted 函数 , 可以对 数据容器 中的元素进行排序 ; sorted(数据容器变量, [reverseTrue])上述两个参数 , 第一个 数据…

开源!一款.Net开发的全能工具EverythingToolbar,节约你90%操作时间!

今天给大家推荐一款已获得6.3K stars的.Net开发的开源全能工具EverythingToolbar。EverythingToolbar 是由 Everything 提供支持的 Windows 任务栏的即时文件搜索集成&#xff0c;可以替换操作系统任务栏上的 Windows 搜索&#xff0c;使 Windows 上的文件搜索更快、更可靠。 …

Hive 库表相关操作

1、Hive内部表和外部表 1.内部表&#xff1a;未被external修饰&#xff1b;外部表&#xff1a;被external修饰。 区别&#xff1a; &#xff08;1&#xff09;内部表数据由Hive自身管理&#xff0c;外部表数据由HDFS管理&#xff1b; &#xff08;2&#xff09;内部表数据存…

ESP32(Micro Python) LVGL 传感器数值显示

本程序用于显示SR04超声波传感器和BMP280气压温度传感器的读数。由于高度数值类型不符合要求&#xff0c;BMP280改为显示气压和温度值。气压值分两部分显示&#xff0c;分别为千帕值-100&#xff08;避免超出表盘显示范围&#xff09;和千帕值的两位小数。由于标签不能显示动态…

在Mybatis执行插入数据时,如何将Date类型字段设置为“yyyy-MM-dd”的格式

1、问题描述 使用mybatis新增插入一条数据到MySQL数据库时&#xff0c; 其中实体类对象的一个属性”hiredate“的类型是日期类型Date&#xff0c; 此属性在数据库中对应的字段“hiredate”类型也是日期Date类型&#xff0c; 但是在数据库中要求“hiredate”字段的字段值为“yy…

瑞萨RA4M2 基于CAN总线的UDS诊断升级MCU工具 /bootloader/UDS诊断/14229/15765

基于can总线的UDS软件升级 最近学习UDS诊断协议&#xff08;ISO14229&#xff09;&#xff0c;是一项国际标准&#xff0c;为汽车电子系统中的诊断通信定义了统一的协议和服务。它规定了与诊断相关的服务需求&#xff0c;并没有设计通信机制。ISO14229仅对应用层和会话层做出了…

【SpringCloud入门】-- 认识微服务

目录 1. 什么是微服务&#xff1f; 2. 微服务的优势&#xff1f; 3. 单体架构&#xff0c;分布式架构&#xff0c;微服务架构的区别以及优缺点&#xff1f; 4. SpringCloud和Spring Cloud Alibaba是什么&#xff1f; 5. SpringCloud和SpringCloudAlibaba的区别&#xff1f…

apple pencil二代值不值得买?口碑好的电容笔排行榜

事实上&#xff0c;苹果Pencil与市场上普通的电容笔最大的区别就是在重量和压感上。苹果pencil拥有着独特的重力压感&#xff0c;可以很好运用于绘画上&#xff0c;但是&#xff0c;随着苹果Pencil的价格一直高居不下&#xff0c;而平替电容笔各种性能的不断提高&#xff0c;苹…

Vue中如何进行3D场景展示与交互(如Three.js)

Vue中如何进行3D场景展示与交互&#xff08;如Three.js&#xff09; 随着WebGL技术的发展&#xff0c;越来越多的网站开始使用3D场景来展示产品、游戏等内容。在Vue中&#xff0c;我们可以使用第三方库Three.js来实现3D场景的展示与交互。本文将介绍如何在Vue中使用Three.js来…

和 if else说再见,SpringBoot 这样做参数校验才足够优雅!

1. 概述 当我们想提供可靠的 API 接口&#xff0c;对参数的校验&#xff0c;以保证最终数据入库的正确性&#xff0c;是 必不可少 的活。比如下图就是 我们一个项目里 新增一个菜单校验 参数的函数&#xff0c;写了一大堆的 if else 进行校验&#xff0c;非常的不优雅&#xf…

语音验证码短信原理和应用场景分析

引言 随着移动互联网的快速发展&#xff0c;短信验证码成为了许多应用和服务中常用的身份验证方式。然而&#xff0c;有时候用户可能由于各种原因无法接收到短信验证码&#xff0c;或者对于文字验证码不够方便或友好。 为了解决这些问题&#xff0c;语音验证码短信API 应运而…

【论文精读ACL_2021】Prefix-Tuning: Optimizing Continuous Prompts for Generation

【论文精读ACL_2021】Prefix-Tuning: Optimizing Continuous Prompts for Generation 0、前言Abstract1 Introduction2 Related Work2.1 Fine-tuning for natural language generation.2.2 Lightweight fine-tuning2.3 Prompting.2.4 Controllable generation. 3 Problem State…

Python做数据分析需要学什么?

下面分别从这四个方面来带大家学习数据分析&#xff1a; 第一&#xff0c;做数据分析要精通Python吗&#xff1f;第二&#xff0c;数据分析流程是什么&#xff1f;学什么&#xff1f;第三&#xff0c;如何培养数据分析思维&#xff1f;第四&#xff0c;数据分析书籍推荐 一、…

关于linux服务器上生成的图片中文字为的乱码问题

一、功能描述 linux服务器后端生成图表&#xff08;使用了canvas和echarts&#xff09;&#xff0c;并将生成的图片发送到企业微信群里。 二、出现的问题 生成的图表中文展示不出来&#xff0c;是乱码。错误图表展示如下&#xff1a; 三、 文字乱码出现的原因 linux服务器没有…

git在windows及linux(源码编译)环境下安装

git在windows及linux(源码编译)环境下安装 环境信息: 系统版本:CentOS Linux release 7.9.2009 (Core) git指令安装: yum install -y git 一、git在windows下安装 下载地址:https://git-scm.com/ 默认安装即可 验证 git --version 二、git在linux下安装 下载地址…

电子标签服务器搭建说明文档

一、安装运行环境 1.安装jdk 运行JDK_1.8.0_64bit.exe程序,可自定义安装路径 ​ 2.配置环境变量 择计算机图标&#xff0c;鼠标右键选择属性 ​ 选择高级系统设置&#xff0c;在系统属性中找到环境变量 ​ 在系统变量中新建JAVA_HOME环境变量&#xff0c;变量值为jdk的安装路…

跨域请求!!!

1.见过的请求类型都有哪些 getpostputdeleteoptions 和跨域相关的请求头 2.什么是跨域 当主机、域名、端口有任何一个不一致的时候&#xff0c;会出现跨域 3.跨域只有在哪里会出现 浏览器里出现了&#xff0c;它是浏览器的一个行为 4.为什么有跨域 为了安全不同域名之间…