Python可以说是爬网的利器,本文主要介绍了一些python来模拟http请求的一些方法和技巧。

Python处理请求的类库有两个,urllib,urllib2。 这两个类库并不是一个类库的两个不同版本,urllib主要用来处理一些url相关的内容,发送请求的时候,请求对象只能是一个url。urllib2可以用request对象来实现请求,这样就可以实现如伪造头部,设置代理,http get,http post等方法。

阅读本文需要了解http请求的一些基本知识,如:

  • 什么是httpwebrequest,httpwebresponse
  • 什么是get,post
  • 什么是cookie

本文主要介绍模拟请求用到的这些方式:

  • 设置代理
  • 伪造头部或者Header信息
  • 启用cookie
  • url参数的处理

使用urllib2.urlopen直接发送

import urllib2

url = 'http://www.baidu.com/'
response = urllib2.urlopen(url) ##urlopen接受传入参数是string或者是request
response_text = response.read()

使用urllib.build_opener

直接发送请求

import urllib2

url = 'http://www.baidu.com/'

opener = urllib2.build_opener()
response = opener.open(url)
response_text = response.read()

通过代理访问站点

proxy_handler = urllib2.ProxyHandler({"http" : 'http://localhost:8888'})
opener = urllib2.build_opener(proxy_handler)
response = opener.open(url)
response_text = response.read()

请求中附带request body(http post)

opener = urllib2.build_opener()
response = opener.open(url,'request body')
response_text = response.read()

body中如果是key-value形式的,可以参照下面的url处理部分来处理

启用Cookie

cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
response = opener.open(url)
response_text = response.read()

使用urllib2.Request

请求中添加自定义的Header信息

request = urllib2.Request(url)
request.add_data('')
request.add_header('User-Agent', 'fake-client')
response = urllib2.urlopen(request)

处理url中的参数信息

无论是使用get方式还是post方式,经常会遇到需要使用参数的形式,处理参数可以使用下面的类库

参数集合转string

para = {'':'','aaa':'bbb'}
encodeurl = urllib.urlencode(para)
输出aaa=bbb&111=222

url参数转dictionary

url = 'https://www.baidu.com/s?wd=python%20url%20querystring&pn=10&oq=python%20url%20querystring&tn=baiduhome_pg&ie=utf-8&usm=1&rsv_idx=2&rsv_pq=d09af93600035cb8&rsv_t=d151qRmNNdybGINHcKbyO360E2%2Fg%2FUs2t0MiKqRQXwhHZuNF3IlKyyStzYuofVZczQA3'

splitresult_instance = urlparse.urlsplit(url)

输出对象:

SplitResult(scheme='https', netloc='www.baidu.com', path='/s', query='wd=python%20url%20querystring&pn=10&oq=python%20url%20querystring&tn=baiduhome_pg&ie=utf-8&usm=1&rsv_idx=2&rsv_pq=d09af93600035cb8&rsv_t=d151qRmNNdybGINHcKbyO360E2%2Fg%2FUs2t0MiKqRQXwhHZuNF3IlKyyStzYuofVZczQA3', fragment='')

想转成集合只要

result_dic=urlparse.parse_qs(splitresult.query)

通过这种处理方式,把data信息放在url上来实现http get,放在body中实现http post。

此文同时托管在了 http://simmon.club/blog/Python-HttpRequest/

