如何使用BeautifulSoup抓取网页

如何使用BeautifulSoup抓取网页

如何使用BeautifulSoup抓取网页

如何使用BeautifulSoup抓取网页

  从网站中提取数据主要有两种方式:

  • 使用网站的 API(如果存在)。例如,Facebook 有 Facebook Graph API,它允许检索发布在 Facebook 上的数据。
  • 访问网页的 HTML 并从中提取有用的信息/数据。这种技术称为网络抓取或网络收集或网络数据提取。

  本文晓得博客为你介绍如何使用BeautifulSoup抓取网页的步骤。

使用BeautifulSoup抓取网页方法

  要使用BeautifulSoup抓取网页的内容,首先是向要访问的网页的 URL 发送 HTTP 请求。服务器通过返回网页的 HTML 内容来响应请求。对于此任务,我们将使用第三方 HTTP 库来处理 Python 请求。

  一旦我们访问了 HTML 内容,我们就剩下解析数据的任务,需要一个可以创建 HTML 数据的嵌套/树结构的解析器。然后,需要做的就是导航和搜索我们创建的解析树,即树遍历。对于此任务,我们将使用另一个第三方 Python 库Beautiful Soup。它是一个 Python 库,用于从 HTML 和 XML 文件中提取数据。

1、安装所需的第三方库
  • 在 python 中安装外部库的最简单方法是使用 pip。用于安装和管理用 Python 编写的软件包。需要安装以下第三方:
pip install requests
pip install html5lib
pip install bs4
2、从网页访问 HTML 内容
从网页访问HTML内容
import requests
URL = "https://www.pythonthree.com/python_basic/beautiful-soup-tutorial/"
r = requests.get(URL)
print(r.content)

  让我们试着理解这段代码。

  • 首先导入请求库。
  • 然后,指定要抓取的网页的 URL。
  • 向指定的 URL 发送 HTTP 请求,并将来自服务器的响应保存在名为 r 的响应对象中。
  • 现在,打印 r.content 以获取网页的原始 HTML 内容。它是“字符串”类型。
3、解析 HTML 内容
使用Beautifulsoup解析HTML内容
import requests
from bs4 import BeautifulSoup


URL = "https://www.pythonthree.com/python_basic/beautiful-soup-tutorial/"
r = requests.get(URL)
soup = BeautifulSoup(r.content, 'html5lib')
print(soup.prettify())

  BeautifulSoup 库的一个真正好处是它建立在 HTML 解析库(如 html5lib、lxml、html.parser 等)之上。因此可以同时创建 BeautifulSoup 对象和指定解析器库。

在上面的例子中,

soup = BeautifulSoup(r.content, 'html5lib')

  我们通过传递两个参数来创建一个 BeautifulSoup 对象:

  • r.content:它是原始 HTML 内容。
  • html5lib  :指定我们要使用的 HTML 解析器。

  现在打印soup.prettify() 它给出了从原始HTML 内容创建的解析树的可视化表示。

4、搜索和导航解析树

  现在,我们想从 HTML 内容中提取一些有用的数据。汤对象包含可以通过编程方式提取的嵌套结构中的所有数据。在我们的示例中,我们正在抓取一个包含一些引号的网页。因此,我们想创建一个程序来保存这些报价(以及有关它们的所有相关信息)。

#Python program to scrape website
#and save quotes from website
import requests
from bs4 import BeautifulSoup
import csv

URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL)

soup = BeautifulSoup(r.content, 'html5lib')

quotes=[] # a list to store quotes

table = soup.find('div', attrs = {'id':'all_quotes'})

for row in table.findAll('div',
	attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}):
	quote = {}
	quote['theme'] = row.h5.text
	quote['url'] = row.a['href']
	quote['img'] = row.img['src']
	quote['lines'] = row.img['alt'].split(" #")[0]
	quote['author'] = row.img['alt'].split(" #")[1]
	quotes.append(quote)

filename = 'quotes.csv'
with open(filename, 'w', newline='') as f:
	w = csv.DictWriter(f,['theme','url','img','lines','author'])
	w.writeheader()
	for quote in quotes:
		w.writerow(quote)

  在继续之前,我们建议您浏览我们使用soup.prettify() 方法打印的网页的HTML 内容,并尝试找到一种模式或一种导航到引号的方法。

使用BeautifulSoup抓取网页效果

总结

  以上是晓得博客为你介绍的如何使用BeautifulSoup抓取网页的内容,如果您发现任何不正确的内容,或者您​​想分享有关上述主题的更多信息,请发表评论。这是一个如何在 Python 中创建网络爬虫的简单示例。从这里,您可以尝试废弃您选择的任何其他网站。

  推荐:零基础如何开始学习Python

  推荐:Beautiful Soup教程


晓得博客,版权所有丨如未注明,均为原创
晓得博客 » 如何使用BeautifulSoup抓取网页

转载请保留链接:https://www.pythonthree.com/use-beautifulsoup-to-crawl-web-pages/

滚动至顶部