python网页数据抓取(如何使用BeautifulSoup从网页中提取我们需要的数据,你知道吗?)

优采云 发布时间: 2021-09-09 04:05

  python网页数据抓取(如何使用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/

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线