基于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的PIL模块来进行图片对比
Feb 18 Python
详解django.contirb.auth-认证
Jul 16 Python
python爬虫之验证码篇3-滑动验证码识别技术
Apr 11 Python
python调试神器PySnooper的使用
Jul 03 Python
pytorch 可视化feature map的示例代码
Aug 20 Python
PyCharm导入python项目并配置虚拟环境的教程详解
Oct 13 Python
Django框架下静态模板的继承操作示例
Nov 08 Python
python tornado使用流生成图片的例子
Nov 18 Python
np.random.seed() 的使用详解
Jan 14 Python
python3.x中安装web.py步骤方法
Jun 23 Python
Django+Uwsgi+Nginx如何实现生产环境部署
Jul 31 Python
浅析python实现动态规划背包问题
Dec 31 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
在IIS上安装PHP4.0正式版
2006/10/09 PHP
php error_log 函数的使用
2009/04/13 PHP
PHP汉字转换拼音的函数代码
2015/12/30 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
2016/03/01 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
PHP中遍历数组的三种常用方法实例分析
2019/06/24 PHP
bcastr2.0 通用的图片浏览器
2006/11/22 Javascript
js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
2009/04/10 Javascript
jQuery getJSON 处理json数据的代码
2010/07/26 Javascript
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
AngularJS之依赖注入模拟实现
2016/08/19 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
微信小程序 wxapp视图容器 view详解
2016/10/31 Javascript
基于JavaScript实现熔岩灯效果导航菜单
2017/01/04 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
node.js+jQuery实现用户登录注册AJAX交互
2017/04/28 jQuery
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
2017/07/31 Javascript
微信小程序wx.previewImage预览图片实例详解
2017/12/07 Javascript
vue2.0$nextTick监听数据渲染完成之后的回调函数方法
2018/09/11 Javascript
vue-cli 打包使用history模式的后端配置实例
2018/09/20 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
python中实现k-means聚类算法详解
2017/11/11 Python
对Python3.x版本print函数左右对齐详解
2018/12/22 Python
基于MATLAB和Python实现MFCC特征参数提取
2019/08/13 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
Python 使用office365邮箱的示例
2020/10/29 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
解决virtualenv -p python3 venv报错的问题
2021/02/05 Python
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
英国亚马逊官方网站:Amazon.co.uk
2019/08/09 全球购物
国培教师自我鉴定
2014/02/12 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
党员个人批评与自我批评
2014/10/14 职场文书
奖学金主要事迹范文
2015/11/04 职场文书
javascript拖曳互换div的位置实现示例
2021/06/28 Javascript