Python爬虫:HTML网页解析方法小结

作者&投稿:田华 (若有异议请与网页底部的电邮联系)
~ 要理解python是如何解析网页的,首先要理解什么是网页解析器。

简单的说就是用来解析html网页的工具,准确的说:它是一个HTML网页信息提取工具,就是从html网页中解析提取出“我们需要的有价值的数据”或者“新的URL链接”的工具。

解析HTML:

我们知道爬虫的原理无非是把目标网址的内容下载下来存储到内存中,这个时候它的内容其实是一堆HTML,然后再对这些HTML内容进行解析,按照自己的想法提取出想要的数据。

今天主要讲讲Python中解析网页HTML内容的四种方法:

其中BeautifulSoup和XPath是python中解析网页常用的两个库,对于新手来说是利器,零基础小白建议先打好Python基础再去上手爬虫会容易一些。

“零基础如何学Python”在知乎看到过一篇比较好的问答贴,讲的很实用,大家伙可以移步去看看,链接分享在下方。

1、BeautifulSoup

大名鼎鼎的BeautifulSoup库,在Pyhton的HTML解析库里属于重量级的库。

安装途径:

解析的第一步,是构建一个BeautifulSoup对象。

第二个参数表示解析器,BeautifulSoup支持以下多种解释器:

BeautifulSoup对应一个HTML/XML文档的全部内容;

BeautifulSoup类的基本元素

任何存在于HTML语法中的标签都可以用soup.访问获得,当HTML文档中存在多个相同对应内容时,soup.返回第一个。

每个都有自己的名字,通过.name获取,字符串类型 Tag的attrs:一个可以有0或多个属性,字典类型 NavigableString可以跨越多个层次

1)访问标签

通过点号操作符,可以直接访问文档中的特定标签,示例:

这样的方式每次只会返回文档中的第一个标签,对于多个标签,则通过find_all方法返回多个标签构成的列表。

还可以在find方法中添加过滤条件,更加精确的定位元素。

2)访问标签内容和属性

通过name和string可以访问标签的名字和内容,通过get和中括号操作符则可以访问标签中的属性和值。

结合定位元素和访问属性的方法,可以方便快捷的提取对应元素,提高解析html的便利性。

使用Beautiful Soup库解析网页

BeautifulSoup解析内容同样需要将请求和解析分开,从代码清晰程度来讲还将就,不过在做复杂的解析时代码略显繁琐,总体来讲用起来还不错,看个人喜好吧。

爬虫的基本技能最重要的两点:如何抓取数据?如何解析数据?我们要活学活用,在不同的时候利用最有效的工具去完成我们的目的。

工具是其次,学习不要主末颠倒了,我上面分享的那篇文章也有提到过这个问题(链接有放在下方),要明确你学习的最终目的是什么?

2、lxml的XPath

lxml这个库同时支持HTML和XML的解析,支持XPath解析方式,解析效率挺高,不过我们需要熟悉它的一些规则语法才能使用。

使用xpath需要从lxml库中导入etree模块,还需要使用HTML类对需要匹配的HTML对象进行初始化。

安装途径:

Xpath常用表达式

使用表达式定位head和title节点

Xpath谓语常用的表达式

使用谓语定位head和ul节点

定位并获取title节点内的文本内容

提取ul节点下的所有文本文件和链接地址

XPath的解析语法稍显复杂,不过熟悉了语法的话也不失为一种优秀的解析手段。

示例:

3、requests-html

我们知道 requests 只负责网络请求,不会对响应结果进行解析,因此可以把 requests-html 理解为可以解析 HTML 文档的 requets 库。

requests-html 的代码量非常少,都是基于现有的框架进行二次封装,开发者使用时可更方便调用,它依赖于 PyQuery、requests、lxml 等库。

安装途径:

需要注意的是这个库目前只支持python3.6版本;

requests-html 具有以下特性:

requests-html默认使用session保持的请求方式,且其返回内容是一个带有丰富方法的对象。

获取一个随机User-Agent

不用每次在请求头里面去复制user-agent;

对JavaScript的支持是requests-html最大的亮点,会用到render函数,需要注意的是第一次使用这个方法,它会先下载Chromium,然后使用Chromium来执行代码,但是下载的时候可能需要一个梯子,这里就先不展开讨论了。

学过requests库的看到requests-html的api应该会很熟悉,使用方法基本一致,不同的是使用requests编写爬虫时,要先把网页爬取下来,然后再交给BeautifulSoup等一些html解析库,现在可以直接解析了。

示例:

通过简短的几行代码,就可以把整个首页的文章抓取下来。

示例中使用的几个方法:

① find( ) 可以接收两个参数:

第一个参数可以是class名称或ID第二个参数first=True时,只选取第一条数据

② text 获取元素的文本内容

③ attrs 获取元素的属性,返回值是个字典

