方法一:requests

官方文档
https://pypi.org/project/requests/

Requests模块是一个用于网络请求的模块,主要用来模拟浏览器发请求。其实类似的模块有很多,比如urllib,urllib2,httplib,httplib2,他们基本都提供相似的功能。但是这些模块都复杂而且差不多过时了,requests模块简单强大高效,使得其在众多网络请求模块中脱引而出。

requests使用

环境安装:pip install requests
使用流程:

  • 指定url
  • 基于requests模块发送请求
  • 获取响应对象中的数据值
  • 持久化存储(不是必须的)

案例:爬取百度首页的数据

# 1. 导包
import requests# 2. 指定url
url = "https://www.baidu.com"
# 3. 使用GET方法发送请求,该方法会返回一个响应对象
response = requests.get(url=url)
# 4. 获取响应数据
print(response.status_code)  # 打印状态码
print(response.url)          # 打印请求url
print(response.headers)      # 打印响应头头信息
print(response.text)  # 以文本形式打印网页源码# 保存数据
response.encoding = 'utf-8'  # 指定编码格式,不然打开乱码
text = response.text
with open('./2.html' ,'w' ,encoding='utf-8') as f:f.write(text)

requests请求方法

上面的案例requests发送了一个GET请求方法,除此之外还有其他的请求方法。最常用的就是GET和POST方法。

res = requests.get ()
res = requests.post ()
res = requests.put ()
res = requests.delete ()
res = requests.head ()
res = requests.options ()

且在指定方法发送请求的时候,有时候还需要在请求方法括号中requests.get(url=url, xx = xx)指定一些参数,如下。先了解一下

方法 参数名字
HTTP头部 headers
GET参数 params
POST参数 data
文件 files
Cookies cookies
重定向处理 allow_redirects = False/True
超时 timeout
证书验证 verify = False/True
工作流(延迟下载) stream=False/ True
事件挂钩 hooks=dict(response=)
身份验证 auth=
代理 proxies=

requests响应对象属性
在上面爬取百度首页时,response = requests.get(url=url)其返回的是一个响应对象,而如果我们想要获取具体的数据比如响应码或者网页源码时,就需要通过指定响应对象的属性进行获取。如response.status_code获取响应码

内容 方法
获取请求url res.url
状态码 res.status_code
响应数据(以字符串形式) res.text
返回的是一个原生字符串,是bytes类型 res.content
查看服务器响应头 res.headers
查看cookie res.cookies

发送get请求

# 导入requests包
import requestsurl = "http://www.tuling123.com/openapi/api"
myParams = {"key":"username","info":"plusroax"} # 字典格式,推荐使用,它会自动帮你按照k-v拼接url
res = requests.get(url=url, params=myParams)print('url:',res.request.url)# 查看发送的url
print("response:",res.text)  # 返回请求结果

输出

url: http://www.tuling123.com/openapi/api?key=username&info=plusroax
response: {"code":40001,"text":"亲爱的,key不对哦。"}

发送post请求

# 导入requests包
import requestsurl = "http://httpbin.org/post"
data = {"name": "plusroax","age": 18} # Post请求发送的数据,字典格式
res = requests.post(url=url, data = data)#这里传入的data,是body里面的数据。params是拼接url时的参数print("发送的body:",res.request.body)
print("response返回结果:",res.text)

输出

发送的body: name=plusroax&age=18
response返回结果: {"args": {}, "data": "", "files": {}, "form": {"age": "18", "name": "plusroax"}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "20", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "python-requests/2.27.1", "X-Amzn-Trace-Id": "Root=1-633e9c08-5916485673661c9c6b286b47"}, "json": null, "origin": "6.6.6.6", "url": "http://httpbin.org/post"
}

方法二:requests-html

官方文档
https://pypi.org/project/requests-html/

安装命令

pip install requests-html

发送get请求

from requests_html import HTMLSession# 获取请求对象
session = HTMLSession()sina = session.get('https://news.sina.com.cn/')sina.encoding = 'utf-8'print(sina.text)

方法三:urllib

发送post请求

# 创建一个 HTTP POST 请求,输出响应上下文
from urllib.request import urlopen
from urllib.parse import urlencode
data = {'kw' : 'python'}
data = bytes(urlencode(data), encoding = 'utf-8')
response = urlopen("https://fanyi.baidu.com/sug", data)
print(response.read().decode('unicode_escape'))

输出

{"errno":0,"data":[{"k":"Python","v":"蛇属,蟒蛇属"},{"k":"python","v":"n. 巨蛇,大蟒"},{"k":"pythons","v":"n. 巨蛇,大蟒( python的名词复数 )"}]}

携带header发送get请求

