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" は "/bios/" からのリンクを本来のように収集しません。最初の URL を実行し、スクレイピングitem['JD']
してファイルに書き込み、終了します。
SgmlLinkExtractor
無視されているのはなぜですか?が読み取られるのは、行内Rule
の構文エラーをキャッチするためです。Rule
これはバグですか?私のコードに何か問題がありますか?実行ごとに表示される未処理のエラーを除いて、エラーはありません。
ここで私が間違っていることを知っておくといいでしょう。手がかりをありがとう。私は何をすべきか誤解しSgmlLinkExtractor
ていますか?