问题:Web页面html元素提取(图片链接) (python)
Web页面描述:
-
Web页面,一般是HTML页面,是Internet组织 信息的基础元素。Web页面元素提取是一类常见问题,在网络爬虫、浏览器等程序中有着不可或 缺的重要作用。
-
HTML指超文本标记语言,严格来说,HTML不是一种编程语言,而是一种对信息的标记语言, 对Web的内容、格式进行描述。
解决办法:
自动地从一个链接获取HTML页面是网络爬虫的功能,本实例功能可以整体分成如下4个步骤:
- 步骤1: 读取保存在本地的html文件;
- 步骤2:解析并提取其中的图片链接;
- 步骤3:输出提取结果到屏幕;
- 步骤4:保存提取结果为文件。
具体实现
- 根据上述步骤,可以写出主程序如下。其中设置 了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)
- getHTMLlines()函数读取HTML文件并内容, 并将结果转换为一个分行列表,为了兼容不同编码,建议在open()函数中增加encoding字段,设 置采用UTF-8编码打开文件。代码如下。
def getHTMLlines(htmlpath):
f = open(htmlpath, "r", encoding='utf-8')
ls = f.readlines()
f.close()
return ls
- 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
- showResults()函数将获取的链接输出到屏幕上,增加一 个计数变量提供更好用户体验,代码如下。
def showResults(urls):
count = 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()
#主函数
if __name__ == '__main__':
main()
运行结果: