python网页数据抓取(如何使用BeautifulSoup从网页中提取我们需要的数据,你知道吗?)
优采云 发布时间: 2021-09-09 04:05python网页数据抓取(如何使用BeautifulSoup从网页中提取我们需要的数据,你知道吗?)
通过第一部分的练习,我们有了一个正在运行的爬虫。在这一部分,我们将详细介绍如何使用 BeautifulSoup 从网页中提取我们需要的数据。学习的目标是能够使用 BeautifulSoup 从网页中提取任何数据。
HTML 文档和 CSS 选择器
我们知道我们爬回来的网页是由 HTML 和 CSS 组成的,HTML 文档对象模型 (DOM) 将 HTML 文档表示为树状结构。而提取网页特定数据其实就是根据指定的特征匹配文档树,读取数据内容。
Python爬虫入门
内容简介
<p id="content_id">这篇文章会从零开始介绍...
我们已经有一个可运行的爬虫...
</p>
BeautifulSoup 支持大多数 CSS 选择器。您可以使用 CSS 选择器的语法通过在标签或 BeautifulSoup 对象的 .select() 方法中传递字符串参数来查找标签。以上面的HTML为例,下面使用tag、tag+id、tag+class来定位网页元素:
>>> soup = BeautifulSoup(html, "html.parser")
>>> soup.select("body h1")
[内容简介]
>>> soup.select("p#content_id")
[<p id="content_id">这篇文章会从零开始介绍...]
>>> soup.select("p.content_class")
[
我们已经有一个可运行的爬虫...]
</p>
爬虫示例
现在回到我们抢豆瓣书的例子。下面我们来看看如何使用BeautifulSoup从网页中提取书名、封面图片、书籍介绍等。代码如下。感兴趣的读者可以添加代码提取更多内容。
# 从BeautifulSoup对象中提取书名,封面图片和内容简介
def get_web_data(soup):
try:
# 提取书名
elements = soup.select("div#wrapper h1 span")
assert(len(elements) == 1)
print(elements[0].text.strip())
#提取图书的封面图片
elements = soup.select("div#mainpic a.nbg img")
assert(len(elements) == 1)
print(elements[0]["src"])
# 提取图书的内容简介
elements = soup.select("div#link-report span.short div.intro")
if (len(elements) == 1):
print(elements[0].text.strip())
except:
print("ERROR: failed to get data")
提取数据的关键是分析确定网页元素的CSS选择器。幸运的是,浏览器可以帮到我们很多。以Chrome浏览器为例,在打开的网页上右击要提取的数据,在弹出的菜单项中选择勾选元素。如图,我们可以很方便的获取到元素对应的CSS选择器。
好的,现在我们将部分数据提取代码添加到我们的爬虫中。再次运行程序,提取并打印出书名、封面和介绍信息。
if __name__== "__main__":
while True:
url = get_unvisited_url()
if url == None:
break
print("\n\nGET " + url)
# 抓取网页内容
response = requests.get(url)
content = response.content.decode("utf-8")
#print(content)
# 提取页面包含的数据
soup = BeautifulSoup(content, "html.parser")
get_web_data(soup)
# 获取页面包含的链接,并加入未访问的队列
for element in soup.select("a[href]"):
new_url = element["href"].strip()
if re.match("^https://book.douban.com/subject/[0-9]+/$", new_url) == None:
continue
unvisited_urls.append(new_url)
time.sleep(1)
总结
在本节中,我们将详细介绍如何提取网页数据。 BeautifulSoup 有许多其他 API 来访问 html 内容。详情请参考 BeautifulSoup 文档。下一部分,我们将如何存储爬虫运行数据和捕获的各种数据。
来源:/i65523560/