【问题标题】:Scrapy is not able to download the images from a URLScrapy 无法从 URL 下载图像
【发布时间】:2018-09-29 08:02:42
【问题描述】:

我正在使用 scrapy 下载图像,但它无法正常工作。我得到了所需文件夹中的 URL,但没有得到图像。

这是我的 items.py:

class Brand(scrapy.Item):
    name = scrapy.Field()
    url = scrapy.Field()
    brand_image = scrapy.Field()
    image_urls = scrapy.Field()
    images = scrapy.Field()
    pass

这是我的蜘蛛代码:

import scrapy
import json
from scraper.items import Brand


class QuotesSpider(scrapy.Spider):
    name = "brandDetails"

    def start_requests(self):
        with open('brands.json') as data_file:
            data_item = json.load(data_file)
        urls = list()
        for item in data_item:
            urls.append(item["url"])
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        item = Brand()
        name = response.css("div.th::text").extract_first()
        name = name.replace('Products of ', '')
        item['name'] = name
        item['url'] = response.url
        urls = response.css("div.productimage img::attr(src)").extract_first()
        urls = "http://ozhat-turkiye.com" + urls
        item['image_urls'] = urls
        yield item

这里是设置代码:

BOT_NAME = 'scraper'
SPIDER_MODULES = ['scraper.spiders']
NEWSPIDER_MODULE = 'scraper.spiders'
IMAGE_STORE = 'C:/Users/SHAHRUKH/Desktop/AI'
ITEM_PIPELINES = {
  'scrapy.pipelines.images.ImagesPipeline': 1
}
DOWNLOAD_DELAY = 2

这是我的程序的输出:

 {'image_urls': 'http://ozhat-turkiye.com/get.aspx?id=1882267',
 'name': ' Camille Bauer',
 'url': 'http://ozhat-turkiye.com/en/camille-bauer/'}

【问题讨论】:

  • 我建议你使用yield Request(url)下载图片,然后保存到文件,而不是使用Image Pipeline

标签: python scrapy scrapy-spider scrapy-pipeline scrapy-shell


【解决方案1】:

您可以下载这些图像并使用 urllib 存储它。

import urllib     

urllib.urlretrieve(img_url, filename)

例如代码检查here

【讨论】:

  • 有没有办法通过使用 selenium python scrapy 来检查 javascript 错误?
  • 基本上我有一个 selenium 代码,它点击分页的下一个按钮,分页数据来自 javascript 函数,但一段时间后,selenum 点击功能对我不起作用并留在同一页面上还有其他方法可以点击scrapy python中的按钮吗?
  • 事情是分页可以不使用selenium本身来处理,不需要点击它。url中会有一些模式会改变,对应于不同的页面,例如:abcd.com/productlist /page=1/someid 所以你可以硬编码要抓取的页数或获取页数并提供它,在上面的示例中实现了相同的操作。
  • 是的,我知道,但在这种情况下,分页下一页按钮在 href 属性中有一个 javascript 函数,这就是为什么我需要 selenium 但 selenium 不能始终如一地工作
  • 如果你可以在 python 中使用请求模块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
  • 2020-05-12
  • 1970-01-01
  • 2018-09-24
相关资源
最近更新 更多