基于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之玩转字符串(2)
Sep 14 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
Dec 27 Python
对python中的pop函数和append函数详解
May 04 Python
pandas通过loc生成新的列方法
Nov 28 Python
python写一个随机点名软件的实例
Nov 28 Python
pytorch 指定gpu训练与多gpu并行训练示例
Dec 31 Python
pytorch 常用线性函数详解
Jan 15 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
Jan 19 Python
python pandas.DataFrame.loc函数使用详解
Mar 26 Python
为什么说python更适合树莓派编程
Jul 20 Python
python爬虫如何解决图片验证码
Feb 14 Python
Python socket如何解析HTTP请求内容
Feb 12 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中对用户身份认证实现两种方法
2011/06/04 PHP
php fread函数使用方法总结
2019/05/28 PHP
php使用json-schema模块实现json校验示例
2019/09/28 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
JavaScript入门教程(11) js事件处理
2009/01/31 Javascript
Prototype Date对象 学习
2009/07/12 Javascript
JSON 编辑器实现代码
2009/12/06 Javascript
表格单元格交错着色实现思路及代码
2013/04/01 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
2014/03/17 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
JavaScript 中有关数组对象的方法(详解)
2016/08/15 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
javascript动画之磁性吸附效果篇
2016/12/09 Javascript
angularjs中回车键触发某一事件的方法
2017/04/24 Javascript
jQuery实现动态添加、删除按钮及input输入框的方法
2017/04/27 jQuery
微信小程序 es6-promise.js封装请求与处理异步进程
2017/06/12 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
原生js中ajax访问的实例详解
2017/09/19 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
jQuery插件Validation表单验证详解
2018/05/26 jQuery
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
Javascript 对象(object)合并操作实例分析
2019/07/30 Javascript
详解JavaScript作用域 闭包
2020/07/29 Javascript
pandas数据预处理之dataframe的groupby操作方法
2018/04/13 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
利用python爬取有道词典的方法
2020/12/08 Python
CSS3 旋转立方体问题详解
2020/01/09 HTML / CSS
澳大利亚购买太阳镜和眼镜网站:Glamoureyes
2020/09/22 全球购物
Linux内核产生并发的原因
2016/11/08 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
2013年保送生自荐信格式
2013/11/20 职场文书
十佳教师事迹材料
2014/01/11 职场文书
出生公证委托书
2014/04/03 职场文书
丧事答谢词
2015/01/05 职场文书
总经理助理岗位职责
2015/01/31 职场文书
奶茶店的创业计划书该怎么写?
2019/07/15 职场文书