python爬虫之异常捕获及标签过滤详解

  • Post category:Python

Python爬虫之异常捕获及标签过滤详解

在进行Python爬虫时,经常会遇到一些不可预知的异常情况。为了保障爬虫的稳定性,我们需要加入一些异常捕获的机制。此外,网页的HTML代码通常非常复杂,其中还包含着众多无用的标签。为了提高效率,我们需要对网页中的标签进行过滤,只提取出我们需要的内容。本文将详细讲解Python爬虫中的异常捕获和标签过滤。

异常捕获

在爬取网页的过程中,很可能会出现一些不可预知的情况,比如无法访问网页、网页响应时间过长等。这时我们需要加入相应的异常处理机制,使得爬虫可以及时做出应对。

try:
    response = requests.get(url, headers=headers, timeout=10)
    response.raise_for_status()  # 当请求失败时抛出异常
    response.encoding = response.apparent_encoding
    return response.text
except requests.RequestException as e:
    print(e)
    return None

在上面的代码中,我们使用了一个try…except语句块,将待爬取的网址进行封装。当requests.get()方法返回异常时,我们就能捕获这个异常并进行相应的处理。同时,我们还可以使用raise_for_status()方法抛出http状态码异常,保证请求能够顺利完成。

标签过滤

网页中通常包含许多我们不需要的标签,如

标签、标签等。我们需要对这些标签进行过滤,只提取出我们关心的内容。

在Python中,我们可以使用beautifulsoup4库进行标签过滤。该库可以将HTML页面解析成树形结构,便于我们找到并提取所需数据。下面是一个简单的例子:

from bs4 import BeautifulSoup

html = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""

soup = BeautifulSoup(html, 'html.parser')
print(soup.prettify())
print(soup.title.string)  # 输出标题
print(soup.a.string)  # 输出第一个链接文本

在上面的代码中,我们首先定义了一个HTML代码文本,然后使用BeautifulSoup()函数将HTML页面解析为一个BeautifulSoup对象。在BeautifulSoup对象上可以使用各种方法查找、遍历HTML标签,获取所需的数据。在上面的例子中,我们使用soup.title.string输出了标题,使用soup.a.string输出了第一个链接的文本内容。

另外,可以使用css选择器来针对某种标签进行过滤。

from bs4 import BeautifulSoup

html = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""

soup = BeautifulSoup(html, 'html.parser')
print(soup.select('.title'))  # 输出class为"title"的标签内容

在上面的代码中,我们使用了select()方法,查找class为”title”的标签内容。

综上所述,异常捕获和标签过滤是爬虫编写中必不可少的部分。通过以上的代码示例,相信你已经对这两个知识点有了初步的了解。