5

ここでの私の最初の質問:)

私は学校のウェブサイトをクロールして、考えられるすべてのウェブページを探していました。しかし、リンクをテキストファイルに入れることができません。私は適切な権限を持っているので、それは問題ではありません。

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に入れたいと思います。

これを正しく行う方法はありますか?

4

1 に答える 1

1

CrawlSpiderのドキュメントを参照すると、複数のルールが同じリンクに一致する場合は、最初のルールのみが使用されます。

したがって、リダイレクトの結果として、最初のルールを使用すると、一見無限ループになります。2番目のルールは無視されるため、一致するリンクはいずれもparse_itemコールバックに渡されません。これは、出力ファイルがないことを意味します。

リダイレクトの問題を修正するには(そして、最初のルールを変更して2番目のルールと衝突しないように)調査する必要がありますが、完全にコメントアウトすると、次のようなリンクの出力ファイルが生成されます。

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

これらはすべて1行でまとめられているため、出力ファイルに書き込むたびに改行文字または区切り文字を追加することをお勧めします。

于 2012-12-07T01:49:27.277 に答える