【发布时间】:2018-10-29 18:07:43
【问题描述】:
我对数据抓取不是很熟悉,我无法使用漂亮的汤下载图像。
我需要从网站下载所有图片。我正在使用以下代码:
import re
import requests
from bs4 import BeautifulSoup
site = 'http://someurl.org/'
response = requests.get(site)
soup = BeautifulSoup(response.text, 'html.parser')
# img_tags = soup.findAll('img')
img_tags = soup.findAll('img',{"src":True})
print('img_tags: ')
print(img_tags)
urls = [img['src'] for img in img_tags]
print('urls: ')
print(urls)
for url in urls:
filename = re.search(r'/([\w_-]+[.](jpg|gif|png))$', url)
with open(filename.group(1), 'wb') as f:
if 'http' not in url:
# sometimes an image source can be relative
# if it is provide the base url which also happens
# to be the site variable atm.
url = '{}{}'.format(site, url)
response = requests.get(url)
f.write(response.content)
但是,这会忽略页面上所有具有与此类似的 html 的图像:
<img data-bind="attr: { src: thumbURL() }" src="/assets/images/submissions/abfc-2345345234.thumb.png">
我认为这是因为 data 属性也包含字符串“src”,但我似乎无法弄清楚。
【问题讨论】:
-
如果这是实际的 HTML 代码,则其中包含不平衡的引号。因此,您需要检索所有带有数据绑定值的 img 标签,并且必须提取正确的值。
-
我刚刚编辑过,我不小心删除了引用但这是我在检查页面时看到的。
-
能走多远?是打印
img_tags,还是urls? -
它会打印 img_tags 和 url,但完全忽略了我关心的图像,只打印页面中的社交媒体图标图像。
标签: python beautifulsoup