Scrapy:使用一个Spider从200个不同的域中抓取200个不同的URL

时间:2015-08-04 10:01:07

标签: python web-crawler scrapy

我需要为一个项目抓取200个不同的网站,我希望在启动爬虫程序时执行此操作,然后在接下来的几个小时内自行处理它。 URL将位于txt或csv文件中。 到目前为止,我有两种略有不同的方法。 第一次尝试:

class MySpider(CrawlSpider):

name = 'spiderName'

read_urls = open('../../urls.txt', 'r')
for url in read_urls.readlines():
    url = url.strip() 
    allowed_domains = [url[4:]]
    start_urls = ['http://' + url]

read_urls.close()

rules = (Rule(LinkExtractor(allow = ('', )), callback = 'parse_stuff', follow = True),)

def parse_stuff(self, response):
    hxs = Selector(response)
    sites = hxs.xpath('//html')
    items_main = []

    for site in sites:
        loader = ItemLoader(item = Items_Main(), response = response)
        loader.add_xpath('a_title', '//head/title/text()')
        ...
        items_main.append(loader.load_item())
        return items_main

此处txt文件中的仅为最后一个网址,但它正常运行,我可以限制allowed_domains

在Stackoverflow上找到的第二次尝试基本相同,除了start_urls = [url.strip() for url in read_urls.readlines()],它给出了以下错误raise ValueError('Missing scheme in request url: %s' % self._url)

1 个答案:

答案 0 :(得分:0)

您覆盖for循环中的列表。

在循环之前初始化列表并附加到循环内。

allowed_domains = []
start_urls = []
for url in read_urls.readlines():
    url = url.strip() 
    allowed_domains = allowed_domains + [url[4:]]
    start_urls = start_urls + ['http://' + url]