从 URL 列表下载图像(Scrapy 每个 url 发送 2 个请求)
Downloading Images from list of URLs (Scrapy sends 2 requests per url)
所以我 运行 上周使用了一个爬虫并生成了一个 CSV 文件,其中列出了我的项目所需的所有图像 URL。在将 CSV 读取到 python 列表后,我不确定如何使用 Scrapy 通过管道简单地下载它们。我尝试了很多东西,最近我让它开始工作,但它很丑而且不太正确。对于我的 10 张图片 URL 列表,Scrapy 完成了 20 个请求,即使正确存储了 10 张图片。我可能在做一些愚蠢的事情,因为我对 Scrapy 还很陌生,但是我已经通读了 Scrapy 的大部分文档,并且进行了相当多的试验和错误 google 结果。
我只是希望 Scrapy 每次 URL 发送一个请求并下载相应的图像。任何帮助,将不胜感激。我已经反对这个 3 天了。我的代码:
spider.py
import scrapy
import csv
import itertools
from ..items import ImgItem
urls=[]
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 row
class 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
如果您想查看其他文件,我可以编辑它来添加它们。我只是认为这就是问题所在,因为它在技术上确实有效。再次感谢,感谢任何帮助或重定向。
感谢 furas ,我发现改变
start_urls = urls
到
start_urls = ['<just one url, the main website>']
修复了我的请求数问题!谢谢furas.
另一种方法。
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
所以我 运行 上周使用了一个爬虫并生成了一个 CSV 文件,其中列出了我的项目所需的所有图像 URL。在将 CSV 读取到 python 列表后,我不确定如何使用 Scrapy 通过管道简单地下载它们。我尝试了很多东西,最近我让它开始工作,但它很丑而且不太正确。对于我的 10 张图片 URL 列表,Scrapy 完成了 20 个请求,即使正确存储了 10 张图片。我可能在做一些愚蠢的事情,因为我对 Scrapy 还很陌生,但是我已经通读了 Scrapy 的大部分文档,并且进行了相当多的试验和错误 google 结果。
我只是希望 Scrapy 每次 URL 发送一个请求并下载相应的图像。任何帮助,将不胜感激。我已经反对这个 3 天了。我的代码:
spider.py
import scrapy
import csv
import itertools
from ..items import ImgItem
urls=[]
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 row
class 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
如果您想查看其他文件,我可以编辑它来添加它们。我只是认为这就是问题所在,因为它在技术上确实有效。再次感谢,感谢任何帮助或重定向。
感谢 furas ,我发现改变
start_urls = urls
到
start_urls = ['<just one url, the main website>']
修复了我的请求数问题!谢谢furas.
另一种方法。
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