python 爬虫1:发送请求

import socket
import urllib.request
import urllib.parse
import urllib.error

# 一个测试用网址,后面是跟的是http请求方式post或get, 当为post时返回json数据,form内是发送过去数据
url = 'http://httpbin.org/post'
headers = {
    # 伪装使用浏览器,默认为Python-urllib
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36 QIHU 360EE',
    'host': 'httpbin.org'
}
# urllib.request.urlopen()函数的data参数必须是字节流形式,当携带了该参数,请求方式默认为post
data = bytes(urllib.parse.urlencode({'word': 'hello'}), 'utf-8')
try:
    req = urllib.request.Request(url=url, data=data, headers=headers, method='POST')
    response = urllib.request.urlopen(req)
except urllib.error.URLError as e:
    if isinstance(e.reason, socket.timeout):
        print('timeout')
    else:
        print(e.reason)
    exit(100)
else:
    print(type(response))
    if response.status == 200:        # 当为200是表示请求等到正确响应
        print(response.getheaders())  # 得到响应头
        print(type(response.getheaders()))
        print(response.getheader('Server'))
        print(response.read().decode('utf-8'))  # 得到响应源码

class urllib. request. Request ( url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
第三个参数 headers 是一个字典,它就是请求头,我们可以在构造请求时通过 headers 参数直 接构造,也可以通过调用请求实例的 add_header()方法添加。
第四个参数 origin_req_host 指的是请求方的 host名称或者 IP 地址。
第五个参数unveri干iable表示这个请求是否是无法验证的,默认是 False,意思就是说用户没 有足够权限来选择接收这个请求的结果。 例如,我们请求一个 HTML 文档中的图片,但是我 们没有向动抓取图像的权限,这时 unverifiable 的值就是 True。

你可能感兴趣的:(python爬虫)