Python模拟HttpRequest的方法总结的更多相关文章

  1. python模拟鼠标拖动操作的方法

    本文实例讲述了python模拟鼠标拖动操作的方法.分享给大家供大家参考.具体如下: pdf中的书签只有页码,准备把现有书签拖到一个目录中,然后添加自己页签.重复的拖动工作实在无趣,还是让程序帮我实现吧 ...

  2. 【Python数据分析】Python模拟登录(一) requests.Session应用

    最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块. 注:本文仅为交流学 ...

  3. 菜鸟初识python request属性及方法说明

    if  request.REQUEST.has_key('键值'): HttpRequest对象的属性 参考: 表 H-1. HttpRequest对象的属性 属性 描述 path 表示提交请求页面完 ...

  4. python request属性及方法说明

    if  request.REQUEST.has_key('键值'): HttpRequest对象的属性 参考: 表 H-1. HttpRequest对象的属性 属      性 描述 path 表示提 ...

  5. python 模拟浏览器

    想用python模拟浏览器访问web的方法测试些东西,有哪几种方法呢? 一类:单纯的访问web,不解析其js,css等. 1. urllib2 #-*- coding:utf-8 -* import ...

  6. [转] python程序的调试方法

    qi09 原文 python程序的调试方法 本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序 源码例子 例如,有模拟税收计算的程序: #!/usr/bin/python de ...

  7. 芝麻HTTP:JavaScript加密逻辑分析与Python模拟执行实现数据爬取

    本节来说明一下 JavaScript 加密逻辑分析并利用 Python 模拟执行 JavaScript 实现数据爬取的过程.在这里以中国空气质量在线监测分析平台为例来进行分析,主要分析其加密逻辑及破解 ...

  8. Python模拟登陆万能法-微博|知乎

    Python模拟登陆让不少人伤透脑筋,今天奉上一种万能登陆方法.你无须精通HTML,甚至也无须精通Python,但却能让你成功的进行模拟登陆.本文讲的是登陆所有网站的一种方法,并不局限于微博与知乎,仅 ...

  9. Python模拟弹道轨迹

    http://www.itongji.cn/cms/article/articledetails?articleid=5029 最近美国把萨德系统部署到韩国,一时心血来潮就用python模拟最简单的弹 ...

随机推荐

  1. Unity引擎IOS执行档大小优化

    简介 苹果对于IOS执行档的大小是有明确的限制的,其中TEXT段的大小不能超过80M,否则提审将会被苹果拒绝,同时,如果TEXT段过于太大,那么在苹果进行加密之后,很容易出现解压失败等各种异常,最终导 ...

  2. JDBC入门之一--连接Mysql实验

    工具:mysql-connector-java-5.1.40.eclipse 1)首先要将mysql-connector-java包整合到eclipse中,右击项目,然后选择build path,出现 ...

  3. 网络神器Greasemonkey(油猴子)使用方法简介+脚本分享【转载】

    推荐下,觉得这个方法有用, 今天艾薇百科来介绍一下功能强大的Greasemonkey,俗称"油猴子",Greasemonkey可以自由定制网页,实现你想要的各种功能.堪称" ...

  4. [spring源码学习]九、IOC源码-applicationEventMulticaster事件广播

    一.代码实例 回到第IOC的第七章context部分,我们看源码分析部分,可以看到在spring的bean加载之后的第二个重要的bean为applicationEventMulticaster,从字面 ...

  5. SQLServer2005如何批量修改架构名 - wuxiaokaixinguo的专栏

    原文地址:http://blog.csdn.net/wuxiaokaixinguo/article/details/8523093 ) BEGIN SET @name='原构架名.' + @name ...

  6. Spring MVC --->>>No mapping found for HTTP request with URI

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> < ...

  7. 数据库访问性能优化 Oracle

    特别说明: 1.  本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识: 2.  本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也 ...

  8. BZOJ1527 : [POI2005]Pun-point

    求出重心,然后把所有点关于重心极角排序,极角相同的按到重心距离从大到小排序. 按极角序依次扫描,得到相邻两个向量的夹角以及长度之比,看成字符串. 若两个字符串循环同构,则两个点集相似,KMP判断即可. ...

  9. <十>JDBC_处理Blob类型数据

    /*  * 读取BLOB数据:  *  使用getBlob方法读取到Blob对象  *  调用Blob的getBinaryStream(方法得到输入流,在使用IO操作  * */ @Test publ ...

  10. C# 读取XML注释

    C#可以通过反射读取类的字段/方法等,可是该如何获取该字段的XML注释? 具体目的:有一个实体类,页面需要有一个与其对应的table,样式大体为 <tr> <td>地东经< ...