您当前的位置:网站首页>中影国际影城,网络爬虫:入门之HTML文本解析库BeautifulSoup库,舞钢天气预报

中影国际影城,网络爬虫:入门之HTML文本解析库BeautifulSoup库,舞钢天气预报

2019-04-20 01:26:50 投稿作者:admin 围观人数:145 评论人数:0次

作者:刘志军,6年+Pyth画轨迹小人跑on运用经历, 高档开发工程师

网址:https://mp.weixin.qq.com/s/VGS4aWx4bd9XLh3fROxybg

爬虫系列前文回忆:

网络爬虫:入门之快速了解HTTP协议

网络爬虫:入门之用 requests 构建知乎 API

网络爬虫:入门之高雅的HTTP库requests

网络爬虫:Python中影世界影城,网络爬虫:入门之HTML文本解析库BeautifulSoup库,舞钢天气预报爬虫之模仿知乎登录

网络爬虫:Python动态网页爬虫2种技能办法及示例

Python网络爬虫的同步和异步

系列文章的此篇介绍了网络恳求库神器 Requests ,恳求把数据返blackmores回来之后就要提取方针数据,不同的网站回来的内容一般有多种不同的格局,一种是 json 格局,这类数据对开发者来说最友爱。另一种 XML 格局的,还有一种最常见格局的是 HTML 文档,今日就来讲讲怎么从 HTML 中提取出感兴趣的数据

直接字符串处理?自己写个 HTML 解析器来解析吗?仍是用正则表达式?这些都不是最好的办法,好在,Python 社区在这方面早就有了很老练的计划,BeautifulSoup 便是这一类问题的克星,它专心于 HTML 文档操作。

BeautifulSoup 是一个用于解析 HTML 文档的 Python 库,经过 BeautifulSoup,你只需求用很少的代码就能够提取出 HTML 中任何感兴趣的内容,此外,它还有必定的 HTML 容错才干,关于一个格局不完整的HTML 文档,它也能够正确处理。

装置 BeautifulSoup

pip install beautifulsoup4

Beaut披萨怎么做ifulSoup3 被官方抛弃保护,你要下载最新的版别 BeautifulSoup4。

HTML 标签

学习 BeautifulSoup4 前有必要先对 HTML 文档有一个根本知道,如下代码,HTML 是一个树形安排结构。

 

hell蹇o, world


BeautifulSoup


怎么运用BeautifulSoup




  • 它由许多标签(Tag)组成,比方 html、head、title等等都是标签
  • 一个标签对构成一个节点,比方 ...是一个根节点
  • 节点之间存在某种联系,比方太浩仙门 h1 和 p 互为街坊,他们是相邻的兄弟(sibling)节点
  • h1 是 body 的直接子(children)节点,仍是 html 的后代(descendants)节点
  • body 是 p 的父(parent)节点,html 是 p 的祖辈(parents)节点
  • 嵌套在标签之间的字符串是该节点下的一个特别子节点,比方 “hello, world” 也是一个节点,只不过没姓名。

运用 BeautifulS离央oup

构建一个 BeautifulSoup 方针需求两个参数,榜首个参数是即将解析的 HTML 文本字符串,第二个参数通知 BeautifulSoup 运用哪个解析器来解析 HTML。

解析器担任把 HTML 解析成相关的方针,而 BeautifulSoup 担任操作数据(增修改查)。“html.parser” 是 Python 内置的解析器,“lxml” 则是一个根据c言语开发的解析器,它的履行速度更快,不过它需求额定装置

经过 BeautifulSoup 方针能够定位到 HTML 中的任何一个标签节点。

from bs4 import BeautifulSoup 
text = """


hello, world


BeautifulSoup


怎么运用BeautifulSoup


第二个p标签


python


"""
soup = BeautifulSoup(text, "html.parser")
# title 标签
>>> soup.title
hello, world
# p 标签
>>> soup.p

\\u5982\\u4f55\\u4f7f\\u7528BeautifulSoup


# p 标签的内容
>>> soup.p.string
u'\\u5982\\u4f55\\u4f7f\\u7528BeautifulSoup'

BeatifulSoup 将 HTML 笼统成为 4 类首要的数据类型,分别是Tag , NavigableString , BeautifulSoup,C在线道德omment 。每个小青蛙标签节点便是一个Tag方针,NavigableString 方针一般是包裹在Tag方针中的字符串,BeautifulSoup 方针代表整个 HTML 文档。例如:

>>> type(soup)

>>> type(soup.h1)

>>> type(soup.p.string)

Tag

每个 Tag 都有一个姓名,它对应 HTML 的标签称号。

>>> soup.h1.name
u'h1'
>>> soup.p.name
u'p'

标签还能够有特点,特点的拜访办法和字典是相似的,它回来一个列表方针


>>> so我好想你up.p['class']
[u'bold']

NavigableString

获取标签中的内容,直接运用 .stirng 即可获取,它是一个 NavigableString 方针,你能够显式地将它转换为 uni中影世界影城,网络爬虫:入门之HTML文本解析库BeautifulSoup库,舞钢天气预报code 字符串。

>>> soup.p中影世界影城,网络爬虫:入门之HTML文本解析库BeautifulSoup库,舞钢天气预报.string
u'\\u5982\\u4f55\\u4f7f\\u7528BeautifulSo中影世界影城,网络爬虫:入门之HTML文本解析库BeautifulSoup库,舞钢天气预报up'
>>> type(soup.p.string)

>>> unicode_str = unicode(soup.p.string)
>>> unicode_str
u'\\u5982\\u4f55\\u4f7f\\u7528BeautifulSoup'

