基于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 相关文章推荐
Windows下PyMongo下载及安装教程
Apr 27 Python
解析Python中的生成器及其与迭代器的差异
Jun 20 Python
解决pycharm界面不能显示中文的问题
May 23 Python
python 实现调用子文件下的模块方法
Dec 07 Python
python实现猜拳小游戏
Apr 05 Python
Python 如何提高元组的可读性
Aug 26 Python
Python3 把一个列表按指定数目分成多个列表的方式
Dec 25 Python
python十进制转二进制的详解
Feb 07 Python
python列表切片和嵌套列表取值操作详解
Feb 27 Python
python实现简单的学生管理系统
Feb 22 Python
深入浅析Django MTV模式
Sep 04 Python
Python序列化模块JSON与Pickle
Jun 05 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
多重?l件?合查?(一)
2006/10/09 PHP
PHP新手上路(五)
2006/10/09 PHP
NOD32 v2.70.32 简体中文封装版 提供下载了
2007/02/27 PHP
基于PHP CURL用法的深入分析
2013/06/09 PHP
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
2010/12/02 Javascript
iframe 父窗口和子窗口相互的调用方法集锦
2010/12/15 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
2014/11/12 Javascript
JavaScript驾驭网页-CSS与DOM
2016/03/24 Javascript
两种方法解决javascript url post 特殊字符转义 + & #
2016/04/13 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
优雅的使用javascript递归画一棵结构树示例代码
2019/09/22 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
Python实现测试磁盘性能的方法
2015/03/12 Python
python暴力解压rar加密文件过程详解
2019/07/05 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
Django密码系统实现过程详解
2019/07/19 Python
python通过http下载文件的方法详解
2019/07/26 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
Python StringIO如何在内存中读写str
2020/01/07 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
解决pytorch 数据类型报错的问题
2021/03/03 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的代码
2020/11/30 HTML / CSS
全球知名巧克力品牌:Godiva
2016/07/22 全球购物
美国宠物商店:Wag.com
2016/10/25 全球购物
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
技术副厂长岗位职责
2013/12/26 职场文书
2014年体育教学工作总结
2014/12/09 职场文书
大学生逃课检讨书
2015/05/04 职场文书
房屋维修申请报告
2015/05/18 职场文书
2015教师个人年度工作总结
2015/10/23 职场文书
go类型转换及与C的类型转换方式
2021/05/05 Golang
JS数组方法some、every和find的使用详情
2021/10/05 Javascript