Python学习过程(三)
今天我们来学习怎么从网络上抓取我们想得到的信息,要从网页上得到我们的信息,首先是从网络上通过url获取页面
的文本,先从最简单的开始,比如获取百度首页的html。
对应代码如下:
获取网页html源码(1)
import urllib2
import re
#定义一个通过url获取页面的函数
def getHtml(url):
response = urllib2.urlopen(url)
print response.read() getHtml("http://www.baidu.com")
我们还可以对这个函数进行细化:函数此时有返回值,返回的是我们的html源码
获取网页html源码(2)
import urllib2
import re
#定义一个通过url获取页面的函数,返回html源码
def getHtml(url):
request = urllib2.Request(url)
response = urllib2.urlopen(request)
html = response.read()
return html s = getHtml("http://www.baidu.com")
print s
获取到了我们需要的网页,接下来就是要把我们的网页保存到本地,代码如下,路径默认存放在D盘下的
PthonHtml文件夹下,保存的名称可以由我们传入参数进行设置
下载网页html源码到本地
import urllib2
import re
#定义一个通过url获取页面的函数,返回html源码
def getHtml(url,name):
request = urllib2.Request(url)
response = urllib2.urlopen(request)
html = response.read()
fileobject = open("D://PythonHtml//"+name+".html","w") #w代表写入
fileobject.write(html)
fileobject.close() getHtml("http://www.baidu.com","baidu")
这样我们就把网页下载到我们的本地文件夹下了,当然也可以不用下载,直接在线操作html也可以获取信息。
如果需要打开我们的文件的时候,可以这么写:
打开本地网页html源码
import urllib2
import re
#定义一个通过url获取页面的函数,返回html源码
def getHtml(url,name):
request = urllib2.Request(url)
response = urllib2.urlopen(request)
html = response.read()
fileobject = open("D://PythonHtml//"+name+".html","w") #w代表写入
fileobject.write(html)
fileobject.close()
#打开文件
def openHtml():
fileobject = open("D://PythonHtml//baidu.html","r")
html = fileobject.read()
print html openHtml()
接下来,就是我们需要去解析网了,有了我们的网页后,就可以提取里面的内容了,比如说现在我要获取网页中的a标签的内容
为了方便,我先用一段写好的网页代码做测试,在从网上获取html运行
解析html源码a标签的文本
import urllib2
import re
#获取a标签的文本
def getAlable():
html = """
<html>
<head></head>
<body>
<div>
<p>Hello</p>
<p><a href="http://www.baidu.com">我是a标签文本</a></p>
<a href="http://www.hao123.com">我也a标签</a>
</div>
</body>
</html>
"""
text = []
txts = re.findall(r"<a.*?>(.*?)<\/a>",html,re.I|re.S|re.M)
for i in txts:
text.append(i)
return text
s = getAlable()
for x in s:
print x
运行结果如下:

那么我们就可以写出一个函数,专门用来获取网页中a标签的文本了:
import urllib2
import re
#获取a标签的文本
def getAlable(html):
text = []
txts = re.findall(r"<a.*?>(.*?)<\/a>",html,re.I|re.S|re.M)
for i in txts:
text.append(i)
return text
获取了a标签的文本,我们同样也可以获取a标签的超链接url
解析html源码a标签的URL
def getAurl():
html = """
<html>
<head></head>
<body>
<div>
<p>Hello</p>
<p><a href="http://www.baidu.com">我是a标签文本</a></p>
<a href="http://www.hao123.com">我也a标签</a>
</div>
</body>
</html>
"""
url = []
txts = re.findall("(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')",html,re.I|re.S|re.M)
for i in txts:
print i
url.append(i)
return url getAurl()
运行结果:

那么有没有方法可以既可以获取文本,又可以获取url呢?
解析html源码a标签
def findLinks3():
html = '''
<html>
<head></head>
<body>
<div>
<p>Hello</p>
<p><a href="http://www.baidu.com">我是a标签文本</a></p>
<a href="http://www.hao123.com">我也a标签</a>
</div>
</body>
</html>
'''
l = []
urls = re.findall(r"<a.*?href=.*?<\/a>",html,re.I|re.S|re.M)
for i in urls:
print i
l.append(i)
return l findLinks3()
运行结果:

是不是觉得不够清爽?我就想要 我是a标签文本 :http://www.baidu.com 这么清爽的有木有???当然可以咯,就是把我获取到的在进行调用两函数吗!,
解析html源码a标签的文本和超链接
def getAurl(html):
url = []
txts = re.findall("(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')",html,re.I|re.S|re.M)
for i in txts:
url.append(i)
return url[0] def findLinks3(html):
l = []
urls = re.findall(r"<a.*?href=.*?<\/a>",html,re.I|re.S|re.M)
for i in urls:
l.append(i)
return l def getTextUrl(html):
d = {}
l = findLinks3(html)
for i in l:
text = getAlable(i)
url = getAurl(i)
d[text] = url
print text,url
return d
html = """
<html>
<head></head>
<body>
<div>
<p>Hello</p>
<p><a href="http://www.baidu.com">我是a标签文本</a></p>
<a href="http://www.hao123.com">我也a标签</a>
</div>
</body>
</html>
"""
getTextUrl(html)
运行结果:

