首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下载的图像具有相同的文件大小,并且已损坏。

下载的图像具有相同的文件大小,并且已损坏。
EN

Stack Overflow用户
提问于 2022-04-15 08:22:14
回答 2查看 43关注 0票数 1

从图像刮板下载的所有图像具有相同的文件大小为130 kb,并且已损坏并且无法在图像查看器中看到。

我真的不知道问题出在哪里。

任何人都请给我一些关于这件事的建议。

代码语言:javascript
复制
import requests
import parsel
import os
import time

url = 'https://movie-screencaps.com/movie-directory/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
response = requests.get(url, headers=headers)
selector = parsel.Selector(response.text)

movie_list = selector.xpath('//div[@class="tagindex"]/ul/li')

for li in movie_list:
    movie_name = li.xpath('.//a/text()').get().strip()
    movie_url = li.xpath('.//a/@href').get()
    print(movie_name, movie_url)

    # dir = f'download/{movie_name}'
    dir = f'{movie_name}'

    if not os.path.exists(dir):
        os.makedirs(dir)
    
    page_response = requests.get(movie_url, headers=headers)
    page_selector = parsel.Selector(page_response.text)

    page_text = page_selector.xpath('//div[@class="wp-pagenavi"]/text()').get()
    last_page = int(page_text.split(' ')[-1])

    for page in range(1, last_page + 1):
        page_url = f'{movie_url}/page/{page}'
        print(f'===== Downloading from page {page} =====')

        image_response = requests.get(url=page_url, headers=headers)
        image_selector = parsel.Selector(image_response.text)

        images_url_list = image_selector.xpath('//div[@align="center"]/a/@href').getall()

        for image_url in images_url_list:
            image_data = requests.get(url=page_url, headers=headers).content
            # print(image_data)
            file_name = image_url.split('/')[-1]

            with open(f'{dir}/{file_name}', mode='wb') as f:
                f.write(image_data)
                print(file_name)
                
        time.sleep(2)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-15 08:57:55

问题是一个错误,您要为每个page_url获取image_url,而不是获取image_url

代码语言:javascript
复制
...
for image_url in images_url_list:
    image_data = requests.get(url=page_url, headers=headers).content
    file_name = image_url.split('/')[-1]
...

应:

代码语言:javascript
复制
...
for image_url in images_url_list:
    # Typo is here...
    image_data = requests.get(url=image_url, headers=headers).content
    file_name = image_url.split('/')[-1]
...
票数 1
EN

Stack Overflow用户

发布于 2022-04-15 08:57:36

我测试了你的代码,你只是犯了个小错误

改变:

代码语言:javascript
复制
image_data = requests.get(url=page_url, headers=headers).content

至:

代码语言:javascript
复制
image_data = requests.get(url=image_url, headers=headers).content

测试并运行良好:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71881707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档