# 采用 HTTP GET 请求的方法模拟谷歌浏览器访问网站,输出响应上下文
from urllib import request,parse
url = 'http://www.httpbin.org/get'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}
req = request.Request(url, headers = headers, method = 'GET')
response = request.urlopen(req)
print(response.read())

【Python学习】http网站发送请求相关推荐

  1. python客户端通过代理发送请求

    国外有些网站被屏蔽或者访问较慢,通过找代理服务器来访问,加快访问速度. 这边本地运行反向代理,一开始认为在port 8088,后来netstat发现在本地的8087. 于是python使用urllib ...

  2. Python模拟搜狗翻译发送请求

    开发工具与关键技术:Python IDEL.Python 作者:曾浩源 撰写时间:2019年08月07日 写一个小功能来模拟搜狗翻译发送请求,让这个小功能拥有翻译的功能. 首先打开搜狗翻译,然后F12 ...

  3. python通过requests库发送请求

    文章目录 一.requests库 二.发送请求 1.发送get请求 2.传递url参数 (1)直接通过url传递 (2)通过字符串传递 (3)通过字典传递 3.发送post请求 (1)提交form表单 ...

  4. python学习技术网站收集

    一路前行,留下足印... 1.工具类 pycharm远程调试 2.学习网站 51cto 廖学峰基础理论学习 菜鸟教程-基础理论 3.练手 80个Python练手项目列表 Python 全栈案例初体验

  5. python 爬虫1:发送请求

    import socket import urllib.request import urllib.parse import urllib.error# 一个测试用网址,后面是跟的是http请求方式p ...

  6. python学习(26)分析ajax请求抓取今日头条cosplay小姐姐图片

    分析ajax请求格式,模拟发送http请求,从而获取网页代码,进而分析取出需要的数据和图片.这里分析ajax请求,获取cosplay美女图片. 登陆今日头条,点击搜索,输入cosplay 下面查看浏览 ...

  7. Python学习笔记——爬虫之urllib数据抓取

    目录 urllib库的基本使用 Get方式 POST方式: 获取AJAX加载的内容 Handler处理器 和 自定义Opener urllib库的基本使用 所谓网页抓取,就是把URL地址中指定的网络资 ...

  8. Python学习笔记--day09 函数 模块 (文件、路径操作)

    第二模块 函数&模块 第一模块主要是学习python基础知识,从第二模块开始就可以通过程序去解决工作中实际的问题. 函数,一个用于专门实现某个功能的代码块(可重用). 内置函数 len.bin ...

  9. 如何利用python爬取网站数据

    Python是一种非常适合用于网络爬虫的编程语言,以下是Python爬取网站数据的步骤: 1. 确定目标网站和所需数据:首先要找到需要爬取数据的网站,确定你需要爬取的数据是哪一部分. 2. 发送请求: ...

最新文章

  1. docker mysql 生产环境_Docker构建MySQL环境
  2. python计算圆面积保留两位数_python中怎么实现保留两位小数
  3. 使用Java和Spring构建现代Web应用程序
  4. 使用CXF发布WebService服务简单实例
  5. 95-136-041-源码-Operator-TwoInputStreamOperator
  6. mysql 排序字段 添加索引吗_mysql需要在哪些字段上加索引?
  7. 推荐!可视化垃圾回收算法(转)
  8. GeoServer地图开发解决方案(二):地图数据处理篇
  9. rtx服务器端消息监控插件,RTX2006消息监控插件
  10. 用图片替代cursor光标样式
  11. k8s 自定义dns_配置k8s dns
  12. 52_LSTM及简介,RNN单元的内部结构,LSTM单元的内部结构,原理,遗忘门,输入门,输出门,LSTM变体GRU,LSTM变体FC-LSTM,Pytorch LSTM API介绍,案例(学习笔记)
  13. 泛微OA 任意文件上传漏洞
  14. java导出word文档(office,wps均可)
  15. Creo 工程图 尺寸 消失
  16. 转:优秀的人,往往都具备这5种视角
  17. 打开天正建筑显示服务器为空,打开天正提示找不到可用cad版本 - 卡饭网
  18. java 分层处理解耦_后端分层架构如何解耦?
  19. 移动硬盘无法被识别怎么办?
  20. CAD转Excel,该如何转换操作

热门文章

  1. ubuntu终端下快捷键~字体放大缩小
  2. 出现高并发的几种问题
  3. Google的IOC框架: GUICE
  4. 教你接入Google谷歌支付V3版本,图文讲解(Android、Unity)
  5. 思灵机器人与您相约德国慕尼黑展
  6. 运营必备的 15 个数据分析方法(论)
  7. 如何将您的Win8改成win7 呢? 下面是完美教程!
  8. 妇科病历汇报PPT模板
  9. 英寸和厘米转化python_在python中转换高度:英尺和英寸的逗号给了我一个粗略的时间...
  10. 系统提示“内存不足”的九大原因及解决方法