在Python中通过导入urllib2组件,来完成网页的抓取工作。在python3.x中被改为urllib.request。

爬取具体的过程类似于使用程序模拟IE浏览器的功能,把URL作为HTTP请求的内容发送到服务器端, 然后读取服务器端的响应资源。

实现过程:

 import urllib2

 response=urllib2.urlopen('http://gs.ccnu.edu.cn/')
html=response.read()
print html

将返回的html信息打印出来,这和在网站上右键,查看源码看到的内容是一样的。浏览器通过这些源码,将要现实的内容渲染出来。

除了"http:",URL同样可以使用"ftp:","file:"等等来替代。

HTTP是基于请求和应答机制的:

客户端提出请求,服务端提供应答。

同样urllib2,可以通过模拟一个请求,然后将这个请求作为参数传入urlopen中,在读取返回的内容。

 import urllib2

 req=urllib2.Request('http://gs.ccnu.edu.cn/')
response2=urllib2.urlopen(req)
page=response2.read()
print page

模拟ftp请求:

 req=urllib2.Request("ftp://example.com/")

在进行http请求的时候可以做两件事

1.发送data表单数据

有时候我们在爬取网页的时候,需要提交一个表单,模拟登陆或者注册的操作。

通常http中通过post操作完成, 而在request时,提交的data表单需要讲过urllib中encode编码成标准的方式。

 import urllib
import urllib2 url = 'http://www.someserver.com/register.cgi' values = {"input1": "SeeKHit",
"input2": "",
"__EVENTTARGET": "btnLogin",
"__EVENTARGUMENT": "" } data = urllib.urlencode(values) # 编码工作
req = urllib2.Request(url, data) # 发送请求同时传data表单
response = urllib2.urlopen(req) #接受反馈的信息
the_page = response.read() #读取反馈的内容

2.设置Header到http请求

有时候建立http连接后,服务器会根据浏览器传过去的User-Agent头来,返回不同的内容给客户端。已达到不同的显示效果。(如安卓上的uc浏览器,就有一个设置设备标识的,如手机版,电脑版,ipad)

Python支持可以自定义的发送过去的User-Agent头,将自定义的字典作为User-Agent头作为一个参数,创建一个请求。

以下代码,讲User-Agent伪装成IE浏览器来,进行访问。

1. 应用程序版本“Mozilla/4.0”表示:你使用Maxthon 2.0 浏览器使用 IE8 内核;
2. 版本标识“MSIE 8.0”
3. 平台自身的识别信息“Windows NT ”表示“操作系统为 Windows”

 url = 'http://www.someserver.com/register.cgi'
user_agent = 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT)'
headers = { 'User-Agent' : user_agent }
values = {"input1": "SeeKHit",
"input2": "",
"__EVENTTARGET": "btnLogin",
"__EVENTARGUMENT": "" } data = urllib.urlencode(values) # 编码工作
req = urllib2.Request(url, data, headers) # 发送请求,传data表单,模拟User-
response = urllib2.urlopen(req) #接受反馈的信息
the_page = response.read() #读取反馈的内容

