BeautifulSoup刮刀下载的图像已损坏

时间:2018-04-19 14:19:11

标签: python web-scraping beautifulsoup

我的代码非常需要帮助。我试图从一本书做练习,我完全遵循它。代码工作,它下载了图像。但是,下载的所有图像都已损坏。我不知道是什么导致它或我错过了什么。

感谢。

#! python3
# downloadXkcd.py - Downloads every single XKCD comic.
import requests, os, bs4

url = 'http://xkcd.com'
os.makedirs('xkcd', exist_ok=True)

while not url.endswith('#'):
    # Download the page.
    print('Downloading page %s...' % url)
    res = requests.get(url)
    res.raise_for_status()

    soup = bs4.BeautifulSoup(res.text,'html.parser')

    # Find the URL of the comic image.
    comicElem = soup.select('#comic img')
    if comicElem == []:
        print('Could not find comic image')
    else:
        comicUrl = comicElem[0].get('src')
        # Download the image.
        print('Downloading image %s' %(comicUrl))
        res.raise_for_status()

    # Save the image to ./xkcd.
    imagefile = open(os.path.join('xkcd', os.path.basename(comicUrl)), 'wb')
    for chunk in res.iter_content(100000):
        imagefile.write(chunk)
    imagefile.close()

    # Get the prev button's url
    prevlink = soup.select('a[rel="prev"]')[0]
    url = 'http://xkcd.com' + prevlink.get('href')

print('Done')

1 个答案:

答案 0 :(得分:0)

您正在向文件中写入错误的数据:

  

res .iter_content(100000)

中的块

res 是网页的数据。您应该使用网址 comicUrl 获取图片的数据。我想你忘了这句话:

print('Downloading image %s' %(comicUrl))
res = requests.get('http:' + comicUrl)

注意:我在网址前添加了 http:,因为您提取的图片网址缺少此功能。您应该定义一个函数来检查是否有必要添加此模式。