在本地托管图像HTML页面,通过网络爬虫访问并下载图像

-1 投票
3 回答
747 浏览
提问于 2025-04-16 06:39

我用Python写了一个网络爬虫,它可以访问网页并下载网页上的图片。爬虫的代码是:

# ImageDownloader.py
# Finds and downloads all images from any given URL.

import urllib2 
import re from os.path
import basename from urlparse 
import urlsplit

url = "http://www.yahoo.com"

urlContent = urllib2.urlopen(url).read()

# HTML image tag: <img src="url" alt="some_text"/>

imgUrls = re.findall('img.*?src="(.*?)"', urlContent)

# download all images

for imgUrl in imgUrls:

     try:
         imgData = urllib2.urlopen(imgUrl).read()
         fileName = basename(urlsplit(imgUrl)[2])
         output = open(fileName,'wb')
         output.write(imgData)
         output.close()
     except:
         pass

因为我需要在课堂上做个演示,所以我搭建了一个简单的网页,上面有一些图片,并把它放在了localhost上。但是我写的这个爬虫却无法访问这个HTML页面,也无法下载图片。

有没有人能帮我解决一下,怎么让爬虫从localhost访问这个HTML页面呢?

3 个回答

0

在GitHub上复制这个项目,然后加一些代码,比如检查链接里有没有像[".jpg", ".png"等]这样的文件后缀,这样就可以找到图片并下载它们 :)
https://github.com/mouuff/MouCrawler/blob/master/moucrawler.py

0

你的正则表达式应该是 img.+?src=(.+?)"。一旦我把它改了,findall() 就返回了一个漂亮的图片网址列表,结果我的文件夹里满是图片。

不过,还是要听听 @knutin 的建议,特别是使用 BeautifulSoup 而不是正则表达式。虽然这里的正则表达式能用,但可能不够强大,无法处理你给它的所有 HTML。我最近自己也在做一些 HTML 数据抓取(没那么简单,主要是图片),结果非常顺利。

1

你需要把你的脚本指向本地服务器,而不是“www.yahoo.com”。

说到这里,有几个方面可以让这个程序更好:

  • 不要盲目捕捉错误后就不处理。应该让错误向上抛出,或者做一些有用的事情。

  • 对于像这样的简单脚本,可以创建一个函数来完成你的工作,然后在 if __name__ == '__main__': 这个块中调用它。

  • 与其用正则表达式来查找图片,不如使用 BeautifulSoup,这样可以让你的程序更有结构,不过这可能不是必需的。

  • 图片通常是通过 CSS 加入的,所以也可以去看看那部分。

撰写回答