使用Scrapy抓取存储在csv中的URL



我正在尝试实现一个Scrapy Spider,它读取一个csv文件。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

解决方案按我的意愿执行,但几秒钟后停止,然后停止。我猜我遇到的问题是由于太多的联系。我也尝试过在一些棘手的项目中设置.py,比如:

RETRY_TIMES = 0
CONCURRENT_REQUESTS = 32

有人有更稳定的解决方案吗?

谢谢你能提供的任何帮助。

一种方法是使用Scrapy。

Scrapy可以让你发送http请求。以下是相关文档:https://docs.scrapy.org/en/latest/topics/request-response.html#scrapy.http.Request

另一种方法是在Python中使用请求库。相关文档可在此处找到:https://requests.readthedocs.io/en/master/.

最新更新