用python写网络爬虫

第二章

数据抓取

首先 , 我们会介绍一个叫 做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 模块进行数据抓取。

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

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java【抽象类与接口】

抽象类与接口 1 抽象类1.1 定义与使用1.2 抽象类和抽象方法使用原则 2 接口2.1 定义2.2 使用规则 3. JDK中内置接口3.1 Comparable接口3.2 Cloneable接口 抽象类与接口的对比 前言&#xff1a;如果强制要求子类必须覆写一些方法&#xff0c;则就会用到抽象类和抽象方法 1 抽象类…

使用 MATLAB 进行气象激光雷达图像分析(Matlab代码实现)

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

STM32——01-开发软件Keil5及STM32CubeMX的安装

1.1开发环境的安装 编程语言&#xff1a;C语言 需要安装的软件有两个&#xff1a;Keil5和STM32CubeMX 安装 安装包&#xff08;不需要太新&#xff0c;以 MDK324 为例&#xff0c;最新的 MDK327 有问题&#xff09; 安装过程一路下一步即可&#xff08;建议不要安装在 C …

2023-06-09:什么是Redis事务?原理是什么?

2023-06-09&#xff1a;什么是Redis事务&#xff1f;原理是什么&#xff1f; 答案2023-06-09&#xff1a; Redis中的事务是以一组命令的形式出现的&#xff0c;这些命令被认为是最小的执行单位。事务可以保证在一个单独独立的隔离操作中执行所有命令&#xff0c;而且所有命令…

深度研究微软的资产负债表和财务状况以及未来投资价值

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 微软股票的关键指标 猛兽财经认为&#xff0c;微软公布的2023财年第三季度财务业绩&#xff0c;有三个关键指标值得投资者关注。 第一个关键指标是利息收入。微软的利息收入目前已经同比增长了44%&#xff0c;从2022财年第…

从搭建hadoop开始学习大数据中分而治之的MapReduce(伪集群模式)

环境准备 首先需要将如下四个必要的文件下载到计算机&#xff08;已经附上了下载地址&#xff0c;点击即可下载&#xff09;。 Vmware Workstation 17.x 【官方的下载地址】 CentOS-7-x86_64-Minimal-2009【阿里云镜像站下载地址】 openjdk-8u41-b04-linux-x64-14_jan_2020【开…

踏上极速向未来之旅!——2023年量化科技嘉年华·专场回顾

2023年6月2日—3日&#xff0c;“2023量化科技嘉年华”在上海世博中心召开&#xff0c;这场为期两天的量化科技盛会&#xff0c;多方位呈现了量化科技创新成果&#xff0c;吸引了众多关注。 在嘉年华的第二天&#xff0c;多场主题论坛同步进行。 由华锐技术主办的“极速向未来…

ChatGPT 4 的 6 个最佳使用场景

作者&#xff1a;SYDNEY BUTLER 译者&#xff1a;明明如月 无论是在 ChatGPT 中还是通过 API&#xff0c;对 OpenAI 的 GPT-4 模型的访问比 GPT-3.5 限制更多。这意味着你需要慎重考虑在何种情况下使用 GPT-4&#xff0c;并选择性地将最适合的任务交给它&#xff0c;以便让其发…

短视频seo源代码部署步骤

一、 部署短视频SEO矩阵系统源代码&#xff0c;您需要遵循以下步骤&#xff1a; 准备服务器环境 首先&#xff0c;您需要准备一个服务器环境来托管源代码。您可以选择云服务器&#xff08;例如AWS&#xff0c;阿里云等&#xff09;或自己的私人服务器。 安装所需软件 在服务器…

Hbase

Hbase 思考环节&#xff1a; 1.什么是hbase 1.1简介 HBase 是一个面向列式存储的分布式数据库&#xff0c;其设计思想来源于 Google 的 BigTable 论文。 HBase 底层存储基于 HDFS 实现&#xff0c;集群的管理基于 ZooKeeper 实现。 HBase 良好的分布式架构设计为海量数据的…

