爬虫抓取网页数据(爬取网站的常见方法:下载网页的安全方法和方法)
优采云 发布时间: 2021-12-14 05:29爬虫抓取网页数据(爬取网站的常见方法:下载网页的安全方法和方法)
为了抓取网站,我们首先需要下载收录感兴趣数据的网页。这个过程一般称为“爬行”。爬取一个网站的方法有很多种,哪种方法更合适取决于目标网站的结构。在本章中,我们将首先讨论如何安全地下载网页,然后我们将介绍以下3种常见的爬取网站的方法:
下载页面
要抓取网页,我们首先需要下载它。下面的示例脚本使用 python 的 urllib2 模块来下载 URL。
import urllib2
def download(url):
return urllib2.urlopen(url).read()
当传入 URL 参数时,该函数将下载网页并返回其 HTML。但是这段代码有一个问题,就是当我们当前在网页上时,可能会遇到一些不可控的错误,比如请求的页面可能不存在。此时urllib2会抛出异常然后退出脚本。为了安全起见,下面给出了一个更强大的版本来捕获这些异常。
import urllib2
def download(url)
print("Download: ",url)
try:
html = urllib2.urlopen(url).read()
except urllib2.URLError as e:
print("Download error: ",e.reason)
html = None
return html
现在,当发生下载错误时,该函数可以捕获异常并返回 None。
重新下载
下载过程中遇到的错误往往是暂时的,比如服务器过载时返回的503服务不可用错误。对于此类错误,我们可以尝试重新下载,因为现在可能已解决此服务器问题。但是,我们不需要针对所有错误再次尝试下载。如果服务器返回 404 not found 错误,则说明该网页当前不存在,同样的请求如果再次尝试相同的请求,一般不会产生不同的结果。
工程间任务组(Inter Engineering Task Force)定义了一个完整的 HTTP 错误列表。有关详细信息,请参阅此文档。我们可以理解为请求出现问题时出现4XX错误,服务器出现问题时出现5XX错误。所以,我们只需要确保下载函数在出现 5XX 错误时重试下载即可。下面是支持重试下载功能的新版本代码。
<p>#python2
import urllib2
def download(url, num_retries=2):
print \'Download:\',url
try:
html = urllib2.urlopen(url).read()
except urllib2.URLError as e:
print(\'Download error: \',e.reason)
html = None
if num_retries > 0:
if hasattr(e, \'code\') and 500 0 and 500