urlopen

  1 import urllib2
2
3 # 向指定的url发送请求,并返回服务器响应的类文件对象
4 response = urllib2.urlopen("http://www.baidu.com/")
5
6 # 类文件对象支持文件的操作方法,如read()方法返回为字符串
7 html = response.read()
8
9 print htm

上面代码就是打开百度主页的“查看源代码”的内容,还是比较简单的。

Request

在上个例子里,urlopen()的参数就是一个url地址;

但是如果需要执行更复杂的操作,比如增加HTTP报头,必须创建一个 Request 实例来作为urlopen()的参数;而需要访问的url地址则作为 Request 实例的参数。

  1 # -*- coding:utf-8 -*-
2 import urllib2
3
4 url = "http://www.baidu.com/"
5
6 # url 作为Request()方法的一个参数,并构造一个Request对象
7 request = urllib2.Request(url)
8
9 # Request对象作为urlopen()方法的参数,发给服务器响应
10 response = urllib2.urlopen(request)
11
12 html = response.read()
13
14 print html

与上面的运行时一样的

新建Request实例,除了必须要有 url 参数之外,还可以设置另外两个参数:

  1. data(默认空):是伴随 url 提交的数据(比如要post的数据),同时 HTTP 请求将从 "GET"方式 改为 "POST"方式。

  2. headers(默认空):是一个字典,包含了需要发送的HTTP报头的键值对。

User-Agent

爬虫需要伪装自己,伪装成公认的浏览器

  1 # -*- coding:utf-8 -*-
2 import urllib2
3
4 url = "http://www.baidu.com/"
5 headers = {"User-Agent" : "Mozilla/5.0(compatible;MSIE9.0;Windows NT6.1;Trident/5.0)"}
6
7
8 # url和headers一起 作为Request()方法的参数,并构造一个Request对象
9 request = urllib2.Request(url, headers=headers)
10
11 # Request对象作为urlopen()方法的参数,发给服务器响应
12 response = urllib2.urlopen(request)
13
14 html = response.read()
15
16 print html

添加更多的Header信息

特定的header

  1 # -*- coding:utf-8 -*-
2 import urllib2
3
4 url = "http://www.baidu.com/"
5 headers = {"User-Agent" : "Mozilla/5.0(compatible;MSIE9.0;Windows NT6.1;Trident/5.0)"}
6
7
8 # url和headers一起 作为Request()方法的参数,并构造一个Request对象
9 request = urllib2.Request(url, headers=headers)
10 # 调用Request.add_header(),添加或者修改特定的header
11 request = add_header("Connectin", "keep-alive")
12
13 # Request对象作为urlopen()方法的参数,发给服务器响应
14 response = urllib2.urlopen(request)
15
16 html = response.read()
17
18 print html

随机添加/修改User-Agent

 import urllib2
import random url = "http://www.itcast.cn" ua_list = [
"Mozilla/5.0 (Windows NT 6.1; ) Apple.... ",
"Mozilla/5.0 (X11; CrOS i686 2268.111.0)... ",
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X.... ",
"Mozilla/5.0 (Macintosh; Intel Mac OS... "
] user_agent = random.choice(ua_list) request = urllib2.Request(url) #也可以通过调用Request.add_header() 添加/修改一个特定的header
request.add_header("User-Agent", user_agent) # 第一个字母大写,后面的全部小写
request.get_header("User-agent") response = urllib2.urlopen(request) html = response.read()
print html

