对python内置函数的实例应用--web页面元素提取

本实例以一个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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值