基于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网络编程之文件下载实例分析
May 20 Python
python计算文本文件行数的方法
Jul 06 Python
Python中的is和==比较两个对象的两种方法
Sep 06 Python
Python设计模式之工厂模式简单示例
Jan 09 Python
Python实现输出某区间范围内全部素数的方法
May 02 Python
解决Pycharm无法import自己安装的第三方module问题
May 18 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
Jul 09 Python
基于Python3.6+splinter实现自动抢火车票
Sep 25 Python
深入解析Python小白学习【操作列表】
Mar 23 Python
python打印直角三角形与等腰三角形实例代码
Oct 20 Python
python 实现dict转json并保存文件
Dec 05 Python
openCV提取图像中的矩形区域
Jul 21 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
php判断字符串在另一个字符串位置的方法
2014/02/27 PHP
php使用GeoIP库实例
2014/06/27 PHP
Nginx下配置codeigniter框架方法
2015/04/07 PHP
PHP session垃圾回收机制实例分析
2019/06/28 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
2019/09/18 PHP
Ext对基本类型的扩展 ext,extjs,format
2010/12/25 Javascript
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
下载文件个别浏览器文件名乱码解决办法
2013/03/19 Javascript
js判断url是否有效的两种方法
2014/03/04 Javascript
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
JavaScript操作HTML DOM节点的基础教程
2016/03/11 Javascript
JS常用算法实现代码
2016/11/14 Javascript
关于Vue.js一些问题和思考学习笔记(2)
2016/12/02 Javascript
jQuery实现页面顶部下拉广告
2016/12/30 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
2017/06/01 Javascript
Nodejs连接mysql并实现增、删、改、查操作的方法详解
2018/01/04 NodeJs
微信小程序实现简单表格
2019/02/14 Javascript
微信小程序云开发之数据库操作
2019/05/18 Javascript
微信小程序swiper实现文字纵向轮播提示效果
2020/01/21 Javascript
处理JavaScript值为undefined的7个小技巧
2020/07/28 Javascript
vue中选中多个选项并且改变选中的样式的实例代码
2020/09/16 Javascript
vuex页面刷新导致数据丢失的解决方案
2020/12/10 Vue.js
[00:17]DOTA2荣耀之路5:It’s a disastah!
2018/05/28 DOTA
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
2017/12/08 Python
python 利用panda 实现列联表(交叉表)
2021/02/06 Python
会计系毕业个人自荐信格式
2013/09/23 职场文书
试用期自我鉴定范文
2014/03/20 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
nginx基于域名,端口,不同IP的虚拟主机设置的实现
2021/03/31 Servers
图文详解matlab原始处理图像几何变换
2021/07/09 Python
JavaScript组合继承详解
2021/11/07 Javascript
mysql5.6主从搭建以及不同步问题详解
2021/12/04 MySQL