【Python网络爬虫二】使用urllib2抓去网页内容的更多相关文章

  1. Python网络爬虫(二)

    Urllib库之解析链接 Urllib库里有一个parse这个模块,定义了处理URL的标准接口,实现 URL 各部分的抽取,合并以及链接转换.它支持如下协议的 URL 处理:file.ftp.goph ...

  2. python 网络爬虫(二)

    一.编写第一个网络爬虫 为了抓取网站,我们需要下载含有感兴趣的网页,该过程一般被称为爬取(crawling).爬取一个网站有多种方法,而选择哪种方法更加合适,则取决于目标网站的结构. 首先探讨如何安全 ...

  3. python网络爬虫之自动化测试工具selenium[二]

    目录 前言 一.获取今日头条的评论信息(request请求获取json) 1.分析数据 2.获取数据 二.获取今日头条的评论信息(selenium请求获取) 1.分析数据 2.获取数据 房源案例(仅供 ...

  4. python 网络爬虫(二) BFS不断抓URL并放到文件中

    上一篇的python 网络爬虫(一) 简单demo 还不能叫爬虫,只能说基础吧,因为它没有自动化抓链接的功能. 本篇追加如下功能: [1]广度优先搜索不断抓URL,直到队列为空 [2]把所有的URL写 ...

  5. Python网络爬虫

    http://blog.csdn.net/pi9nc/article/details/9734437 一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛 ...

  6. 《精通python网络爬虫》笔记

    <精通python网络爬虫>韦玮 著 目录结构 第一章 什么是网络爬虫 第二章 爬虫技能概览 第三章 爬虫实现原理与实现技术 第四章 Urllib库与URLError异常处理 第五章 正则 ...

  7. Python网络爬虫与如何爬取段子的项目实例

    一.网络爬虫 Python爬虫开发工程师,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页 ...

  8. Python网络爬虫学习总结

    1.检查robots.txt 让爬虫了解爬取该网站时存在哪些限制. 最小化爬虫被封禁的可能,而且还能发现和网站结构相关的线索. 2.检查网站地图(robots.txt文件中发现的Sitemap文件) ...

  9. Python网络爬虫与信息提取

    1.Requests库入门 Requests安装 用管理员身份打开命令提示符: pip install requests 测试:打开IDLE: >>> import requests ...

随机推荐

  1. ActiveMQ笔记(6):消息延时投递

    在开发业务系统时,某些业务场景需要消息定时发送或延时发送(类似:飞信的短信定时发送需求),这时候就需要用到activemq的消息延时投递,详细的文档可参考官网说明,本文只介绍二种常用的用法: 注:本文 ...

  2. [LeetCode] Range Sum Query 2D - Immutable 二维区域和检索 - 不可变

    Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...

  3. EF使用CodeFirst方式生成数据库&技巧经验

    前言 EF已经发布很久了,也有越来越多的人在使用EF.如果你已经能够非常熟练的使用EF的功能,那么就不需要看了.本文意在将自己使用EF的方式记录下来备忘,也是为了给刚刚入门的同学一些指导.看完此文,你 ...

  4. 数据集偏斜 - class skew problem - 以SVM松弛变量为例

    原文 接下来要说的东西其实不是松弛变量本身,但由于是为了使用松弛变量才引入的,因此放在这里也算合适,那就是惩罚因子C.回头看一眼引入了松弛变量以后的优化问题: 注意其中C的位置,也可以回想一下C所起的 ...

  5. TCP的状态 (SYN, FIN, ACK, PSH, RST, URG)

    状态说明 SYN表示建立连接, FIN表示关闭连接, ACK表示响应, PSH表示有 DATA数据传输, RST表示连接重置. 其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同 ...

  6. iOS开发小技巧 -- tableView-section圆角边框解决方案

    [iOS开发]tableView-section圆角边框解决方案 tableView圆角边框解决方案 iOS 7之前,图下圆角边框很容易设置 iOS 7之后,tableviewcell的风格不再是圆角 ...

  7. 常用的一些linux命令

    最近接触到一些linux环境部署的事情,下面分享一些最近使用的比较频繁的一些linux命令~ 1.一次性移动多个文件到一个文件夹里 mv  被移动文件名 -t 目标文件夹 如:mv a.txt b.t ...

  8. Unity Animator动画状态机 深入理解(一)

    接触Unity以来就已经有了Animator,Animation用的少,不过也大概理解他俩之间的一个区别于联系. 图中其实就是Animator和Animation之间的区别于联系了,啊!你肯定会告诉我 ...

  9. iOS - 滑屏方案

    参考自:iOS开发- 通过ChildViewCotroller ViewController容器 产品增加新的版面,类似于网易新闻,百度新闻,腾讯新闻等新闻客户端首页多屏幕滑屏切换,找了一些开源代码研 ...

  10. JS点击子元素不触发父元素点击事件(js阻止冒泡)

    js阻止冒泡 <html> <title></title> <head> <meta charset="utf-8"> ...