Scrapy SgmlLinkExtractorは許可されたリンクを無視しています
-
06-07-2019 - |
質問
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
などの別の名前に変更すると、ルールが機能するはずです。
所属していません StackOverflow