本实例以一个HTML形式的Web页面为输入,对国家地理中文网进行元素分析,提取,输出并保存页面中包含的图片链接.重点在于自顶向下的设计理念.
首先打开如下网页:四川,到底有啥好的?|文章|中国国家地理网
在页面上单机右键点击'查看源代码'将代码复制并保存为sichuan.html
本实例的整体功能可以分为如下四步:
1:读取保存在本地的html文件;
2:解析并提取其中的图片链接;
3:输出提取结果到屏幕;
4:保存提取结果为文件;
根据上述步骤,可以写出主程序如下(设置了四个函数getHTMLlines(),extractImageUrls(),showResults(),saveResylts()分别对应上述四个步骤).
def main():
inputfile = 'nationalgeographic.html'
outputfile = 'nationalgeographic-yrls.txt'
htmlLines = getHTMLlines(inputfile)
imageUrls = extractImageUrls(htmlLines)
showResults(imageUrls)
saveResults(outputfile,imageUrls)
定义main函数的目的是为了让代码更清晰.
getHTMLlines函数读取html文件内容,并将结果转换为一个分行列表.为了兼容不同编码,可以在open中加入encoding片段,设置采用UTF-8编码打开文件.代码如下.
def getHTMLlines(htmlpath):
f = open(htmlpath,"r",encoding='utf-8')
Is = f.readlines()
f.close
return Is
extractImageUrls是程序的核心,用于解析文件并提取图像的URL.观察HTML可以发现,图像采用img标签表示.src所引导的URL是这个图像的真实位置,因此可以通过字符串索引提取链接,代码如下:
def extractImageUrls(htmllist):
urls = []
for line in htmllist:
if 'img' in line:
url = line.spilt('src=')[-1].
if 'http' in url:
urls.append(url)
return urls
showResults函数将获取的链接输出到屏幕上,增加一个计数变量更好的提升用户体验,代码如下:
def showResults(urls):
cpunt = 0
for url in urls:
print('第{.2}个URL:{}'.format(count,url))
count += 1
saveResults保存结果到文件,代码如下:
def saveResults(filepath,urls):
f = open(filepath,"w")
for url in urls:
f.write(url+"\n")
f.close
此时调用main函数即可,全部代码如下:
def getHTMLlines(htmlpath):
f = open(htmlpath,"r",encoding='utf-8')
ls = f.readlines()
f.close()
return ls
def extractImageUrls(htmllist):
urls = []
for line in htmllist:
if 'img' in line:
url = line.split('src=')[-1]
if 'http' in url:
urls.append(url)
return urls
def showResults(urls):
count = 0
for url in urls:
print('第{:2}个URL:{}'.format(count,url))
count += 1
def saveResults(filepath,urls):
f = open(filepath,"w")
for url in urls:
f.write(url+"\n")
f.close()
def main():
inputfile = 'sichuan.html'
outputfile = 'sichuan-urls.txt'
htmlLines = getHTMLlines(inputfile)
imageUrls = extractImageUrls(htmlLines)
showResults(imageUrls)
saveResults(outputfile,imageUrls)
main()
1226

被折叠的 条评论
为什么被折叠?



