【发布时间】:2020-03-28 01:33:40
【问题描述】:
我正在尝试实现一个读取 csv 文件的 Scrapy Spider。 csv 文件将包含两列,如下所示:
1,google.com
2,microsoft.com
3,netflix.com
...
蜘蛛现在应该将这些站点的完整 HTML 代码存储在指定目录中,并将抓取的 url + 存储的 HTML 文件的路径插入 JSON 数组文件。
到目前为止,我找到了以下解决方案:
class RankingSpider(scrapy.Spider):
name = 'non-xss'
start_urls = []
custom_settings = {
'CLOSESPIDER_ITEMCOUNT': '50000', # Nach x Itmes Crawler beenden
'FILES_STORE': 'non-xss/html/',
'METAREFRESH_ENABLED': False
}
def __init__(self, *args, **kwargs):
super().__init__(**kwargs)
with open('/home/marcel/Desktop/crawl/top-1m.csv', 'r') as f:
reader = csv.reader(f)
n = 0
for row in reader:
if n >= 0 and n < 10000:
self.start_urls.extend(['https://www.' + row[1] + '/'])
print(row[1])
n += 1
def parse(self, response):
item = UmbrellaItem()
filename = sha1(response.url.encode()).hexdigest()
with open(self.custom_settings['FILES_STORE'] + filename, 'wb') as f:
f.write(response.body)
item['url'] = response.url
item['file_path'] = self.custom_settings['FILES_STORE'] + filename
return item
该解决方案执行我希望它执行的操作,但它会在几秒钟后停止,然后停止。我猜我遇到了太多连接的问题。 我还尝试在以下scrapy项目中设置settings.py:
RETRY_TIMES = 0
CONCURRENT_REQUESTS = 32
有人有更稳定的解决方案吗?
感谢您提供的任何帮助。
【问题讨论】:
-
你的意思是两列吗?
-
是的,对不起,我指的是第二句中的列。
-
某些目标网站可能故意让您的请求超时。你有超时吗?日志说什么?
标签: python csv scrapy web-crawler