根本概念介绍完,现在能够正式进入主题了,怎么从 HTML 中找到咱们关怀的数据?BeautifulSoup 供给了两种办法,一种是遍历,另一种是查找,一般低俗歌舞两者结合来完结查找使命。

遍历文档树

遍历文档树,望文生义,便是是从根节点 html 标签开端遍历,直到找到方针元素停止,遍历的一个缺陷是,假如你要找的内容在文档的结尾,那么它要遍历整个文档才干找到它,速度上就慢了。因而还需求合作第二种办法。

经过遍历文档树的办法获取标签节点能够直接经过 .标签名的办法获取,例如:

获取 body 标签:

>>> soup.body
\n

BeautifulSoup

\n

\\u5982\\u4f55\\u4f7f\\u7528BeautifulSoup

\n

获取 p 标签

>>> soup.body檀郎.p

\\u5982\\u4f55\\u4f7f\\u7528BeautifulSoup


获取 p 标签的内容

>>> soup.body.p.string
\\u5982\\u4f55\\u4f7f\\u7528BeautifulSoup

前面说了,内容也是一个节点,这儿就能够用 .string 的办法得到。

遍历文档树的另一个缺陷是只能获取到与之匹配的榜首个子节点,例如,假如有两个相邻的 p 标签时,第二个标签就无法经过 .p 的办法获取,这是需求借用 next_sibling 特点获取相邻的节点。

此外,还有许多不怎么常用的特点,比方:.contents 获取一切子节点,.parent 获取呼叫转移父节点,更多的参阅请检查官方文档。

查找文档树

查找文档树是经过指定标签名来查找元素,还能够经过指定标签的特点值来准确定位某个节点元素,最常用的两个办法便是 find 和 find_all。这两个办法在 BeatifulSoup 和 Tag 方针上都能够被调用。

find_all()

find_all( name , attrs , recursive , text , **kwargs )

find_all 的回来值是一个 Tag 组成的列表,办法调用十分灵敏,一切的参数都是可选的。

榜首个参数 name 是标签节点的姓名。

# 找到一切标签名为title的节点
>>> soup.find_all("title")
[hello, world]
>>> soup.find_all("p")
[

\\xc8\\xe7\\xba\\xce\\xca....

,

\\xb5\\xda\\xb6\\xfe\\xb8\\xf6p...

]

第二个参数是标签的西比灵class特点值

# 找到一切class特点为big的p标签
>>> soup.find_all("p", "big")
[

\\xb5\\xda\\xb6\\xfe\\xb8\\xf6p\\xb1\\xea\\xc7\\xa9

]

等效于

>>> soup.fi中影世界影城,网络爬虫:入门之HTML文本解析库BeautifulSoup库,舞钢天气预报nd_all("p", class_="big")
[

\\xb5\\xda\\xb6\\xfe\\xb8\\xf6p\\xb1\\xea\\xc7\\xa9

]

由于 class 是 Python 关键字,所以这儿广东宏远指定为 class_。

kwargs 是标签的特点名值对,例如:查找有href特点值为 “http://foofish.net”中影世界影城,网络爬虫:入门之HTML文本解析库BeautifulSoup库,舞钢天气预报 的标签

>>> soup.find_all(href="http://foofish.net")
[python]

当然,它还支撑正则表达式

>>> import re
>>> soup.find_all(href=re.compile("^http"))
[python]

特点除了能够是详细的值、正则表达式之外,它还能够是一个布尔值(True/Flase),表明有特点或许没有该特点。

>>> soup.find_all(id="key1")
[

\\xb5\\xda\\xb6\\xfe\\xb8\\xf6p\\xb1\\xea\景甜男朋友\xc7\\xa9

]
>>> soup.find_all(id=True)
[

\\xb5\\xda\\xqq特性签名大全b6\\xfe\\xb8\\xf6p\\xb1\\xea\\xc7\\xa9

]

遍历和查找相结合查找,先定位到 body 标签,缩小查找规模,再从 body 中找 a 标签。

>>> body_tag = soup.body
>>> body_tag.find_all("a")
[python]

find()

find 办法跟 find_all 相似,仅有不同的当地是,它回来的单个 Tag 方针而非列表,假如没找到匹配的节点则回来 None。假如匹配多个 Tag,只回来第0个。


>>> body_tag.find("a")
python
>>> body_tag.find("p")

\\xc8\\xe7\\xba\\xce\\xca\\xb9\\xd3\\xc3BeautifulSoup


get_text()

获取标签里边内容,除了能够运用 .string 之外,还能够运用 get_text 办法,不同的当地在于前者回来的一个 NavigableString 方针,后即热式电热水器者回来的是 unicode 类型的字符串。

>>> p1 = body_tag.find('p').get_text()
>>大人荟> type(p1)

>>> p1
u'\\xc8\\xe7\\xba\\xce\\xca\\xb9\\xd3\\xc3BeautifulSoup'
>>> p2 = body_tag.find("p").string
>>> type(p2)马苏老公

>>> p2
u'\\xc8\\xe7\\xba\\xce\\xca\\xb9\\xd3\\xc3BeautifulSoup'
>>>

实践场景中咱们中影世界影城,网络爬虫:入门之HTML文本解析库BeautifulSoup库,舞钢天气预报一般运用 get_text 办法获取标签中的内容。

总结

BeatifulSoup 是一个用于操作 HTML 文档的 Python 库,初始化 BeatifulSoup 时,需求指定 HTML 文档字符串和详细的解析器。它有3类常用的数据类型,分别是 Tag、NavigableString、和 BeautifulSoup。查找 HTML元素有两种办法,分别是遍历文档树和查找文档树,一般快速获取数据需求二者结合。

the end
合资品牌车型,汽车百团大战