网站建设合同】,个人网页制作成品欣赏,江苏省城乡和住房建设厅网站,外卖网站那家做的好我们在使用python爬虫时#xff0c;需要模拟发起网络请求#xff0c;主要用到的库有requests库和python内置的urllib库#xff0c;一般建议使用requests#xff0c;它是对urllib的再次封装#xff0c;它们使用的主要区别#xff1a; requests可以直接构建常用的get和post…我们在使用python爬虫时需要模拟发起网络请求主要用到的库有requests库和python内置的urllib库一般建议使用requests它是对urllib的再次封装它们使用的主要区别 requests可以直接构建常用的get和post请求并发起urllib一般要先构建get或者post请求然后再发起请求。
import requestsResponse_get requests.get(url, paramsNone, **kwargs)
Response_post requests.post(url, dataNone, jsonNone, **kwargs)
上面请求后得到的是requests.models.Response对象需要处理后才能得到我们需要的信息 Response_get.text 得到的是str类型 Response_get.content 得到的是bytes类型需要进行解码Response_get.content.decode(),相当于Response_get.text Response_get.json() 得到的是JSON数据类型
一般我们最简单的get请求是requests.get(url)但是我们可以对请求进行定制比如requests.get(url,headersheaders) headers里面可以定制User-Agent和cookie 简单的post请求是requests.post(url),我们也可以requests.post(url,data)其中data可以是列表字典JSON等类型
import urllib.requestreq urllib.request.Request(self, url, dataNone, headers{},origin_req_hostNone,unverifiableFalse,methodNone)
Response_request urllib.request.urlopen(req)
Response urllib.request.urlopen(url, dataNone, timeout1, cafileNone, capathNone, cadefaultFalse, contextNone)
urllib.request 模块提供了最基本的构造 HTTP 请求的方法利用它可以模拟浏览器的一个请求发起过程。 # 同时它还带有处理 authenticaton 授权验证 redirections 重定向) cookies (浏览器Cookies以及其它内容。 # context 参数它必须是 ssl.SSLContext 类型用来指定 SSL 设置。cafile 和 capath 两个参数是指定CA证书和它的路径这个在请求 HTTPS 链接时会有用。 # cadefault 参数现在已经弃用了默认为 False 。 # 它是一个 HTTPResposne 类型的对象它主要包含的方法有 read() 、 readinto() 、getheader(name) 、 getheaders() 、 fileno() 等函数 # 和 msg 、 version 、 status 、 reason 、 debuglevel 、 closed 等属性。 得到这个对象之后赋值为 response # 然后就可以用 response 调用这些方法和属性得到返回结果的一系列信息。 # 例如 response.read() 就可以得到返回的网页内容 response.status 就可以得到返回结果的状态码如200代表请求成功404代表网页未找到等。
简单的get请求是urllib.request.urlopen(url)其中url可以是一个链接也可以是一个请求 所以我们定制请求头需要通过urllib.request.Request(url,headersheaders)进行定制然后当成url传入到request.urlopen()
下面是两个库的简单使用方法
import requests
import urllib.requesturl http://fanyi.youdao.com/translate?smartresultdictsmartresultrule
api http://open.iciba.com/dsapi/
headers {User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0}
form_data {i: word,from: AUTO,to: AUTO,smartresult: dict,doctype: json,version: 2.1,keyfrom: fanyi.web,action: FY_BY_REALTIME,typoResult: false
}req1 requests.get(url,headersheaders)
req_api requests.get(api,headersheaders)
print(type(req1),type(req1.text),req1.text) # requests.get().text是str类型
print(字符串,type(req1.content),req1.content) # requests.get().content是bytes类型
print(与直接req1.text一致,req1.content.decode())
print(接口返回json格式,req_api.json()) # 接口返回格式需要用requests.get().json()# POST发送的data必须为bytes或bytes类型的可迭代对象不能是字符串
form_data urllib.parse.urlencode(form_data).encode()
# urllib.request.Request()只是一个请求
req2 urllib.request.Request(url,dataform_data,headersheaders)
print(type(req2))req3 urllib.request.urlopen(url) # 不可以伪装你的User Agent,可以通过urllib.request.Request()伪装
print(type(req3),req3.status) # http.client.HTTPResponse
print(req3.getheaders()) # 响应的信息集合
print(req3.read().decode(utf-8)) # urllib.request.urlopen().read().decode(utf-8)相当于requests.get().textreq4 urllib.request.urlopen(req2) # 参数可以直接是一个请求
print(直接一个请求,req4.read().decode(utf-8))