一、爬虫基础

1.爬虫概念

网络爬虫(又称为网页蜘蛛),是一种按照一定的规则,自动地抓取万维网信息的程序或脚本。用爬虫最大的好出是批量且自动化得获取和处理信息。对于宏观或微观的情况都可以多一个侧面去了解;

2.urllib库

urllib是python内置的HTTP请求库,旗下有4个常用的模块库:

urllib.request 请求模块

urllib.error 异常处理模块

urllib.parse url解析模块

urllib.robotparser robots.txt解析模块

3.urllib常用函数

接下来我们要具体介绍urllib模块常用的4个函数方法:

3.1  urllib.request.urlopen(url,data,timeout) 创建一个表示远程URL的类文件对象,然后像本地文件一样操作这个类文件对象来获取远程数据;

urlopen返回对象提供方法:

read(),readline(),readlines(),fileno(),close():对HTTPResponse类型数据进行操作。

info():返回HTTPResponse对象,表示远程服务器返回的头信息。

getcode():返回http状态码。

geturl():返回请求的url。

基于python网络爬虫 基于python的网络爬虫_基于python网络爬虫

3.2  urllib.parse.urlencode(dict) 将dict或者包含两个元素的元组列表转换成url参数。

例如:字典{'name':'dark-bull','age':200}将被转换为‘name=dark-bull&age=200’

基于python网络爬虫 基于python的网络爬虫_爬虫_02

基于python网络爬虫 基于python的网络爬虫_爬虫_03

3.3  urllib.request.ProxyHandler(dict) 可以讲dict字典里的ip当作代理进行设置。

网站对某个ip做了限制、封锁时,可以用该方法当成代理去设置

基于python网络爬虫 基于python的网络爬虫_python_04

通过代理设置一个http的请求;

3.4 urllib.parse.urlparse(urlstring,scheme='',allow_fragments=True) URL解析函数的重点是将URL字符串拆分为其组件,或者将URL组件合为一个URL字符串。

基于python网络爬虫 基于python的网络爬虫_数据_05

3.5  urllib.request.urlretrieve(url,filename=None,reporthook=None,data=None)

rulretrieve()方法直接将远程数据下载到本地。

参数url 指定url请求的地址

参数filename指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据)

参数reporthook是一个回调函数,当连接上服务器,以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。

参数data指post到服务器的数据,该方法返回一个包含两个元素的(filename,headers)元组,filename表示保存到本地的路径,header表示服务器的响应头。

基于python网络爬虫 基于python的网络爬虫_数据_06

基于python网络爬虫 基于python的网络爬虫_python_07

基于python网络爬虫 基于python的网络爬虫_python_08

3.6  urllib.request.Request(url,data=None,headers={},origin_req_host=None,unverifiable=False,method=None)

常用参数:

url:访问的地址

data:此参数为可选字段,其中传递的参数需要转为bytes,如果是字典我们只需要通过urllib.parse.urlencode转换即可:

headers:http相应headers传递的信息,构造方法:headers参数传递,通过调用Request对象的 add_header()方法来添加请求头。

(python3.x爬虫基础---http headers详解,可参考此文章。)

基于python网络爬虫 基于python的网络爬虫_json_09

3.7  urllib.request.HTTPCookieProcessor()

网站中通过cookie进行判断权限是很常见的,那么我们可以通过urllib.request.HTTPCookieProcesor(cookie)来操作cookie。使用Cookie和使用代理IP一样,也需要创建一个自己的opener。在HTTP包中,提供了cookiejar模块,用于提供对Cookie的支持。http.cookiejar功能强大,我们可以利用本模块的CookieJar类的对象来捕获cookie并在后续链接请求时重新发送,比如可以实现模拟登陆功能,该模块主要的对象有cookieJar、FileCookieJar、MozillCookieJar、LWOCookieJar。

用该函数模拟用户登录的cookie

基于python网络爬虫 基于python的网络爬虫_基于python网络爬虫_10

二、urllib异常处理

当抓取某个网站,出现超时异常;

基于python网络爬虫 基于python的网络爬虫_数据_11

当出现超时脚本结果中不要出现这些错误信息,如何改进呢?我们导入socket包,用try语句捕捉异常数据进行处理;

基于python网络爬虫 基于python的网络爬虫_数据_12

三、python爬虫之requests库

requests 是python实现的简单易用的HTTP库,使用起来比urllib简洁很多;

1.requests常用函数:

requests.get('http://httpbin.org/get')

requests.post('http://httpbin.org/post')

requests.put('http://httpbin.org/put')

requests.delete('http://httpbin.org/delete')

requests.head('http://httpbin.org/head')

requests.options('http://httpbin.org/options')

基于python网络爬虫 基于python的网络爬虫_数据_13

其他方法同上

2.requests返回对象的属性和函数

response.content   返回二进制内容(比如音频)

response.text  返回文本内容

response.status_code  返回请求的状态码

response.headers   返回请求的头信息

response.cookies   获取cookie信息

response.json()   返回json编码信息

基于python网络爬虫 基于python的网络爬虫_爬虫_14

基于python网络爬虫 基于python的网络爬虫_爬虫_15