基于Python模拟浏览器发送http请求


Posted in Python onNovember 06, 2020

1.使用 urllib2 实现

#! /usr/bin/env python
# -*- coding=utf-8 -*- 

import urllib2
url="https://www.baidu.com"
req_header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",
"Accept":"text/html;q=0.9,*/*;q=0.8",
"Accept-Charset":"ISO-8859-1,utf-8;q=0.7,*;q=0.3",
"Accept-Encoding":"gzip",
"Connection":"close",
"Referer":None #注意如果依然不能抓取的话,这里可以设置抓取网站的host
}
req_timeout = 5
req = urllib2.Request(url,None,req_header)
resp = urllib2.urlopen(req,None,req_timeout)
html = resp.read()
print(html)

2.使用 requests 模块

(1).get请求

#-*- coding:utf-8 -*-
import requests

url = "https://www.baidu.com"
payload = {"key1": "value1", "key2": "value2"}
r = requests.get(url, params=payload)
print r.text

(2).post请求

#-*- coding:utf-8 -*-
import requests
url1 = "http://www.exanple.com/login"#登陆地址
url2 = "http://www.example.com/main"#需要登陆才能访问的地址
data={"user":"user","password":"pass"}
headers = { "Accept":"text/html,application/xhtml+xml,application/xml;",
      "Accept-Encoding":"gzip",
      "Accept-Language":"zh-CN,zh;q=0.8",
      "Referer":"http://www.example.com/",
      "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36"
      }
res1 = requests.post(url1, data=data, headers=headers)
res2 = requests.get(url2, cookies=res1.cookies, headers=headers)

print res2.content#获得二进制响应内容
print res2.raw#获得原始响应内容,需要stream=True
print res2.raw.read(50)
print type(res2.text)#返回解码成unicode的内容
print res2.url
print res2.history#追踪重定向
print res2.cookies
print res2.cookies["example_cookie_name"]
print res2.headers
print res2.headers["Content-Type"]
print res2.headers.get("content-type")
print res2.json#讲返回内容编码为json
print res2.encoding#返回内容编码
print res2.status_code#返回http状态码
print res2.raise_for_status()#返回错误状态码

(3).使用session对象的写法

#-*- coding:utf-8 -*-
import requests
s = requests.Session()
url1 = "http://www.exanple.com/login"#登陆地址
url2 = "http://www.example.com/main"#需要登陆才能访问的地址
data={"user":"user","password":"pass"}
headers = { "Accept":"text/html,application/xhtml+xml,application/xml;",
      "Accept-Encoding":"gzip",
      "Accept-Language":"zh-CN,zh;q=0.8",
      "Referer":"http://www.example.com/",
      "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36"
      }

prepped1 = requests.Request("POST", url1,
  data=data,
  headers=headers
).prepare()
s.send(prepped1)


"""
也可以这样写
res = requests.Request("POST", url1,
data=data,
headers=headers
)
prepared = s.prepare_request(res)
# do something with prepped.body
# do something with prepped.headers
s.send(prepared)
"""

prepare2 = requests.Request("POST", url2,
  headers=headers
).prepare()
res2 = s.send(prepare2)

print res2.content


"""另一种写法"""
#-*- coding:utf-8 -*-
import requests
s = requests.Session()
url1 = "http://www.exanple.com/login"#登陆地址
url2 = "http://www.example.com/main"#需要登陆才能访问的页面地址
data={"user":"user","password":"pass"}
headers = { "Accept":"text/html,application/xhtml+xml,application/xml;",
      "Accept-Encoding":"gzip",
      "Accept-Language":"zh-CN,zh;q=0.8",
      "Referer":"http://www.example.com/",
      "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36"
      }
res1 = s.post(url1, data=data)
res2 = s.post(url2)
print(resp2.content)

3.其他的一些请求方式

>>> r = requests.put("http://httpbin.org/put")
>>> r = requests.delete("http://httpbin.org/delete")
>>> r = requests.head("http://httpbin.org/get")
>>> r = requests.options(http://httpbin.org/get)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python入门之三角函数sin()函数实例详解
Nov 08 Python
python如何定义带参数的装饰器
Mar 20 Python
python docx 中文字体设置的操作方法
May 08 Python
django 将model转换为字典的方法示例
Oct 16 Python
浅谈tensorflow 中tf.concat()的使用
Feb 07 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
Mar 12 Python
keras中的卷积层&池化层的用法
May 22 Python
Python列表嵌套常见坑点及解决方案
Sep 30 Python
Pycharm快捷键配置详细整理
Oct 13 Python
基于Python采集爬取微信公众号历史数据
Nov 27 Python
python爬虫请求库httpx和parsel解析库的使用测评
May 10 Python
python在package下继续嵌套一个package
Apr 14 Python
python如何写个俄罗斯方块
Nov 06 #Python
基于Python实现全自动下载抖音视频
Nov 06 #Python
Python3读写ini配置文件的示例
Nov 06 #Python
Python Serial串口基本操作(收发数据)
Nov 06 #Python
python基于exchange函数发送邮件过程详解
Nov 06 #Python
Python Unittest原理及基本使用方法
Nov 06 #Python
python中的yield from语法快速学习
Nov 06 #Python
You might like
ThinkPHP 表单自动验证运用示例
2014/10/13 PHP
yii分页组件用法实例分析
2015/12/28 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
2019/02/13 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
JavaScript 捕获窗口关闭事件
2009/07/26 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
js实现的点击数量加一可操作数据库
2014/05/09 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
分析了一下JQuery中的extend方法实现原理
2015/02/27 Javascript
Javascript实现单例模式
2016/01/24 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
canvas绘制环形进度条
2017/02/23 Javascript
Ionic + Angular.js实现图片轮播的方法示例
2017/05/21 Javascript
详解vue嵌套路由-query传递参数
2017/05/23 Javascript
简单谈谈原生js的math对象
2017/06/27 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
layui使用数据表格实现购物车功能
2019/07/26 Javascript
详解小程序如何动态绑定点击的执行方法
2019/11/26 Javascript
vue 遮罩层阻止默认滚动事件操作
2020/07/28 Javascript
python轻松实现代码编码格式转换
2015/03/26 Python
python实现读取命令行参数的方法
2015/05/22 Python
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
Python vtk读取并显示dicom文件示例
2020/01/13 Python
使用python创建生成动态链接库dll的方法
2020/05/09 Python
介绍一下.NET构架下remoting和webservice
2014/05/08 面试题
如何反序的迭代一个序列?how do I iterate over a sequence in reverse order
2012/02/04 面试题
师范生实习个人的自我评价
2013/09/28 职场文书
教你怎样写好自我评价
2013/10/05 职场文书
自考毕业自我鉴定范文
2013/10/27 职场文书
教师个人的自我评价分享
2014/01/02 职场文书
新年联欢会主持词
2014/03/27 职场文书