質問

Scrapyドキュメントのこのクモの例をご覧ください。説明は次のとおりです。

  

このスパイダーは、example.comのホームページのクロールを開始し、カテゴリリンクとアイテムリンクを収集し、後者をparse_itemメソッドで解析します。各アイテムレスポンスに対して、XPathを使用してHTMLから一部のデータが抽出され、アイテムにデータが入力されます。

同じクモを正確にコピーし、" example.com"を置き換えました別の初期URLを使用します。

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 stb.items import StbItem

class StbSpider(CrawlSpider):
    domain_name = "stb"
    start_urls = ['http://www.stblaw.com/bios/MAlpuche.htm']

    rules = (Rule(SgmlLinkExtractor(allow=(r'/bios/.\w+\.htm', )), callback='parse', follow=True), )

    def parse(self, response):
        hxs = HtmlXPathSelector(response)

        item = StbItem()
        item['JD'] = hxs.select('//td[@class="bodycopysmall"]').re('\d\d\d\d\sJ.D.')
        return item

SPIDER = StbSpider()

しかし、私のスパイダー" stb&quot ;; " / bios /"からリンクを収集しません。それがすることになっています。最初のURLを実行し、 item ['JD'] をスクレイピングしてファイルに書き込み、終了します。

SgmlLinkExtractor が無視されるのはなぜですか? Rule は、 Rule 行内の構文エラーをキャッチするために読み取られます。

これはバグですか?私のコードに何か問題がありますか?実行ごとに表示される未処理の大量のエラーを除き、エラーはありません。

ここで私が間違っていることを知るのはいいことです。手がかりをありがとう。 SgmlLinkExtractor が何をすべきかを誤解していますか?

役に立ちましたか?

解決

parse 関数は実際にCrawlSpiderクラスで実装および使用されており、意図せずにオーバーライドしています。名前を parse_item などの別の名前に変更すると、ルールが機能するはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top