1 4

爬虫


爬虫工作流程可以简单概括为下面四步:
1、发起请求
2、获取响应内容
3、解析内容
4、保存数据
 
请求:
请求方式:常用的有GET POST请求
请求URL
请求头
请求体

响应:
响应状态:状态码
响应头
响应体

常见的解析方式:
直接处理
JSON解析
正则表达式
BeautifulSoup
PyQuery
XPath

库:
urllib:Python内置的HTTP请求库,提供一系列用于操作URL的功能
urllib.request:请求模块

1、参数url:可以是字符串也可以是Request对象。

(1)、url参数为字符串

response = request.urlopen('http://www.baidu.com')
print(response.read())  #返回response对象,可使用read()方法读取  打出的为乱码 下一步使用decode()方法转码
print(response.read().decode('utf-8'))  #前提是已经知道了这个网页是使用utf-8编码的  源码中的head-charset可查看
(2)、url为Request对象
req = request.Request('http://www.baidu.com')
response = request.urlopen(req)    # url参数为request对象
print(response.read().decode('utf-8'))

2、参数data

如果没有设置urlopen()函数的data参数,HTTP请求采用GET方式,也就是我们从服务器获取信息;如果设置data参数,HTTP请求采用POST方式,也就是我们向服务器传递数据。

# 实例:有道翻译
request_URL = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
formdata = {}
formdata['i'] = '翻译'
formdata['smartresult'] = 'dict'
formdata['client'] = 'fanyideskweb'
formdata['doctype'] = 'json'
formdata['version'] = '2.1'
formdata['keyfrom'] = 'fanyi.web'
formdata['action'] = 'FY_BY_REALTIME'
formdata['typoResult'] = 'false'

#data参数有自己的格式,可以使用urllib.parse.urlencode()函数将字符串自动转换
data = parse.urlencode(formdata).encode('utf-8')
response = request.urlopen(request_URL,data)
print(response.read().decode('utf-8'))


urllib.error:可以接收由urllib.request产生的异常,主要是URLerror和HTTPerror两种。
(1) URLerror:主要原因:
a、没有网络连接 b、服务器连接失败 c、找不到指定服务器
req = request.Request('http://www.sfewfyou.com')
try:
    resp = request.urlopen(req)
    print(resp.read().decode('utf-8'))
except error.URLError as e:
    print(e.reason)

输出结果为:

[Errno 8] nodename nor servname provided, or not known

错误原因为 无法找到指定的服务器。

(2)、HTTPerror:是URLError的子类

 

 

 
 

 









posted @ 2018-07-04 23:10  韦木三  阅读(148)  评论(0编辑  收藏  举报