【问题标题】:Relative path to Absolute paths of images scraped from websites in PythonPython中从网站上抓取的图像的绝对路径的相对路径
【发布时间】:2017-11-28 13:13:50
【问题描述】:

Iv 抓取了一个网站以获取随后将被下载的图像,但是为了能够下载它们,我需要找到图像的绝对路径,因为这是 iv 设法抓取的:

2001.JPG big.jpg pics.gif gchq.jpg

所有这些图像都存储在变量images 中,我正在寻找一个可以一次找到所有绝对路径并将它们存储在变量中的函数?

这是我用来抓取图像的代码:

images = re.findall(r'src=[\"|\']([^\"|\']+)[\"|\']',webpage.decode())

(我在这里查看了各种其他类似的问题,但似乎没有一个可以同时处理多个图像)

如果有人能指出我正确的方向,那就太好了,还有任何关于下载它们的建议。

【问题讨论】:

  • 向我们展示(一个最小示例)您用来抓取图像名称的代码。最简单的方法是在此步骤中获取总路径
  • @MaartenFabré 编辑了它
  • 不要使用正则表达式来处理 HTML! BeautifulSoup 更简单,更健壮。对于您问题的其余部分,HTTP 协议表示相对路径是相对于当前 url 的父级的。

标签: python python-3.x web-scraping relative-path absolute-path


【解决方案1】:

使用 BeautifulSoup 和 urllib,您应该能够收集网页中的图像,迭代并下载它们。

from urllib import urlretrieve
import urlparse
from bs4 import BeautifulSoup
import urllib2

url = "<your_url>"
soup = BeautifulSoup(urllib2.urlopen(url))
for img in soup.select('img'):
    img_url = urlparse.urljoin(url, img['src'])
    file_name = img['src'].split('/')[-1]
    urlretrieve(img_url, file_name)

Python 3 兼容代码,

from bs4 import BeautifulSoup
from urllib.request import urlopen, urlretrieve
from urllib.parse import urljoin

url = "<url>"
soup = BeautifulSoup(urlopen(url))

for img in soup.find_all('img'):
    img_url = urljoin(url, img['src'])
    file_name = img['src'].split('/')[-1]
    urlretrieve(img_url, file_name)

【讨论】:

  • 这在 python 3.6 中有效吗?有些模块不是重命名了吗?
  • @JDoe 绝对正确!我将在此处添加 python 3. 兼容代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-24
  • 1970-01-01
相关资源
最近更新 更多