迭代scrapy爬行包含URL的几个文本文件

时间:2015-01-09 16:50:58

标签: python scrapy web-crawler

我已经搜索了这个问题的答案,但在这里找不到(但如果我忽略了它,请原谅我。)

我有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()

1 个答案:

答案 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