我已经搜索了这个问题的答案,但在这里找不到(但如果我忽略了它,请原谅我。)
我有20个文本文件,每个文件包含数千个URL(称为这些文本文件test1.txt - test20.txt)。我的目标是将scrapy抓取遍历存储在这20个文本文件中的每个文件中的URL,并将数据存储在20个csv文件中。有没有方便的方法来做到这一点?我已经粘贴了下面的蜘蛛,它成功地抓取了第一个文件中的URL并保存了数据。
import scrapy
from scrapy.spider import Spider
from scrapy.selector import Selector
from proquest.items import ProquestItem
import HTMLParser
import xml.sax.saxutils as saxutils
class ProquestSpider(Spider):
name = 'proquest'
f=open("/Users/danny/tutorial/test1.txt")
start_urls=[url.strip() for url in f.readlines()]
def parse(self, response):
hxs = Selector(response)
items = []
item = ProquestItem()
item['date'] = hxs.xpath('./NumericPubDate/text()').extract()
item['rectype'] = hxs.xpath('./RecordTitle/text()').extract()
item['pubtitle'] = hxs.xpath('./PubTitle/text()').extract()
item['fulltext'] = hxs.xpath('./FullText/text()').extract()
items.append(item)
with open('/Users/danny/tutorial/log.txt', 'a') as f:
## f.write('{0}, {1}, {2}\n'.format(item['date'], item['rectype'], item['pubtitle']))
f.write('{0}, {1}, {2}, {3}\n'.format(item['date'], item['rectype'], item['pubtitle'], item['fulltext']))
return items
f.close()
答案 0 :(得分:0)
您可以使用__init__
功能通过文件中的读取值启动蜘蛛。
类似的东西:
def __init__(self, *args, **kwargs):
super(ProquestSpider, self).__init__(*args, **kwargs)
self.start_urls = []
for i in range(21): # will go 1 to 20
with open('file{}.txt'.format(i), 'w') as url_file: #open a file
self.start_urls.extend([url.strip() for url in url_file.read().splitlines()])
这将使用.txt文件中的值填充start_urls