beautifulsoup开始使用beautifulsoup


备注

在本节中,我们将讨论Beautiful Soup是什么,它的用途以及如何使用它的简要概述。

Beautiful Soup是一个Python库,它使用您预先安装的html / xml解析器,并将网页/ html / xml转换为由标签,元素,属性和值组成的树。更确切地说,树由四种类型的对象组成,Tag,NavigableString,BeautifulSoup和Comment。然后可以使用从解析器库创建的BeautifulSoup对象的方法/属性“查询”此树。

您的需求:通常,您可能会满足以下需求之一:

  1. 您可能需要解析网页以确定,找到了多少标签,找到每个标签的元素数量及其值。您可能想要更改它们。

  2. 您可能希望确定元素名称和值,以便可以将它们与其他库一起用于网页自动化,例如Selenium

  3. 您可能希望将网页中显示的数据传输/提取为其他格式,例如CSV文件或关系数据库(如SQLite或mysql)。在这种情况下,尽管您将使用其他库来执行传输操作,但库可帮助您了解网页结构的第一步。

  4. 您可能想知道使用某种CSS样式设置了多少个元素以及哪些元素。

Python代码中典型基本用法的顺序

  1. 导入Beautiful Soup库

  2. 使用BeautifulSoup库打开网页或html文本,提及要使用的解析器。此步骤的结果是BeautifulSoup对象。 (注意:提到的这个解析器名称必须已经作为Python pacakges的一部分安装。例如, html.parser ,是一个随Python附带的内置'with-batteries'软件包。你可以安装其他解析器,如lxml或者html5lib 。)

  3. “查询”或使用语法'object.method'搜索BeautifulSoup对象,并将结果获取到集合中,例如Python字典。对于某些方法,输出将是一个简单的值。

  4. 使用上一步中的结果,在其余的Python代码中执行您想要执行的操作。您还可以修改树对象中的元素值或属性值。修改不会影响html代码的来源,但您可以调用输出格式化方法(例如prettify )来从BeautifulSoup对象创建新输出。

常用方法:通常, .find.find_all方法用于搜索树,给出输入参数。

输入参数是:正在搜索的标记名称,属性名称和其他相关参数。这些参数可以表示为:字符串,正则表达式,列表甚至函数。

BeautifulSoup对象的常见用途包括:

  1. 按CSS类搜索
  2. 按超链接地址搜索
  3. 按元素ID搜索,标记
  4. 按属性名称搜索。属性值。

如果您需要使用上述条件的组合过滤树,您还可以编写一个计算结果为true或false的函数,并按该函数进行搜索。

版本

备注包裹名字发布日期
3.X 版本3.2.1;仅限Python 2 beautifulsoup 2012-02-16
4.x版版本4.5.0; Python 2和3 beautifulsoup4 2016年7月20日

一个BeautifulSoup“Hello World”刮痧的例子

from bs4 import BeautifulSoup
import requests

main_url = "https://fr.wikipedia.org/wiki/Hello_world"
req = requests.get(main_url)
soup = BeautifulSoup(req.text, "html.parser")

# Finding the main title tag.
title = soup.find("h1", class_ = "firstHeading")
print title.get_text()

# Finding the mid-titles tags and storing them in a list.
mid_titles = [tag.get_text() for tag in soup.find_all("span", class_ = "mw-headline")]

# Now using css selectors to retrieve the article shortcut links
links_tags = soup.select("li.toclevel-1")
for tag in links_tags:
    print tag.a.get("href")

# Retrieving the side page links by "blocks" and storing them in a dictionary
side_page_blocks = soup.find("div",
                            id = "mw-panel").find_all("div",
                                                      class_ = "portal")
blocks_links = {}
for num, block in enumerate(side_page_blocks):
    blocks_links[num] = [link.get("href") for link in block.find_all("a", href = True)]

print blocks_links[0]
 

输出:

"Hello, World!" program
#Purpose
#History
#Variations
#See_also
#References
#External_links
[u'/wiki/Main_Page', u'/wiki/Portal:Contents', u'/wiki/Portal:Featured_content', u'/wiki/Portal:Current_events', u'/wiki/Special:Random', u'https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en', u'//shop.wikimedia.org']
 

在设置Beautiful Soup时输入您的首选解析器可以避免通常的Warning 声明no parser was explicitely specified

可以使用不同的方法来查找网页树中的元素。

虽然存在少数其他方法,但CSS classesCSS selectors 是在树中查找元素的两种方便方法。

应该注意的是,我们可以通过在搜索时将其属性值设置为True来查找标记。

get_text() 允许我们检索标记中包含的文本。它将其作为单个Unicode字符串返回。 tag.get("attribute") 允许获取标签的属性值。

安装或设置

pip可用于安装BeautifulSoup。要安装BeautifulSoup的第4版,请运行以下命令:

pip install beautifulsoup4
 

请注意,包名称是beautifulsoup4 而不是beautifulsoup ,后者名称代表旧版本,见旧的beautifulsoup