启用以使用 Beautiful Soup 获取特定网站的 img 标签
Posted
技术标签:
【中文标题】启用以使用 Beautiful Soup 获取特定网站的 img 标签【英文标题】:Enable to get img tag for a specific site using Beautiful Soup 【发布时间】:2017-07-28 16:02:44 【问题描述】:我是抓取和保存文件中的图像的初学者,我引用了其中的代码 This answer.
这是我正在使用的代码片段:
from bs4 import BeautifulSoup
import urllib2
import shutil
import requests
from urlparse import urljoin
import sys
import time
def make_soup(url):
req = urllib2.Request(url, headers='User-Agent' : "Magic Browser")
html = urllib2.urlopen(req)
return BeautifulSoup(html, 'html.parser')
def get_images(url):
soup = make_soup(url)
images = [img for img in soup.findAll('img')]
print (str(len(images)) + " images found.")
print 'Downloading images to current working directory.'
image_links = [each.get('src') for each in images]
for each in image_links:
try:
filename = each.strip().split('/')[-1].strip()
src = urljoin(url, each)
print 'Getting: ' + filename
response = requests.get(src, stream=True)
# delay to avoid corrupted previews
time.sleep(1)
with open(filename, 'wb') as out_file:
shutil.copyfileobj(response.raw, out_file)
except:
print ' An error occured. Continuing.'
print 'Done.'
if __name__ == '__main__':
#url = sys.argv[1]
get_images('https://i1.adis.ws/i/jpl/sz_093868_a?qlt=80&w=600&h=672&v=1')
虽然我从许多网站获得了结果,但我在代码中使用的 url 不起作用,我希望代码仅能用于此。
请帮我解决这个问题,或者网址有什么问题。
【问题讨论】:
不工作是什么意思?你期待什么,而发生了什么? 在执行 get_images 函数之前,我使用这些行 b=a.findAll('img') 来检查 html 解析输出,并且我还尝试使用除 lxml 之外的各种解析器。 我希望将图像保存在本地,但 beautifulSoup 的 html 解析输出不正确 你不是return
make_soup
函数中的任何东西,它对其他网站如何工作?
我早些时候退回了它,但由于它是空的而无法得到任何东西
【参考方案1】:
您问题中的链接本身就是一张图片。
>>> import requests
>>> r = requests.get('https://i1.adis.ws/i/jpl/sz_093868_a?qlt=80&w=600&h=672&v=1')
>>> r.headers
'Content-Length': '28281', 'X-Amp-Published': 'Sat, 21 Jun 2014 18:53:54 GMT', 'Date': 'Wed, 08 Mar 2017 08:53:53 GMT', 'Accept-Ranges': 'bytes', 'Expires': 'Wed, 08 Mar 2017 09:23:53 GMT', 'Server': 'Unknown', 'X-Amp-Source-Width': '1785', 'Connection': 'keep-alive', 'Edge-Control': 'max-age=14400', 'Cache-Control': 's-maxage=14400, max-age=1800', 'X-Amp-Source-Height': '2000', 'Access-Control-Allow-Origin': '*', 'X-Req-ID': 'ITrIxNFmOt', 'Content-Type': 'image/jpeg'
>>> r.headers['Content-Type']
'image/jpeg'
因此,您可能需要先检查Content-Type
,然后查看是否要浏览链接(抓取更多网址)并从中提取图像。
【讨论】:
以上是关于启用以使用 Beautiful Soup 获取特定网站的 img 标签的主要内容,如果未能解决你的问题,请参考以下文章
Python爬虫编程思想(52):使用Beautiful Soup选择子节点