为了账号安全,请及时绑定邮箱和手机立即绑定

从 URL 列表下载图像(Scrapy 向每个 URL 发送 2 个请求)

从 URL 列表下载图像(Scrapy 向每个 URL 发送 2 个请求)

千万里不及你 2023-02-07 09:33:43
所以我上周运行了一个爬虫并生成了一个 CSV 文件,其中列出了我的项目所需的所有图像 URL。将 CSV 文件读取到 python 列表后,我不确定如何使用 Scrapy 通过管道简单地下载它们。我尝试了很多东西,最近我让它开始工作,但它很丑而且不太正确。对于我的 10 个图像 URL 列表,Scrapy 完成了 20 个请求的抓取,即使 10 个图像被正确存储。我可能在做一些愚蠢的事情,因为我对 Scrapy 还很陌生,但我已经通读了 Scrapy 的大部分文档,并通过谷歌搜索结果进行了多次试验和错误。我只是想让 Scrapy 为每个 URL 发送一个请求并下载相应的图像。任何帮助,将不胜感激。我已经反对这个 3 天了。我的代码:蜘蛛.pyimport scrapyimport csvimport itertoolsfrom ..items import ImgItemurls=[]with open('E:/Chris/imgUrls.csv') as csvDataFile:    csvReader = csv.reader(csvDataFile)    for elem in itertools.islice(csvReader, 0, 10):        urls.append(elem[0])                #Just doing first 10 for testing                                            #My Csv file is not the problem                                            # ...1 url per rowclass DwImgSpider(scrapy.Spider):    name = 'dw-img'    start_urls = urls    def parse(self, response):        item = ImgItem()        img_urls = urls        item['image_urls'] = img_urls        return item如果您想查看其他文件,我可以编辑它以添加它们。我只是认为这就是问题所在,因为它在技术上确实有效。再次感谢,感谢任何帮助或重定向。
查看完整描述

2 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

另一种方法。


import csv,os

import itertools

from simplified_scrapy import Spider, SimplifiedMain, utils

class ImageSpider(Spider):

  name = 'images'

  start_urls = []

  def __init__(self):

      with open('E:/Chris/imgUrls.csv') as csvDataFile:

          csvReader = csv.reader(csvDataFile)

          for elem in itertools.islice(csvReader, 0, 10):

              self.start_urls.append(elem[0])

      Spider.__init__(self,self.name) # Necessary

      if(not os.path.exists('images/')):

          os.mkdir('images/')

          

  def afterResponse(self, response, url, error=None, extra=None):

    try:

        utils.saveResponseAsFile(response,'images/','image')

    except Exception as err:

        print (err)

    return None 


SimplifiedMain.startThread(ImageSpider()) # Start download


查看完整回答
反对 回复 2023-02-07
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

感谢furas,我发现改变

start_urls = urls

start_urls = ['<just one url, the main website>']

修复了我的请求数量问题!谢谢你furas


查看完整回答
反对 回复 2023-02-07
  • 2 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信