网络爬虫常用技术(下)
Posted mez_Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络爬虫常用技术(下)相关的知识,希望对你有一定的参考价值。
有时在请求一个网页内容时,发现无论通过GET或者是POST以及其它请求方式,都会出现403错误。这种现象多数为服务器拒绝了您的访问,那是因为这些网页为了防止恶意采集信息,所使用的反爬虫设置。此外可以通过模拟浏览器的头部信息来进行访问,这样就能剞劂以上反爬设置问题。下面以requests模块为例介绍头部headers的处理,步骤如下:
(1)通过浏览器的网络监视器查看头部信息,首先通过火狐浏览器打开对应的网页地址,然后按快捷键Ctrl+shift+E打开网络监视器,再刷新当前页面,网络监视器将如下显示:
(2)选中第一条信息,右侧的消息头面板中将显示请求头部信息,然后复制该信息。
(3)实现diamante,首先创建一个需要爬取的url地址,然后创建headers头部信息,在发送请求等待响应,最后打印网页的代码信息。实现代码如下:
在访问一个页面时,如果该网页长时间未响应,系统就会判断该网页超时,所以无法打开网页。下面通过代码来模拟一个网络超时的现象,代码如下:
可能和电脑配置和网速有关,延时设置成0.1竟然能正常显示,所以就把超时时间设置的更小,在指定的timeout秒内服务器未作出响应则视为超时。
下面是未超时的情况:
说起网络异常信息,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.代码如下:
由于上面代码中的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库的安装。
原来安装完bs4自动安装了beautifulsoup4,这样就方便需要,然后我们来验证一下。
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代码的字符串,代码如下:
显示lxml还未安装,我们在terminal进行安装
再次运行:
这是在一个Python文件中,如果将html_doc字符串中的代码保存在index.html文件中,可以通过打开HTML文件的方式对代码进行解析,并且可以通过prettify()方法进行代码的格式化处理,代码如下:
HTML文件如下:
我们看到,正常的把HTML文件中的代码输出。
以上是关于网络爬虫常用技术(下)的主要内容,如果未能解决你的问题,请参考以下文章