如何使用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 内容
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 内容
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抓取网页的内容,如果您发现任何不正确的内容,或者您想分享有关上述主题的更多信息,请发表评论。这是一个如何在 Python 中创建网络爬虫的简单示例。从这里,您可以尝试废弃您选择的任何其他网站。