导言
Beautiful Soup是一个强大的Python库,用于从XML和HTML文件中提取数据。它有助于格式化和组织混乱的XML/HTML结构,以轻松遍历Python对象。只需几行代码,您就可以轻松地从大多数网站或文件中提取信息。这篇博客文章几乎不会触及BeautifulSoup的表面,一定要访问这篇文章底部的参考链接,了解更多信息。
安装BeautifulSoup
如果您使用的是基于Debian的Linux发行版,则可以通过执行以下命令来安装BeautifulSoup。
$ apt-get install python-bs4
如果您无法使用Debian系统包管理器,您可以使用easy_ install或pip安装BeautifulSoup。
$ easy_install beautifulsoup4
$ pip安装beautifulsoup4
如果您无法使用以下任何一种方法进行安装,则可以使用源代码tarball并使用setup.py进行安装。
$ python setup.py安装
要了解有关安装或可能发生的任何错误的更多信息,请访问BeautifulSoup网站。
你的第一个汤对象
soup对象是BeautifulSoup库中使用最多的对象,因为它将容纳您将从中查询信息的整个HTML/XML结构。创建此对象需要两行代码。
html = urlopen(” http://www.infragistics.com “)
soup = BeautifulSoup(html.read(), ‘html.parser’)
更进一步,我们将使用soup对象打印出页面H1标签。
从urllib导入url打开
从bs4进口BeautifulSoup
html = urlopen(” http://www.infragistics.com “)
soup = BeautifulSoup(html.read(), ‘html.parser’)
打印soup.h1.get _text()
输出:
经验事项
查询Soup对象
BeautifulSoup有多种导航或查询文档结构的方法。
- 查找 (标签,属性,递归,文本,关键字)
- findAll (标签,属性,递归,文本,限制,关键字)
- 导航使用标记
查找方法
此方法查看文档并检索与提供的筛选器匹配的第一个单个项。如果该方法找不到您搜索的内容,则返回None。一个例子是你想搜索页面的标题。
page_title = soup.find("title")
page_title现在变量包含包装在其标题标记中的页面标题。另一个例子是,如果你想在页面上搜索一个特定的标签id。
element_result = soup.find(id = "theid")
变量element _result现在包含与id查询 “theid” 匹配的HTML元素。
findAll方法
此方法查看标记的后代,并检索与提供的筛选器匹配的所有后代。如果方法找不到你搜索的空列表返回。一个例子和最简单的用法是你想搜索页面上的所有超链接。
结果 = soup.findAll (“a”)
变量results现在包含页面上找到的所有超链接的列表。另一个例子可能是你想找到一个页面上的所有超链接,但它们使用的是一个特定的类名。
结果 = soup.findAll (“a”,“突出显示”)
变量results现在包含在页面上找到的引用类名 “突出显示” 的所有超链接的列表。搜索标签及其id非常简单,可以通过多种方式完成,下面我将演示两种不同的方式。
结果 = soup.findAll (“a”,id = “他们”)
结果 = soup.findAll(id = “theid”)
导航使用标记
要理解使用标签的导航是如何工作的,想象一下HTML结构像一棵树一样被映射。
- html
- -> 头部
- -> 标题
- -> meta
- -> 链接
- -> 脚本
- 车身
- -> h1
- -> div.content
- 等等…
如果我们想打印页面标题,则使用此引用以及页面的源代码,代码将如下所示。
打印soup.head.title
输出:
<title> 开发人员控件和设计工具-.Net组件和控件 </title>
刮一个网站
使用在上一节中学到的知识,我们现在将应用这些知识从城市词典页面中抓取定义。Python脚本查找以逗号分隔的命令行参数以进行定义。当从页面中抓取定义时,我们使用BeautifulSoup在页面中搜索具有类名 “含义” 的div标签。
导入sys,getopt
从urllib导入url打开
从bs4进口BeautifulSoup
def main(argv):
字 = []
rootUrl = ‘http:// www.urbandictionary.com/define.php?term=’
usageText = sys.argv[0] ‘ -w <word1 >,< word2 >,< word3>…..’
尝试:
if (len(argv) = = 0):
打印usageText
系统出口 (2)
选项,args = getopt.getopt(argv,”w:v”)
getopt.GetoptError除外:
打印usageText
系统出口 (2)
为opt,arg为opts:
if opt = = “-w”:
words = set(arg.split(“,”))
for word in words:
wordUrl = rootUrl单词
html = urlopen(wordUrl)
soup = BeautifulSoup(html.read(), ‘html.parser’)
含义 = soup.findAll (“div”,“含义”)
print word “–” 的意思是 [0].get_text().replace(“\ n”,””)
如果 __name__ = = “__main__”:
main(sys.argv[1:])
输出:
python urbandict.py -w编程
编程-将咖啡因转化为错误消息的艺术。
参考文献
下面的参考链接与这篇博客文章有关。如果您对使用BeautifulSoup的更多信息感兴趣,那么Web Scraping与Python的书是一个很好的资源。
easy_install: 简单安装_安装
pip: 安装pip
托里·贝茨 /p