④ html 获取元素的html内容

使用requests-html来解析内容的好处在于作者都高度封装过了,连请求返回内容的编码格式转换也自动做了,完全可以让代码逻辑更简单直接,更专注于解析工作本身。

4、正则表达式

正则表达式通常被用来检索、替换那些符合某个模式的文本,所以我们可以利用这个原理来提取我们想要的信息。

使用正则表达式, 需要导入re模块,该模块为Python提供了完整的正则表达式功能。

严格的字符匹配示例:

注意:python只支持re模块进行正则表达式的书写

使用正则表达式查找网页内容中的title内容:

使用正则表达式无法很好的定位特定节点并获取其中的链接和文本内容,而使用Xpath和Beautiful Soup能较为便利的实现这个功能。

正则就是编写麻烦,理解不容易,但是匹配效率很高,不过现在有很多现成的HTMl内容解析库之后,不太推荐再手动用正则来对内容进行匹配了,麻烦费时费力。

5、小结:

(1)正则表达式匹配不推荐,因为已经有很多现成的库可以直接用,不需要我们去大量定义正则表达式,还没法复用,尝试过正则表达式的小白就能体会,使用正则表达式来筛选网页内容是有多费劲,而且总是感觉效果不太好。

(2)BeautifulSoup是基于DOM的方式,简单的说就是会在解析时把整个网页内容加载到DOM树里,内存开销和耗时都比较高,处理海量内容时不建议使用。

BeautifulSoup不需要结构清晰的网页内容,因为它可以直接找到我们想要的标签,如果对于一些HTML结构不清晰的网页,它比较适合。

(3)XPath是基于SAX的机制来解析,不会像BeautifulSoup去加载整个内容到DOM里,而是基于事件驱动的方式来解析内容,更加轻巧。

不过XPath要求网页结构需要清晰,而且开发难度比DOM解析的方式高一点,推荐在需要解析效率时使用。

(4)requests-html 是比较新的一个库,高度封装且源码清晰,它直接整合了大量解析时繁琐复杂的操作,同时支持DOM解析和XPath解析两种方式,灵活方便,可以尝试。

除了以上介绍到几种网页内容解析方式之外还有很多解析手段,这里就暂不一一介绍了。


Python爬虫:HTML网页解析方法小结
对JavaScript的支持是requests-html最大的亮点,会用到render函数,需要注意的是第一次使用这个方法,它会先下载Chromium,然后使用Chromium来执行代码,但是下载的时候可能需要一个梯子,这里就先不展开讨论了。学过requests库的看到requests-html的api应该会很熟悉,使用方法基本一致,不同的是使用requests编写...

Python 爬虫(一):Header 的设置
requests库中的get和post方法默认的User-Agent标识了请求来源,这可能会暴露为Python爬虫,从而触发网站的反爬策略。因此,我们需要自定义headers,尤其是User-Agent,使其看起来像是浏览器请求。例如,通过访问httpbin.org\/headers,我们可以观察到浏览器的典型headers结构。在requests.get()函数中,可以添加he...

python爬虫入门02:教你通过 Fiddler 进行手机抓包
现在,手机上的任何请求都会被Fiddler捕获。你可以修改请求和返回的数据,例如在看B站时,可以拦截热门内容的请求,修改返回的数据,然后在手机上查看修改后的结果。Fiddler不仅能拦截返回数据,请求时的拦截也一样,只需按下F11键。掌握这些技巧后,你就可以在Python爬虫中进行更深入的数据操作了。

爬虫python是什么意思?
爬虫Python是一种使用Python语言编写的网络爬虫程序。它通过对网站页面进行自动化访问和解析,获取所需的数据。爬虫可以帮助我们快速地搜集和分析大量的数据,它被广泛应用于搜索引擎、电商网站、社交媒体等领域。Python语言的简洁性和优雅性使其成为Python爬虫的首选语言。Python爬虫的使用非常灵活,可以根据不同...

Python写爬虫都用到什么库
一、Python爬虫网络库Python爬虫网络库主要包括:urllib、requests、grab、pycurl、urllib3、httplib2、RoboBrowser、MechanicalSoup、mechanize、socket、Unirest for Python、hyper、PySocks、treq以及aiohttp等。二、Python网络爬虫框架Python网络爬虫框架主要包括:grab、scrapy、pyspider、cola、portia、restkit以及...

python有多少种爬虫(最简单的爬虫代码python)
一般来讲,只有在遇到比较大型的需求时,才会使用Python爬虫框架。这样的做的主要目的,是为了方便管理以及扩展。本文我将向大家推荐十个Python爬虫框架。1、Scrapy:Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。它是很...