结果这些练习,有没有发现这些函数好像都有些相似的地方,唯一区别就在于re.findall("这里的内容就是正则表达式"),正式因为里面的内容不同,所以搜索字符串得到的
就大不一样,换句话说,得到的结果完全由里面的正则表达式来决定。
为此,正则表达式就是我们接下来的重中之重!!!
下一节: python解析网页的内容
Python学习过程(三)的更多相关文章
- 学习Python的三种境界
前言 王国维在<人间词话>中将读书分为了三种境界:"古今之成大事业.大学问者,必经过三种之境界:'昨夜西风凋碧树,独上高楼,望尽天涯路'.此第一境也.'衣带渐宽终不悔,为伊消得人 ...
- 孤荷凌寒自学python第三十九天python 的线程锁Lock
孤荷凌寒自学python第三十九天python的线程锁Lock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 当多个线程同时操作一个文件等需要同时操作某一对象的情况发生时,很有可能发生冲突, ...
- 孤荷凌寒自学python第三十八天初识python的线程控制
孤荷凌寒自学python第三十八天初识python的线程控制 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.线程 在操作系统中存在着很多的可执行的应用程序,每个应用程序启动后,就可以看 ...
- 孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化
孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.什么是序列化与反序列化 序列化是指将内存中的数据进行指 ...
- 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容
孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...
- 孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习
孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.close() 当一个file对象执行此方法时,将关闭当前 ...
- 孤荷凌寒自学python第三十三天python的文件操作初识
孤荷凌寒自学python第三十三天python的文件操作初识 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天开始自学python的普通 文件操作部分的内容. 一.python的文件打开 ...
- 孤荷凌寒自学python第三十一天python的datetime.timedelta模块
孤荷凌寒自学python第三十一天python的datetime.timedelta模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) datetime.timedelta模块是一个表示 ...
- 孤荷凌寒自学python第三十天python的datetime.datetime模块
孤荷凌寒自学python第三十天python的datetime.datetime模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) datetime.datetime模块包含了:datet ...
- 孤荷凌寒自学python第三天 初识序列
孤荷凌寒自学python第三天 初识序列 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python的序列非常让我着迷,之前学习的其它编程语言中没有非常特别关注过序列这种类型的对象,而pyt ...
随机推荐
- 11-09SQLserver 基础-数据库之汇总练习45题
设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表 ...
- 10-09C#语言基础
10-09C#语言基础 第一课 一.新项目的建立:打开Visual studio2012,单击“文件→新建项目→模板isualC# Windows 控制台应用程序→确定”即可. 在新建的项目中,首 ...
- Delphi 询问框 汉化
Delphi 询问框 汉化 d:\program files (x86)\embarcadero\studio\17.0\source\fmx\FMX.Consts.pas add this file ...
- Linux split命令实例
曾经是否想要把一个大文件分割成多个小文件?比如一个5gb日志文件,我们需要把它分成多个小文件,这样我们才有可能使用普通的文本编辑器读取它.有时我们需要传输20gb的大文件到另一台服务器,这就需要我们把 ...
- Python单例模式剖析
在聊这之前我们首先要明确的是,单例模式在实际中的意义以及在python中具有实现的价值? 当前,相信有很多人支持单例模式,也有不少人反对,尤其是在python中,目前依旧具有很大的争议性.我们要在评论 ...
- BitmapCutter.Core 引用步骤
1 将BitmapCutter.Core项目或者dll引用到需要的项目底下. 2 前台页面 <img id="imgPreview1" title="点击上传图片& ...
- 基本的数据类型 void关键字 都存在类类型
- cookie禁用后的session
在浏览器地址后加:jsessionid="对应的32位字符串",照样可以访问. 在用户角度来说,浏览器开启,关闭就是一次会话. 在服务器角度来说,session失效才代表一次会话的 ...
- B和strong以及i和em的区别(转)
B和strong以及i和em的区别 (2013-12-31 13:58:35) 标签: b strong i em 搜索引擎 分类: 网页制作 一直以来都以为B和strong以及i和em是相同的效果, ...
- ZROI2018提高day5t2
传送门 分析 考场上傻了,写了个树剖还莫名weila...... 实际就是按顺序考虑每个点,然后从他往上找,一边走一边将走过的边染色,如果走到以前染过色的边就停下.对于每一个a[i]的答案就是之前走过 ...