简单获取网页源码
获取一个get请求:
import urllib.request
res = urllib.request.urlopen("http://www.baidu.com") #响应对象
print(res.read().decode("utf-8"))
获取一个post请求:(可以通过httpbin.org来进行测试)
post请求需要发送表单数据,要使用bytes转成二进制数据包,对于键值对需要用urllib.parse解析器进行解析
import urllib.parse
import urllib.request
data = bytes(urllib.parse.urlencode({"hello":"word"}),encoding='utf-8')
res = urllib.request.urlopen("http://httpbin.org/host",data=data) #响应对象
print(res.read().decode('utf-8'))
超时处理:
可以加上循环用来记录爬取失败的网页,在循环结束后再进行针对性的观察这些出错的网页
import urllib.request
try:
response = urllib.request.urlopen("http://httpbin.org/get",timeout=0.01) #响应对象
print(response.read().decode("utf-8"))
except urllib.error.URLError as e:
print("time out")
urllib.request.Request封装方法:(适用于有爬虫协议的网站)
该封装方法可以添加headers伪装浏览器,还可以通过data传输数据,以及使用method参数选择请求方法:GET/POST
import urllib.request
url = "http://httpbin.org/post"
headers = {'User-Agent' : '......'}
data = bytes(urllib.parse.urlencode({'hello':'word'}),encoding='utf-8')
req = urllib.request.Request(url=url,data=data,headers=headers,method="POST") # 这只是一个请求对象
response = urllib.request.urlopen(req)
print(response.read().decode('utf-8'))