urllib2的基本使用的更多相关文章

  1. 【Python网络爬虫二】使用urllib2抓去网页内容

    在Python中通过导入urllib2组件,来完成网页的抓取工作.在python3.x中被改为urllib.request. 爬取具体的过程类似于使用程序模拟IE浏览器的功能,把URL作为HTTP请求 ...

  2. Python urllib2 调试

    #!/usr/bin/env python # coding=utf-8 __author__ = 'zhaoyingnan' import urllib import urllib2 import ...

  3. 使用urllib2打开网页的三种方法

    #coding:utf-8 import urllib2 import cookielib url="http://www.baidu.com" print '方法 1' resp ...

  4. No module named 'urllib2'

    import urllib2 response = urllib2.urlopen('http://www.baidu.com/') html = response.read() print html ...

  5. Python自动化测试 (九)urllib2 发送HTTP Request

    urllib2 是Python自带的标准模块, 用来发送HTTP Request的.  类似于 .NET中的,  HttpWebRequest类 urllib2 的优点 Python urllib2 ...

  6. urllib2抓取HTML存入Excel

    通过urllib2抓取HTML网页,然后过滤出包含特定字符的行,并写入Excel文件: # -*- coding: utf-8 -*- import sys #import urllib import ...

  7. [Python] urllib2.HTTPError: HTTP Error 403: Forbidden

    搬运自http://www.2cto.com/kf/201309/242273.html,感谢原作. 之所以出现上面的异常,是因为如果用 urllib.request.urlopen 方式打开一个UR ...

  8. python urllib2 发起http请求post

    使用urllib2发起post请求 def GetCsspToken(): data = json.dumps({"userName":"wenbin", &q ...

  9. cookielib和urllib2模块相结合模拟网站登录

    1.cookielib模块 cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源.例如可以利用 本模块的CookieJar类的对 ...

  10. 使用python标准库urllib2访问网页

    #访问不需要登录的网页import urllib2target_page_url='http://10.224.110.118/myweb/view.jsp' f = urllib2.urlopen( ...

随机推荐

  1. C#中抽象类和接口的区别3

    一.普通类和抽象类之间的异同 1.都可以被继承 2.抽象类不能被实例化,只是用来继承的.普通类可以实例化 3.抽象方法只有含方法声明而没有方法体且必须包含在抽象类里面 4.子类继承抽象类必须实现抽象类 ...

  2. MySQL解压版配置步骤详细教程

    解压mysql到D盘根目录 在解压路径下复制my-default.ini,修改名称为my.ini 在my.ini内容如下 [client]default-character-set=utf8 [mys ...

  3. eclipse中hibernate和mybatis中xml配置文件的没有标签提醒解决方法

    当我们使用eclipse编写Mybatis或hibernate的xml文件时,面对众多标签的配置文件,却没有自动提醒,对于工作和学习都十分不方便. 之所以没有自动提醒,是因为dtd文件没有加载成功. ...

  4. 八、VueJs 填坑日记之参数传递及内容页面的开发

    我们在上一篇博文中,渲染出来了一个列表,并在列表中使用了router-link标签,标签内的:to就是链接地址,昨天咱们是<router-link :to="'/content/' + ...

  5. x86平台上的Windows页表映射机制

    首先,在x86架构的处理器上,一个正常页面大小为4KB,非PAE模式下,CR3持有页目录页面的物理地址,PDE和PTE格式相同大小为4字节.此时每个页表页面包含1024个PTE,可以映射1024个页面 ...

  6. 《用Java写一个通用的服务器程序》01 综述

    最近一两年用C++写了好几个基于TCP通信类型程序,都是写一个小型的服务器,监听请求,解析自定义的协议,处理请求,返回结果.每次写新程序时都把老代码拿来,修改一下协议解析部分和业务处理部分,然后就一个 ...

  7. JAVA基础1——字节&位运算

    占用字节数 & 取值范围 Java一共有8种基本数据类型(原始数据类型): 类型 存储要求 范围(包含) 默认值 包装类 int 4字节(32位) -2^31~ 2^31-1 0 Intege ...

  8. RFID电动自行车与共享单车之物联网比较

    目前比较热门的RFID电动自行车管理和共享单车,都是属于物联网范畴.它们之间有什么不同呢? 1.RFID电动自行车管理系统原理 RFID电动自行车管理,利用了有源RFID技术,使用基站SR8读取安装在 ...

  9. springMVC+commons-fileupload上传文件大小限制异常

    异常信息: 严重: Servlet.service() for servlet [suibian] in context with path [/SpringMvcDemo3] threw excep ...

  10. poj 2528 Mayor's posters 线段树+离散化技巧

    poj 2528 Mayor's posters 题目链接: http://poj.org/problem?id=2528 思路: 线段树+离散化技巧(这里的离散化需要注意一下啊,题目数据弱看不出来) ...