爬虫学习-urllib.request信息发送

版权声明:版权所有,转载请说明出处。 https://blog.csdn.net/matlab001/article/details/84065807

爬虫信息发送是一个比较复杂的过程,接下来就简单学习一下信息发送的几个简单实例,接下来我们主要使用的是urlopen API:

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

url请求网址,

timeout 响应超时时间

1. 基础的信息发送与获取

#导入包
import urllib.request
#打开一个网址,并将返回信息放置到response中
response = urllib.request.urlopen('http://www.baidu.com')
#几个重要信息的返回打印测试,其中status是状态,read()是返回体,但是需要解码才可以。
print(response.reason)
print(response.status)
print(response.getheaders())
print(response.getheader('Content-Type'))
print(response.read().decode('utf-8'))

2. 使用Request来构建复杂信息发送,API描述如下:

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

url 是请求的网址,

data 可空 可以用urllib.parse模块里的urlencode()编码 ,

headers 可以直接构造一个字典类型传入,也可以使用add_header()方法添加。

origin_req_host是请求方的ip或者host名称

method请求使用的方法 GET、POST等

第一个是之前写过的一个使用urlopen方法不能加header方法只能加data的一个例子

#导入需要的包
import urllib.request as req
import  urllib.parse as pa
import  json as js
#要访问的网址
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
#data信息字典
content = input('请输入要翻译的内容:')
data_dict = {}
data_dict['i'] = content
data_dict['keyfrom'] =  'fanyi.web'
data_dict['doctype'] = 'json'
#data信息需要encode之后才可以
data = pa.urlencode(data_dict).encode('utf-8')
#打开网址,urlopen方法是不能传输headers的,它没有这个参数,只有data字段
response = req.urlopen(url,data= data)
#获取信息
html = response.read().decode('utf-8')
#用json转换收到的内容
tar = js.loads(html)
#打印输出
print('翻译后的结果为:%s' %tar['translateResult'][0][0]['tgt'])

下面这个例子就使用Request加入了头信息

#导入需要的包
import urllib.request as req
import  urllib.parse as pa
import  json as js
#要访问的网址
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
#头信息字典
headers = {}
headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
#data信息字典
content = input('请输入要翻译的内容:')
data_dict = {}
data_dict['i'] = content
data_dict['keyfrom'] =  'fanyi.web'
data_dict['doctype'] = 'json'
#data信息需要encode之后才可以
data = pa.urlencode(data_dict).encode('utf-8')
#这个API的参数就有headers了
re = req.Request(url=url, data=data, headers=headers, method='POST')
#打开网址
response = req.urlopen(re)
#获取信息
html = response.read().decode('utf-8')
#用json转换收到的内容
tar = js.loads(html)
#打印输出
print('翻译后的结果为:%s' %tar['translateResult'][0][0]['tgt'])

3.cookie的获取

cookie的获取使用的是CookieJar对象来获取,在之前需要先构建一个HTTPCookieProcessor的handler对象,实例如下:

import http.cookiejar as cook
import urllib.request as req

#首先生成一个cookie对象
cookie = cook.CookieJar()
#接下来构建一个HTTPCookieProcessor的handler
handler = req.HTTPCookieProcessor(cookie)
#最后构建一个opener
opener = req.build_opener(handler)
#使用opener打开网址
response = opener.open('http://www.baidu.com')
#循环输出相关cookie
for item in cookie:
    print(item.name + "=" + item.value)

如果要把cookie的值进行输出的话可以使用MozillaCookieJar或者LWPCookieJar的对象进行保存输出,这里就不在举例了。

猜你喜欢

转载自blog.csdn.net/matlab001/article/details/84065807
今日推荐