爬虫学习一系列:urllib2抓取网页内容
2015-06-16 23:27
211 查看
爬虫学习一系列:urllib2抓取网页内容
所谓网页抓取,就是把URL地址中指定的网络资源从网络中读取出来,保存到本地。我们平时在浏览器中通过网址浏览网页,只不过我们看到的是解析过的页面效果,而通过程序获取的则是程序源代码。我们通过使用Python中urllib2来获取网页的URL资源,最简单方法就是调用urlopen 方法。
HTTP是基于请求和应答机制—客户端提出请求,服务端提供应答。
urllib2用一个Request对象来映射你提出的HTTP请求,通过调用urlopen来传入Request对象,将返回一个相关请求response对象,这个应答对象如同一个文件对象,所以我们可以在Response对象中调用read()方法来读取。
在HTTP请求时,我们还可以发送data表单数据。一般的HTML表单,data需要编码成标准形成,然后作为data参数传到Request对象。而相应的编码工作就不能用urllib2来完成了,而是我们urllib组件。
但是我有一个疑问:就是这一份代码并不能运行,我还不知道传入数据表单的作用是什么,或者我们在抓cnblogs页面时,传入登录的信息,是不是我们就可以登录博客园了啊,所以在这里请教一下大牛,先感谢了。
关于正则表达式的很多具体用法,我后面会边学边为大家讲解的,这里先略过。
我们可以通过Python爬虫来获取以下网页中新闻标题和新闻的ID。
我们运行这一份代码看看结果是什么样的,是否已经成功获取。
所谓网页抓取,就是把URL地址中指定的网络资源从网络中读取出来,保存到本地。我们平时在浏览器中通过网址浏览网页,只不过我们看到的是解析过的页面效果,而通过程序获取的则是程序源代码。我们通过使用Python中urllib2来获取网页的URL资源,最简单方法就是调用urlopen 方法。
# coding : utf-8 import urllib2 import urllib url = 'http://www.baidu.com' res = urllib2.urlopen(url) print res.read()
HTTP是基于请求和应答机制—客户端提出请求,服务端提供应答。
urllib2用一个Request对象来映射你提出的HTTP请求,通过调用urlopen来传入Request对象,将返回一个相关请求response对象,这个应答对象如同一个文件对象,所以我们可以在Response对象中调用read()方法来读取。
# coding : utf-8 import urllib2 import urllib url = 'http://www.baidu.com' request = urllib2.Request(url) res = urllib2.urlopen(request) print res.read()
在HTTP请求时,我们还可以发送data表单数据。一般的HTML表单,data需要编码成标准形成,然后作为data参数传到Request对象。而相应的编码工作就不能用urllib2来完成了,而是我们urllib组件。
import urllib import urllib2 url = 'http://www.someserver.com/register.cgi' values = {'name' : 'BaiYiShaoNian', 'localtion' : 'ChongQing', 'language' : 'Python', } data = urllib.urlencode(values) req = urllib2.Request(url,data) response = urllib2.urlopen(req) the_page = response.read() print the_page
但是我有一个疑问:就是这一份代码并不能运行,我还不知道传入数据表单的作用是什么,或者我们在抓cnblogs页面时,传入登录的信息,是不是我们就可以登录博客园了啊,所以在这里请教一下大牛,先感谢了。
通过正则表达式来获取网页部分信息
正则表达式,又称为正则表示法、常规表示法。正则表达式使用单个字符串来描述、匹配一系列符号某个句法规则的字符串。通俗的说,正则表达式就是在程序中定义了字符串的某种规则,然后我们在网页源代码中找出符合这种规则的所有代码语句,不符合的就淘汰不要。关于正则表达式的很多具体用法,我后面会边学边为大家讲解的,这里先略过。
我们可以通过Python爬虫来获取以下网页中新闻标题和新闻的ID。
# -*- coding: utf-8 -*- import urllib2 import re # 1.获取访问页面的HMTL url = "http://www.nenu.edu.cn/newslist.php?cid=1" response = urllib2.urlopen(url) html = response.read() # 2.根据正则表达式抓取特定内容 r = re.compile(r'<a href="intramural/content/news/(?P<ID>.{5}).*" target="_blank">(?P<Title>.+)</a>') news = r.findall(html) for i in range(len(news)): ID = news[i][0] title = news[i][1] # data = data.decode('utf-8') # title = title.decode('utf-8') print title + " " + ID + " "
我们运行这一份代码看看结果是什么样的,是否已经成功获取。
相关文章推荐
- js 监听键盘操作
- 不要一辈子靠技术生存
- 如何学习:学习困难科目的实用思维(Coursera课程笔记,2015.6.16)
- TFS (Team Foundation Server) 2013集成Maven构建
- 黑马程序员————BufferReader类,BuffereWriter类使用示例。
- 中断 和 异常
- Uva - 816 - Abbott's Revenge
- CodeBlock (针对13.12)使用的一些笔记记录
- 小数的十进制转二进制
- Uva - 816 - Abbott's Revenge
- 在Ubuntu 14.04 64bit上查看硬件配置信息
- 进程间通信(4) - 管道(pipe)
- Hadoop技术内幕:环境准备(1)
- 深入学习ContentProvider
- 判断一个数是否是平方数
- Erlang使用相关笔记
- 深入学习ContentProvider 2015-06-16 23:24 13人阅读 评论(0) 收藏
- 控制器[2]
- com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'sa' 登录失败。
- mysql之SQL查询原理