爬虫
爬虫工作流程可以简单概括为下面四步:
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的子类