尝试使用scrapy抓取网页的所有链接。但是我无法在页面上输出链接

时间:2012-12-06 09:44:01

标签: python scrapy web-crawler

我的第一个问题:)

我试图抓住我的学校网站,查找所有可能的网页。但我无法将链接转换为文本文件。我有正确的权限,所以这不是问题。

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item
from scrapy.spider import BaseSpider

class hsleidenSpider(CrawlSpider):
        name = "hsleiden1"
        allowed_domains = ["hsleiden.nl"]
        start_urls = ["http://hsleiden.nl"]

        # allow=() is used to match all links
        rules = [
        Rule(SgmlLinkExtractor(allow=()), follow=True),
        Rule(SgmlLinkExtractor(allow=()), callback='parse_item')
        ]

        def parse_item(self, response):
                x = HtmlXPathSelector(response)

                filename = "hsleiden-output.txt"
                open(filename, 'ab').write(response.url)

所以我只在hsleiden.nl页面上扫描。我想将response.url放入文本文件hsleiden-output.txt。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

参考CrawlSpider的文档,如果多个规则匹配相同的链接,则只使用第一个。

因此,作为重定向的结果,使用第一个规则会导致看似无限的循环。由于忽略了第二个规则,所以没有匹配的链接传递给parse_item回调,这意味着没有输出文件。

需要进行一些调查来修复重定向问题(并修改第一个规则,使其不与第二个规则发生冲突),但完全注释掉它会产生如下链接的输出文件:

  

http://www.hsleiden.nl/activiteitenkalenderhttp://www.hsleiden.nlhttp://www.hsleiden.nl/vind-je-studie/proefstuderenhttp://www.hsleiden.nl/studiumgenerale

它们全部集中在一行,因此您可能希望每次写入输出文件时都添加换行符或分隔符。