python3 beautifulsoup,python中beautifulsoup

  python3 beautifulsoup,python中beautifulsoup

  阅读目录

  1.BeautifulSoup4的安装配置。2.美人汤的基本用法(1)节点选择器(标签)(2)方法选择器(3)CSS选择器(4)标签修改方法美人汤是python的一个HTML或XML解析库。我们可以使用它方便地从网页中提取数据。它有强大的API和各种解析方法。

  美汤的三大特点:

  Beautiful Soup为浏览、搜索和修改解析树提供了一些简单的方法和类似python的函数。它是一个工具箱,为用户提供解析文档时需要抓取的数据。美汤自动将转换转换成Unicode编码,输出文档转换成UTF-8编码,不考虑编码,除非文档没有指定编码方式。这时候你只需要指定原代码。Beautiful Soup位于流行的Python解析器(如lxml和html5lib)上,允许您尝试不同的解析策略或事务速度以获得灵活性。1.美汤4的安装配置。漂亮的Soup4是通过PyPi发布的,所以可以通过系统管理包工具安装。包名是beautifulsoup4。

  $easy_install beautifulsoup4

  或者

  $pip install beautifulsoup4也可以通过下载源码包来安装:

  # wget https://www . crummy . com/software/beautiful soup/bs4/download/4.0/beautiful soup 4-4 . 1 . 0 . tar . gz

  # tar xf beautifulsoup4-4.1.0.tar.gz

  #cd beautifulsoup4

  #python setup.py安装

  美汤其实解析的时候要看解析器。除了python标准库中的HTML解析器之外,它还支持lxml等第三方解析器。

  美汤支持的解析器,及其优缺点:

  句法分析程序

  施用方式

  优势

  处于不利地位的

  Python标准库

  BeautifulSoup(标记,“html.parser”)

  Python内置的标准库,执行速度适中,文档容错能力强。Python 2.7.3或3.2.2之前),文档容错性差。lxml HTML解析器

  BeautifulSoup(标记,“lxml”)

  容错性强的快速文档需要安装C语言库的lxml XML解析器。

  BeautifulSoup(标记,[lxml , xml])

  BeautifulSoup(标记,“xml”)

  很快。唯一支持XML的解析器需要安装C语言库html5lib

  BeautifulSoup(标记,“html5lib”)

  最好的容错是通过浏览器解析文档,生成HTML5格式的文档速度较慢,并且不依赖外部扩展安装解析器:

  $pip安装lxml

  $pip install html5lib推荐lxml作为解析器,因为它更高效。在2.7.3之前的Python版本和3.2.2之前的Python版本中,必须安装lxml或html5lib,因为那些Python版本的标准库中内置的html解析方法不够稳定

  2.BeautifulSoup的基本用法。通过传入一个字符或一个文件句柄,BeautifulSoup的构造方法可以得到一个文档的对象。选择合适的解析器解析文档,比如手动指定将选择指定的解析器解析文档,美汤将复杂的HTML文档转换为复杂的树形结构。每个节点都是一个python对象,所有对象都可以分为四种类型:Tag、NavigableString、BeautifulSoup、Comment。

  注:BeautifulSoup版本4的包是在bs4中引入的。

  从bs4导入BeautifulSoup

  #以下代码示例都是用本文档测试的。

  html_doc=

  睡鼠的故事睡鼠的故事

  从前有三个小姐妹;他们的名字是

  埃尔西,

  拉西和

  蒂莉;

  他们住在井底。

  .

  标记=

  soup=BeautifulSoup(html_doc, lxml )

  soup1=BeautifulSoup(标记, lxml )

  汤

  navstr=tag.string

  comment=soup1.b.string

  Print(type(tag)) #Tag标记对象

  print(type(comment)) #Comment对象包含文档注释内容。

  print(type(navstr))# navigate string对象包装字符串内容

  print(type(soup))# Beautifully soup对象是文档的全部内容。

  #

  (1)节点选择器(tag)可以直接调用节点名称选择节点元素,节点可以嵌套选择,返回的类型都是bs4.element.Tag对象。

  soup=BeautifulSoup(html_doc, lxml )

  Print(soup.head) #获取头部标签

  Print(soup.p.b) #获取P节点下的B节点

  Print(soup.a.string) #获取A标签下的文本,只获取名字属性获取节点名:

  soup.body.nameattrs属性获取节点属性,也可以直接以字典的形式获取。根据节点类型,返回的结果可能是列表或字符串类型。

  Soup.p.attrs #获取p节点的所有属性

  Soup.p.attrs[class] #获取p节点的class属性

  Soup.p[class] #直接获取p节点的class属性string属性,获取节点元素中包含的文本内容:

  Soup.p.string #获取第一个p节点下文本内容的contents属性获取该节点的直接子节点,以列表的形式返回内容。

  Soup.body.contents #是直接子节点,不包括子节点。获得的children属性也是该节点的直接子节点,但它是作为生成器返回的。

  soup.body.childrendescendants属性获取后代节点并将其返回给生成器。

  soup.body.descendantsparent属性获取父节点,父节点获取祖先节点并将其返回给生成器。

  汤。b .父母

  soup.b.parentsnext_sibling属性返回下一个同级节点,previous_sibling返回上一个同级节点。请注意,换行符也是一个节点,所以有时兄弟节点通常是字符串或空白。

  soup . a . next _兄弟姐妹

  soup . a . previous_sibling next _ sibling和previous _ sibling分别将前面和后面的所有兄弟节点返回给生成器。

  soup . a . next _兄弟姐妹

  soup . a . previous _ siblingsnext _ element和previous_element属性获取下一个或上一个解析的对象。

  soup.a.next_element

  soup . a . previous _ elemen next _ elements和previous_elements的迭代器向前或向后访问文档的解析内容。

  soup.a.next_elements

  soup.a.previous_elements(2)的previous方法选择器由节点属性选择。这种方法速度很快,但是在做比较复杂的选择时不够灵活。好在美汤也为我们提供了一些查询方法,比如fang_all()和find()。

  Find _ all (name,attrs,recursive,text,* * kwargs):查询所有符合条件的元素,其中参数

  Name是指你可以找到所有带名字的标签,可以是过滤器,正则表达式,列表或者True。

  Attrs表示传入的属性,可以通过attrs参数以字典的形式指定,比如常用属性id,attrs={id:123}。由于class属性是python中的关键字,所以查询时需要给类,即class_=element 加下划线,返回的结果是标签类型列表。

  text参数用于匹配节点的文本,传入的形式可以是字符串或正则表达式对象。

  Recurrent表示如果只想搜索直接子节点,可以将该参数设置为false: recursive=flare。

  limit参数可用于限制返回结果的数量,类似于SQL中的limit关键字

  进口re

  从bs4导入BeautifulSoup

  Html _ doc= #下面的例子都是用这个文本内容测试的。

  睡鼠的故事睡鼠的故事

  从前有三个小姐妹;他们的名字是

  埃尔希

  ddd

  拉西和

  蒂莉;

  他们住在井底。

  .

  中国人

  soup=BeautifulSoup(html_doc, lxml )

  打印(类型(汤))

  print(soup . find _ all( span )#标记查找

  Print (soup.find _ all (a ,ID= link 1 )#属性标记过滤

  Print (soup.find _ all (a ,attrs={class: sister , id : link 3 })#多属性

  Print (soup.find _ all (p ,class _= title )#类特殊性,这次传入的参数是**kwargs

  print(soup . find _ all(text=re . pile( Tillie ))#文本过滤

  Print (soup.find _ all (a ,limit=2)) #限制输出数量

  #

  [中文]

  [埃尔西]

  [蒂莉]

  睡鼠的故事

  ]

  [蒂莉]

  [艾尔西,拉西]

  Find (name,attrs,recursive,text,* * kwargs):返回单个元素,即第一个匹配的元素,类型仍然是tag类型。

  与参数find_all()相同

  还有很多其他的查询方法,用法和前面介绍的find_all()方法完全一样,只是查询范围不同,参数相同。

  Find _ parents (name,attrs,recursive,text,* * kwargs)和find _ parents (name,attrs,recursive,text,* * kwargs):前者返回所有祖先节点,后者返回直接父节点。

  Find _ next _ sibling (name,attrs,recursive,text,* * kwargs)和find _ next _ sibling (name,attrs,recursive,text,* * kwargs):在当前标签之后的节点上迭代,前者返回后面所有的兄弟,后者返回第一个兄弟。

  Find _ previous _ sibling (name,attrs,recursive,text,* * kwargs)和find _ previous _ sibling (name,attrs,recursive,text,* * kwargs):迭代当前标签前面的节点,前者返回所有前面的兄弟节点,后者返回第一个前面的兄弟节点。

  Find _ all _ next (name,attrs,recursive,text,* * kwargs)和find _ next (name,attrs,recursive,text,* * kwargs):迭代当前标签后的标签和字符串,前者返回所有符合条件的节点,后者返回第一个符合条件的节点。

  Find_all_previous()和find_previous():迭代当前标签之前的标签和字符串,前者返回该节点之后所有符合条件的节点,后者返回第一个符合条件的节点。

  (3)CSS选择器美汤也提供了CSS选择器。如果你不熟悉多个CSS选择器,请参考http://www.w3school.com.cn/cssref/css_selectors.asp.

  将字符串参数传入。Tag或BeautifulSoup对象的select()方法,可以使用CSS选择器的语法来查找标签:

  在[10]:汤。选择(标题)

  Out[10]:【睡鼠的故事】通过tag标签逐层搜索:

  In [12]: soup.select(body a )

  Out[12]:

  [埃尔西,

  蕾西,

  蒂莉]

  在标签标签标签下查找直接子标签:

  在[13]:汤。选择(“头标题”)

  out[13]:[睡鼠的故事]查找兄弟节点标签:

  In [14]: soup.select(#link1 ~)。姐姐’)

  Out[14]:

  [拉西,

  Tillie]通过CSS类名查找:

  [15]: soup.select(。标题’)

  出【15】:【睡鼠的故事

  ]

  in[16]:soup . select([class ~=title])

  出【16】:【睡鼠的故事

  ]

  按标签id查找:

  in[17]:soup . select(# link 1)

  出[17]:[埃尔西]

  In [18]: soup.select(a#link2 )

  Out[18]: [Lacie]

  找出是否有属性:

  In [20]: soup.select(a[href])

  Out[20]:

  [埃尔西,

  蕾西,

  蒂莉]

  根据属性值查找匹配项:

  in[22]:soup . select( a[href= http://example . com/elsie ])

  出[22]:[埃尔西]

  in[23]:soup . select( a[href= http://example . com/])#匹配值的开头

  Out[23]:

  [埃尔西,

  蕾西,

  蒂莉]

  in[24]:soup . select( a[href $= Tillie ])#匹配值的结尾

  出[24]:[蒂莉]

  In [25]: soup.select (a [href *=。com/el]) #模糊匹配

  出[25]:[埃尔西]

  节点搜索、方法选择器搜索、CSS选择器搜索三种方法的实现基本相似。与其他两种方法相比,标签是最快的搜索方法,但是方法选择器提供了一种更方便、更复杂的搜索方法,更加用户友好。

  (4)标签修改法美汤的强项是文档的搜索功能,修改功能的场景不多。简单介绍一下就好。想了解更多修改方法,请查看美汤官方文档。

  美汤可以改变标签属性的值,添加或删除属性和内容。下面是一些常用的方法。

  在[26]:标记=“百度”

  In [28]: soup=BeautifulSoup(标记, lxml )

  [29]: soup.a.string=“百度”

  在[30]:汤. a

  Out[30]:百度

  #如果节点A下的子节点也将被覆盖。

  Tag.append()方法希望向标记添加内容,就像。Python列表的append()方法:

  在[30]:汤. a

  Out[30]:百度

  In [31]: soup.a.append (once )

  [32]:汤

  Out[32]:百度

  new_tag()方法用于创建一个tag标签。

  In [33]: soup=BeautifulSoup(, lxml )

  In [34]: new _ tag=soup.new _ tag (a ,href= 3358 www.python.org) #创建一个标记,第一个参数必须是标记的名称

  在[35]中:在节点b下添加soup.b.append(new_tag) #

  in[36]:new _ tag . string= python #设置tag的值

  在[37]:汤. b

  Out[37]: python

  其他方法:

  Insert()将元素插入指定位置。

  Inert_before()在当前标签或文本节点之前插入内容。

  Insert_after()在当前标签或文本节点后插入内容

  Clear()移除当前标签的内容。

  Extract()从当前标记中移除文档数,并将其作为方法结果返回。

  Prettify()将美汤的文档数格式化,以Unicode输出。也可以调用标记节点。

  get_text()输出标签中包含的文本内容,包括子孙标签中的内容

  soup.original _编码属性记录了自动识别的编码结果

  from_encoding:参数在创建美丽的声音对象是可以用来指定编码,减少猜测编码的运行速度

  #解析部分文档,可以使用汤汁过滤器类来创建一个内容过滤器,它接受同搜索方法相同的参数

  从bs4进口漂亮的勺子,汤勺

  html_doc=

  睡鼠的故事睡鼠的故事

  从前有三个小姐妹;他们的名字是

  埃尔希

  ddd

  拉西和

  蒂莉;

  他们住在井底。

  .

  中文

  only_a_tags=SoupStrainer(a) #顾虑器

  soup=BeautifulSoup(html_doc, lxml ,parse_only=only_a_tags)

  打印(汤。pretify())

  #

  埃尔希

  拉西

  蒂莉

  #美味的汤异常处理:

  HTMLParser .HTMLParseError:开始标记格式不正确

  HTMLParser .HTMLParseError:错误的结束标记这个两个异常都是解析器引起的,解决方法是安装什么是或者html5lib

  更多内容.

  官方文档:https://www . crummy . com/software/beautiful soup/bs4/doc/

  中文文档:https://www . crummy . com/software/beautiful soup/bs4/doc . zh

  派皮:https://pypi . org/project/beautiful soup 4/

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: