基于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? 制作一个网站为例
Mar 06 Python
python中将正则过滤的内容输出写入到文件中的实例
Oct 21 Python
用python3 urllib破解有道翻译反爬虫机制详解
Aug 14 Python
python使用pip安装SciPy、SymPy、matplotlib教程
Nov 20 Python
pyhton中__pycache__文件夹的产生与作用详解
Nov 24 Python
使用OpenCV circle函数图像上画圆的示例代码
Dec 27 Python
Python loguru日志库之高效输出控制台日志和日志记录
Mar 07 Python
python中for in的用法详解
Apr 17 Python
Python xlwt模块使用代码实例
Jun 10 Python
Python批量删除mysql中千万级大量数据的脚本分享
Dec 03 Python
python实现批量提取指定文件夹下同类型文件
Apr 05 Python
Python中的协程(Coroutine)操作模块(greenlet、gevent)
May 30 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使用mysql_fetch_object从查询结果中获取对象集的方法
2015/03/18 PHP
使用php实现网站验证码功能【推荐】
2017/02/09 PHP
PHP实现统计代码行数小工具
2019/09/19 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
2020/04/23 PHP
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
jQuery 选择器理解
2010/03/16 Javascript
DOM Scripting中的图片切换[兼容Firefox]
2010/06/12 Javascript
使用js获取地址栏中传递的值
2013/07/02 Javascript
jquery改变disabled的boolean状态的三种方法
2013/12/13 Javascript
jQuery中removeProp()方法用法实例
2015/01/05 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
JavaScript基础教程——入门必看篇
2016/05/20 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
Vue.js实现多条件筛选、搜索、排序及分页的表格功能
2020/11/24 Javascript
Vue 父子组件、组件间通信
2017/03/08 Javascript
微信小程序页面间通信的5种方式
2017/03/31 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
微信小程序实现简单购物车功能
2020/12/30 Javascript
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
Python入门_条件控制(详解)
2017/05/16 Python
用pycharm开发django项目示例代码
2019/06/13 Python
Python Pandas 箱线图的实现
2019/07/23 Python
Python实现读取并写入Excel文件过程解析
2020/05/27 Python
Python环境使用OpenCV检测人脸实现教程
2020/10/19 Python
HTML5实现一个能够移动的小坦克示例代码
2013/09/02 HTML / CSS
在网上学习全世界最好的课程:Coursera
2017/11/07 全球购物
请问如下代码执行后a和b的值分别是什么
2016/05/05 面试题
经典公益广告词
2014/03/13 职场文书
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
春游踏青活动方案
2014/08/14 职场文书
2015年班级工作总结范文
2015/04/03 职场文书
Pytorch可视化的几种实现方法
2021/06/10 Python
webpack的移动端适配方案小结
2021/07/25 Javascript
vue+echarts实现多条折线图
2022/03/21 Vue.js
手写Spirit防抖函数underscore和节流函数lodash
2022/03/22 Javascript