启用以使用 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 解析输出不正确 你不是returnmake_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选择子节点

使用Beautiful Soup 4提取特定列表项

Python爬虫编程思想(59): 用Beautiful Soup CSS选择器获取属性值与文本

Beautiful Soup 为特定的 div 找到孩子

Python爬虫学习Beautiful Soup库

从页面中获取所有链接 Beautiful Soup