0


スクレーパーでクローラーを作成しています。
私のスパイダーは、リンクのリストと次のページへのリンクを含む開始ページに移動する必要があります。
次に、各リンクをたどり、このリンクに移動し、情報を取得してメインページに戻る必要があります。
最後に、スパイダーがページの各リンクをたどると、次のページに移動して最初からやり直します。

        class jiwire(CrawlSpider):
        name = "example"
        allowed_domains = ["example.ndd"]
            start_urls = ["page.example.ndd"]   

            rules = (Rule (SgmlLinkExtractor(allow=("next-page\.htm", ),restrict_xpaths=('//div[@class="paging"]',)), callback="parse_items", follow= True),)

        def parse_items(self, response):
                hxs = HtmlXPathSelector(response)
                links = hxs.select('//td[@class="desc"]')
                for link in links :
                    link = title.select("h3/a/@href").extract()
                    request = Request("http://v4.jiwire.com/" + str(name), callback=self.parse_sub)
                    return(request)


        def parse_sub(self, response):
            hxs = HtmlXPathSelector(response)
            name = hxs.select('//div[@id="content"]/div[@class="header"]/h2/text()').extract()
            print name

コードを説明します: 次のページに従うルールを定義しました。
現在のページの各リンクをたどるために、リンクを取得したリクエスト オブジェクトを作成し、このオブジェクトを返します。
通常、リクエストが返されるたびに、parse_sub 関数で「印刷名」を確認する必要があります。
しかし、フォローされているリンクは 1 つだけです (すべてではありません)。理由がわかりません。
リンクをうまくクロールし、リクエストオブジェクトはうまく作成されますが、ページごとに1回だけparse_subに入ります。

手伝って頂けますか ?
どうもありがとう

4

1 に答える 1

1

戻りました !私の問題は、return ステートメントから来ています。

ソリューション:

    for link in links :
        link = title.select("h3/a/@href").extract()
        request = Request(link, callback=self.parse_hotspot)
        yield request
于 2013-04-23T16:48:32.020 に答える