python为什么叫爬虫 python有什么优势
python为什么叫爬虫 要知道python为什么叫爬虫,首先需要知道什么是爬虫。爬虫,即网络爬虫,大家可以理解为在网络上爬行的一只蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛,如果它遇到自己的猎物(所需要的资源),那么它就会将其抓取下来。比如它在抓取一个网页,在这个网中他...

Python爬虫常用:谷歌浏览器驱动——Chromedriver 插件安装教程_百度...
在Python爬虫项目中,谷歌浏览器驱动Chromedriver的安装至关重要。首先,打开谷歌浏览器,进入设置面板以查看当前版本号,这对于选择合适的驱动至关重要。然后,前往插件下载页面,根据你的浏览器版本找到最接近的Chromedriver版本。通常,选择icons\/上方的最新版本,避免不必要的问题。在找到对应版本后,检查...

Python爬虫从入门到精通(2): requests库详解,cookie操作与实战_百度知 ...
Python的requests库是爬虫开发的强大工具,它在urllib库的基础上提供了更简洁的接口。无需复杂的参数编码和对象构建,requests只需一行代码就能实现发送get或post请求,包括参数传递。其对cookie的处理也相当便捷,无论是设置请求头中的cookie还是维持会话状态,都变得相当容易。首先,安装requests库是通过`pip ...

python学到爬虫要多久(2023年最新解答)
学习Python爬虫需要多久完全掌握Python参加培训需要4-6个月左右,如果单纯的入门的话1-2个月左右就差不多了。Python爬虫就是使用Pythoni程序开发的网络爬虫,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,主要用于搜索引擎,它将一个网站的所有内容与链接进行阅读,并建立相关的全文素引到...

桃山区15030315716: 怎样用python爬取网页 -
尉刚香连: # coding=utf-8 import urllib import re# 百度贴吧网址:https://tieba.baidu.com/index.html # 根据URL获取网页HTML内容 def getHtmlContent(url):page = urllib.urlopen(url)return page.read()# 从HTML中解析出所有jpg的图片的URL # 从HTML中...

桃山区15030315716: 如何用Python爬虫抓取网页内容? -
尉刚香连: 首先,你要安装requests和BeautifulSoup4,然后执行如下代码. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34importrequests frombs4 importBeautifulSoupiurl ='http://news.sina.com.cn/c/nd/2017...

桃山区15030315716: 如何用python把网页上的文本内容保存下来 -
尉刚香连: 1、了解Python如何获取网页内容. 2、导入 urllib.request模块. 3、使用urllib.request.urlopen( )获取对象. 4、urllib.request.urlopen()获取的是一个网页的http.client.HTTPResponse对象. 5、若要打印http.client.HTTPResponse对象的内容,可以继续使用read()方法.

桃山区15030315716: python怎样将网页内容解析成DOM对象 -
尉刚香连: 可以使用Python自带的HTMLParser模块解析HTML文档:HTMLParser的核心模块是org.htmlparser.Parser类,这个类实际完成了对于HTML页面的分析工作.这个类有下面几个构造函数:public Parser (); public Parser (Lexer lexer, ...

桃山区15030315716: python 怎样爬去网页的内容 -
尉刚香连: 用python爬取网页信息的话,需要学习几个模块,urllib,urllib2,urllib3,requests,httplib等等模块,还要学习re模块(也就是正则表达式).根据不同的场景使用不同的模块来高效快速的解决问题.最开始我建议你还是从最简单的urllib模块学起,比如...

桃山区15030315716: 如何用python抓取网页内容 -
尉刚香连: 给个简单的抓取百度页面的简单爬虫案例代码给你,自己去动手测试把:#coding=utf-8import urllib2def postu(url): header = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743....

桃山区15030315716: python怎么解析html文档 -
尉刚香连:Python提供了一个HTMLParser模块,可以非常简单的解析HTML 首先考虑如何从如下的HTML中提取信息

桃山区15030315716: 如何用 python 爬取简单网页 -
尉刚香连: 测试环境:Windows10+Python3.5.2 打开命令提示符(管理员),输入pip3 install requests安装requests模块import requests,re #获取网页 r = requests.get('http://www.bilibili.com') #正则表达式获取标题 res = re.search(r'<title>([^<]*)</title>',r.text) print(res.group(1)) >>>哔哩哔哩弹幕视频网 - ( ゜- ゜)つロ 乾杯~ - bilibili

桃山区15030315716: 如何用python抓取网页特定内容 -
尉刚香连: 用urllib2读取通过httpserver传递request,获取html文件. 用正则表达式规定那个价格附近的格式内容,查找整个html,找到价格. 关键在于网站html文件并不规范,可能经常有变化导致失败.定时运行脚本发现价格变化就报告.

桃山区15030315716: 如何分析网页数据并且去除Html标签 -
尉刚香连: 用Python(或者其他程序语言)写个爬虫,把网页源码抓取到本地,然后用正则去匹配把HTML标签去掉,剩下的保存到本地即可.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网