有时在请求一个网页内容时,发现无论通过GET或者是POST以及其它请求方式,都会出现403错误。这种现象多数为服务器拒绝了您的访问,那是因为这些网页为了防止恶意采集信息,所使用的反爬虫设置。此外可以通过模拟浏览器的头部信息来进行访问,这样就能剞劂以上反爬设置问题。下面以requests模块为例介绍头部headers的处理,步骤如下:
(1)通过浏览器的网络监视器查看头部信息,首先通过火狐浏览器打开对应的网页地址,然后按快捷键Ctrl+shift+E打开网络监视器,再刷新当前页面,网络监视器将如下显示:

网络爬虫常用技术(下)_常用工具

(2)选中第一条信息,右侧的消息头面板中将显示请求头部信息,然后复制该信息。

网络爬虫常用技术(下)_常用工具_02

 

(3)实现diamante,首先创建一个需要爬取的url地址,然后创建headers头部信息,在发送请求等待响应,最后打印网页的代码信息。实现代码如下:

网络爬虫常用技术(下)_网络爬虫_03

在访问一个页面时,如果该网页长时间未响应,系统就会判断该网页超时,所以无法打开网页。下面通过代码来模拟一个网络超时的现象,代码如下:

网络爬虫常用技术(下)_常用工具_04

 可能和电脑配置和网速有关,延时设置成0.1竟然能正常显示,所以就把超时时间设置的更小,在指定的timeout秒内服务器未作出响应则视为超时。

下面是未超时的情况:

网络爬虫常用技术(下)_常用工具_05

说起网络异常信息,requests模块同样提供了3中常见的网络异常类,代码如下:

import  requests
from requests.exceptions import ReadTimeout,HTTPError,RequestException
for a in range(0,50):
try:
response=requests.get('https://www.baidu.com/',timeout=0.5)
print(response.status_code)
except ReadTimeout: #超时异常
print('timeout')
except HTTPError: #HTTP异常
print('httperror')
except RequestException:
print('reqerror') #请求异常

 在爬取网页的过程中,经常会出现不久前可以爬取的网页现在无法爬取了,这是因为您的IP被爬取网站服务器屏蔽了。此时代理服务可以为您解决这一麻烦,设置代理是,首先需要找到代理地址。如122.114.31.177,对应的端口号为808,完整的格式为122.114.31.177:808.代码如下:

网络爬虫常用技术(下)_常用工具_06

由于上面代码中的IP是免费的,所以使用的时间不固定,超出使用的时间范围内该地址将失效。仅供参考。

HTML解析之BeautifulSoup

 BeautifulSoup是一个用于从HTML和xml文件中提取数据的Python库。BeautifulSoup提供一些简单的函数用来处理导航、搜索、修改分析树等功能。BeautifulSoup模块中的查找提取功能非常强大,而且非常便捷,它通常可以节省程序员数小时或数天的工作时间。

BeautifulSoup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。用户不需要考虑编码方式,痴肥文档没有指定一个编码方式,这是,BeautifulSoup就不能自动识别编码方式了。然后,用户仅仅需要说明一下原式编码方式就可以了。

BeautifulSoup 3已经停止开发,目前使用的是BeautifulSoup 4,不过它已经被移植到bs4当中了,所以在导入时需要from bs4,然后再导入BeautifulSoup。安装BeautifulSoup有3中方式:

1.如果你使用的是最新版本的Debian或Ubuntu Linux,这可以使用系统软件包管理器安装BeautifulSoup。安装命令为:apt-get install python-bs4.

2.BeautifulSoup 4是通过Pypi发布的,可以通过easy_install或pip来安装。包名是beautifulsoup 4,它可以兼容python 2和Python 3.安装命令为:easy_install beautifulsoup4或者是pip install beautifulsoup 4。注:在使用BeautifulSoup4之前需要先通过命令pip install bs4进行bs4库的安装。

网络爬虫常用技术(下)_网络爬虫_07

 原来安装完bs4自动安装了beautifulsoup4,这样就方便需要,然后我们来验证一下。

网络爬虫常用技术(下)_入门_08

import没有报错说明已经成功安装。 

3.如果当前的BeautifulSoup不是你想要的版本,可以通过下载源码的方式进行安装,源码的下载地址为https://www.crummy.com/software/BeautifulSoup/bs4/download/,然后再控制台中打开指定的路径,输入命令python setup.py install即可。

beautifulsoup支持Python标准库中包含的HTML解析器,但他也支持许多第三方Python解析器,其中包含lxml解析器。根据不同的操作系统,用户可以使用以下命令安装lxml。

【1】apt-get install python-lxml

【2】easy_install lxml

【3】pip install lxml

另一个解析器是html5lib,他是一个用于解析HTML的Python库,按照web浏览器的方式解析HTML。用户可以使用以下命令安装html5lib

【1】apt-get install python-html5lib

【2】easy_install html5lib

【3】pip install html5lib

下面来比较以下各个解析器的优缺点

解析器

用法

优点

缺点

Python标准库

BeautifulSoup(markup,"html.parser")

Python标准库执行速度适中

在Python2.7.3或3.2.2之前的版本中文档容错能力差

lxml的HTML解析器

BeautifulSoup(markup,"lxml")

速度快,文档容错能力强

需要安装C语言库

lxml的XML解析器

BeautifulSoup(markup,"lxml-xml")

BeautifulSoup(markup,"xml")

速度快,位移支持xml的解析器

需要安装C语言库

html5lib

BeautifulSoup(markup,"html5lib")

最好的容错性,以浏览器的方式解析文档,生成HTML5格式文档

速度慢,不依赖外部扩展

BeautifulSoup安装完成以后,下面将介绍如何通过BeautifulSoup库进行HTML的解析工作,步骤如下:

(1)导入bs4库,然后创建一个模拟HTML代码的字符串,代码如下:

网络爬虫常用技术(下)_xml_09

显示lxml还未安装,我们在terminal进行安装

网络爬虫常用技术(下)_python_10

 

再次运行:

网络爬虫常用技术(下)_xml_11

 

 这是在一个Python文件中,如果将html_doc字符串中的代码保存在index.html文件中,可以通过打开HTML文件的方式对代码进行解析,并且可以通过prettify()方法进行代码的格式化处理,代码如下:

网络爬虫常用技术(下)_网络爬虫_12

HTML文件如下:

网络爬虫常用技术(下)_python_13

我们看到,正常的把HTML文件中的代码输出。