Web页面html元素提取(图片链接) (python)

问题:Web页面html元素提取(图片链接) (python)

Web页面描述:

  • Web页面,一般是HTML页面,是Internet组织 信息的基础元素。Web页面元素提取是一类常见问题,在网络爬虫、浏览器等程序中有着不可或 缺的重要作用。

  • HTML指超文本标记语言,严格来说,HTML不是一种编程语言,而是一种对信息的标记语言, 对Web的内容、格式进行描述。

解决办法:

自动地从一个链接获取HTML页面是网络爬虫的功能,本实例功能可以整体分成如下4个步骤:

  • 步骤1: 读取保存在本地的html文件;
  • 步骤2:解析并提取其中的图片链接;
  • 步骤3:输出提取结果到屏幕;
  • 步骤4:保存提取结果为文件。

具体实现

  1. 根据上述步骤,可以写出主程序如下。其中设置 了4个函数getHTMLlines()、extractImageUrls()、 showResults()和saveResults()分别对应上述4个步骤。
def main():
    inputfile="C:\\Users\\Jiyao\\Desktop\\link.html"  #保存在本地的html网页链接名
    outputfile = 'C:\\Users\\Jiyao\\Desktop\\urls.txt' #期望存储的输出位置
    htmlLines = getHTMLlines(inputfile)
    imageUrls = extractImageUrls(htmlLines)
    showResults(imageUrls)
    saveResults(outputfile, imageUrls)
  1. getHTMLlines()函数读取HTML文件并内容, 并将结果转换为一个分行列表,为了兼容不同编码,建议在open()函数中增加encoding字段,设 置采用UTF-8编码打开文件。代码如下。
def getHTMLlines(htmlpath):
    f = open(htmlpath, "r", encoding='utf-8')
    ls = f.readlines()
    f.close()
    return ls
  1. extractImageUrls()是程序的核心,用于解析文 件并提取图像的URL。观察HTML可以发现,图 像采用img标签表示,例如:
   <img title="photo story" src="http://image.nationalgeographic.com.cn/2018/0122/20 180122042251164.jpg" width="968px" />

其中,<img开头是图像标签的特点,其中由src=所引导 的URL是这个图像的真实位置。每个URL都以http开头。 因此,可以通过字符串操作提取其中的图像链接。

def extractImageUrls(htmllist):
    urls = []
    for line in htmllist:
        if 'img' in line:
    #         url = line.split('src=')[-1].split('"')[1]
            url = line.split('src=')[-1]
            if 'http' in url and '='not in url:
                urls.append(url.split("\"")[1])
    #             urls.append(url)
    print(urls)
    return urls
  1. showResults()函数将获取的链接输出到屏幕上,增加一 个计数变量提供更好用户体验,代码如下。
def showResults(urls):
    count = 0
    for url in urls:
        print('第{:2}个URL:{}'.format(count, url))
        count += 1
  1. saveResults()保存结果到文件,代码如下。
def saveResults(filepath, urls):
    f = open(filepath, "w")
    for url in urls:
        f.write(url+"\n")
    f.close()

#主函数
if __name__ == '__main__':
    main()

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值