图神经网络 GNN 入门

参考链接 A Gentle Introduction to Graph Neural Networks (distill.pub) 零基础多图详解图神经网络&#xff08;GNN/GCN&#xff09;【论文精读】_哔哩哔哩_bilibili 目录 图的基本构成 图的表示方法 图的示例 图网络的基本任务 图网络的处理 影响图网络效果的超参数 …

快速创建Django项目

环境搭建 安装Django之前需要先安装python环境和pycharm。 目前 Django 1.6.x 以上版本已经完全兼容 Python 3.x。 python安装教程&#xff1a;https://blog.csdn.net/David_house/article/details/100110542 项目创建 打开pycharm&#xff0c;选择文件–>新建项目 创建D…

HUAWEI悦盒ec6108v9c 如何刷成海纳思系统(家用低功耗服务器,使用Home Assistant服务)

环境&#xff1a; 1.HW悦盒ec6108v9c一套 2.16G U盘 3.格式化软件USB_format.exe 4.固件 mv100-mdmo1g-usb-flash.zip&#xff08;底层是Ubuntu 20.04系统&#xff09; 5.十字螺丝刀 6.翘片/薄铲子 7.有线网络环境 8.镊子/回形针 问题描述&#xff1a; 最近玩智能家居…

【Linux】基本指令,拥抱Linux的第一步

[Linux]常见指令 Linux基本指令指令的本质ls指令pwd指令cd指令touch指令mkdir指令(重要)rmdir&&rm指令(重要)man指令&#xff08;重要&#xff09;cp指令&#xff08;重要&#xff09;mv指令&#xff08;重要&#xff09;重定向cat指令more指令less指令&#xff08;重要…

Android Retrofit 给你的接口加上缓存

转载请注明出处&#xff1a;https://blog.csdn.net/kong_gu_you_lan/article/details/131200501?spm1001.2014.3001.5501 本文出自 容华谢后的博客 往期回顾&#xff1a; Android Retrofit RxJava使用详解 Android 探讨一下Retrofit封装的最佳姿势 Android 谈谈我所理解的…

export 和 export default 的区别

一、铺垫 ES6模块化主要包含以下3种用法&#xff1a; ① 默认导出和默认导入---export default ② 按需导出和按需导入---export ③ 直接导入并执行模块中的代码 二、默认导出 语法&#xff1a;export default 需要共享的成员 创建一个共享的数据 order.js let name…

详解Eureka服务注册和调用

目录 1.概述 2.环境 2.1.项目结构 2.2.项目架构 2.3.依赖 3.注册中心 3.1.配置使用 3.2.管理页 3.3.集群 4.服务注册 5.服务调用 5.2.Ribbon 5.3.Feign 5.4.OpenFeign 1.概述 我们把从外部进入到微服务集群里的流量称为“南北流量”、微服务集群节点间流转的流量…

从零开发短视频电商 Jmeter插件安装和常用插件

Jmeter插件安装和常用插件 插件安装方式 一种是手动安装各种插件&#xff0c;下载对应的jar包&#xff0c;放到lib\ext目录下就可以使用了。另一种是通过漂亮的 UI &#xff0c;jmeter 插件管理器Plugins Manager可以方便的管理其他插件的下载和更新。安装一次插件管理器&…

数据库SQL查询(一)

本文介绍SQL查询&#xff0c;如何在海量数据中筛选想要数据&#xff1b; 数据库管理系统选择&#xff1a;关系型数据库mysql 数据库管理工具选择&#xff1a;navicat 本文中查询语句和查询案例参考自&#xff1a;https://edu.csdn.net/course/detail/27673?ops_request_mis…

面试专题:计算机网络常见面试点总结

socket、tcp、udp、http 的认识及区别 socket、tcp、udp、http 的认识及区别​ 一、先来一个讲TCP、UDP和HTTP关系的 1、TCP/IP是个协议组&#xff0c;可分为三个层次&#xff1a;网络层、传输层和应用层。 在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。 在传…