赞
踩
还在为怎么发送数据而发愁吗,请看本文。
想要得到网页的一些数据,你就需要先向其发送请求,获取到返回的数据,再写规则,获取想要获取的数据,那么,发送请求的模块都有什么呢?
他是一个第三方模块,需要pip安装。
源代码中,一共有7种请求方式
requeses.get()
requeses.post()
requeses.options()
requeses.head()
requeses.put()
requeses.patch()
requeses.delete()
而爬虫里面能用到的只有get和post请求,所以学爬虫的主要了解这两个就足够了。
源代码
def get(url, params=None, **kwargs):
"""Sends a GET request.
:param url: URL for the new :class:`Request` object.
:param params: (optional) Dictionary, list of tuples or bytes to send
in the query string for the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.
"""
请求示例
import requests url = 'https://www.baidu.com' method: 请求方法 get post url: 请求网址 params: (可选的) 查询参数 headers: (可选的) 字典 请求头 cookies: (可选的) 字典.cookiejar对象, 用户身份信息 proxies: (可选的) ip代理 data: (可选的) 字典.列表.元组.bytes post请求时会用到 json: (可选的) 字典 提交参数 verify: (可选的) 是否验证证书, ca证书 timeout: (可选的) 设置响应时间,一旦超过,程序会报错 allow_redirects: (可选的) 是否允许重定向, 布尔类型数据 files: (可选的) 字典,文件 auth: (可选的) 字典,权限认证 stream: (可选的) 是否是数据流传输 response = requests.get(url=url,headers=headerrs,params=params,cookies=cookies,proxies=proxies) # 根据情况添加
print(response)
"""
1xx:表示临时响应并需要请求者继续执行操作的状态代码
2xx:表示成功处理了请求的状态代码
3xx:要完成请求,需要进一步操作(通常这些代码用来重定向)
4xx:表示请求可能出错,妨碍了服务器的处理
5xx:表示服务器在尝试处理请求时,发生内部错误(这些错误通常是服务器本身的错误,并不是由于请求出错,当然也有可能是访问者的故意为之,使服务器本身出现错误)
"""
响应的数据可分为文本数据和二进制数据,如图片、视频、音频为二进制数据
# 1.查看文本信息
print(response.text)
# 2.查看二进制数据
print(response.content)
源代码
def post(url, data=None, json=None, **kwargs):
r"""Sends a POST request.
:param url: URL for the new :class:`Request` object.
:param data: (optional) Dictionary, list of tuples, bytes, or file-like
object to send in the body of the :class:`Request`.
:param json: (optional) json data to send in the body of the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:return: :class:`Response <Response>` object
:rtype: requests.Response
"""
return request('post', url, data=data, json=json, **kwargs)
请求示例
import requests url = 'https://fanyi.baidu.com/v2transapi?from=zh&to=en' headers = { 'Host': 'fanyi.baidu.com', 'Origin': 'https://fanyi.baidu.com', 'Referer': 'https://fanyi.baidu.com/?aldtype=16047', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', } data = { 'from': 'zh', 'to': 'en', 'query': '你好', 'transtype': '', 'simple_means_flag': '', 'sign': '', '密钥': '', 'domain': '' } cookies = {'',} response = requests.post(url=url, headers=headers, data=data, cookies=cookies) print(response.json()) # 基本传参与get相同
想要探讨python,创建一个良好的学习氛围,点击 一发冲天,给你满满的体验感。
urllib作为Python的标准库,基本上涵盖了基础的网络请求功能。
主要使用urlopen()方法来发起请求:
def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
*, cafile=None, capath=None, cadefault=False, context=None):
from urllib import request
url = 'https://www.baidu.com'
response = request.urlopen('http://www.baidu.com')
print(response.read())
如若需要添加请求头,则需要另外添加东西,如下
from urllib import request
from urllib.request import Request
url = 'https://www.bbitxt.com/book/1031/1.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}
urls = Request(url=url,headers=headers)
response = request.urlopen(urls)
print(response.read().decode('utf-8'))
"""
访问的结果会是一个http.client.HTTPResponse对象,使用此对象的read()方法,则可以获取访问网页获得的数据。但是要注意的是,获得的数据会是bytes的二进制格式,所以需要decode()一下,转换成字符串格式。
"""
请求头用headers接收,接着用Request携带
class Request:
def __init__(self, url, data=None, headers={},
origin_req_host=None, unverifiable=False,
method=None):
源代码中,Request能携带url, data, headers,origin_req_host,unverifiable, method
urlopen()默认发送get请求,但只需要在urlopen()方法中携带data参数,便可发送post请求,注意,data是字节流编码格式的内容,即bytes类型
示例:
import urllib.parse from urllib import request from urllib.request import Request url = 'https://fanyi.baidu.com/v2transapi?from=zh&to=en' headers = { 'Host': 'fanyi.baidu.com', 'Origin': 'https://fanyi.baidu.com', 'Referer': 'https://fanyi.baidu.com/?aldtype=16047', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', } datas = { 'from': 'zh', 'to': 'en', 'query': '你好', 'transtype': '', 'simple_means_flag': '', 'sign': '', '密钥': '', 'domain': '' } urls = Request(url=url,headers=headers) data = bytes(urllib.parse.urlencode(datas), encoding='utf8') response = urllib.request.urlopen(urls, data=data) print(response.read().decode('utf-8'))
需要通过pip 进行下载
源代码
def request(self, method, url, fields=None, headers=None, **urlopen_kw):
示例
import urllib3
req = urllib3.PoolManager()
url = 'http://www.baidu.com/s'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = req.request('GET', url, fields={'ie': 'UTF-8', 'wd': '图片'}, headers=headers)
result = response.data.decode('UTF-8')
print(result)
import urllib3 url = 'https://fanyi.baidu.com/v2transapi?from=zh&to=en' headers = { 'Acs-Token': '', 'Host': 'fanyi.baidu.com', 'Origin': 'https: // fanyi.baidu.com', 'Referer': 'https: // fanyi.baidu.com /?aldtype = 16047', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36', } params = { 'from': 'zh', 'to': 'en', 'query': '你好', 'transtype': 'realtime', 'simple_means_flag': '3', 'sign': '', '密钥': '', 'domain': '', } http = urllib3.PoolManager() res = http.request('POST', url, headers = headers, fields = params) result = res.data.decode('UTF-8') print(result)
该模块个人认为算不上专门发送请求的模块,他主在于网页的自动化操作,想要使用该模块,查看我的网页自动化获取天气情况以及播报这篇文章,里面有谷歌驱动的下载,模块的使用。
注意:在使用时驱动放在当前文件目录下或者放在python解释器目录下
注:源代码是为了让大家了解都能传什么参数。
urllib 是一个内置官方标准库,无需下载;它是python2中的 urllib 与 urllib2 的合并,urllib3 库是第三方标准库, 解决了线程安全,增加了连接池等功能,urllib与urllib3 相互补充,而urllib3明显高于urllib,而在发送请求这方面,我更喜欢用requests模块,用着简单。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。