私はCrawlSpiderには、以下の特定のリンクを設定し、各問題へのリンクは、以下のURLスキームに従うニュース雑誌こすりありますScrapyは以下とスクレーピング非許可リンク
http://example.com/YYYY/DDDD/index.htm YYYYは年で、 DDDDは、3桁または4桁の発行番号です。
私は928以降の問題のみを希望し、私のルールは以下の通りです。サイトに接続したり、リンクをクロールしたり、アイテムを抽出するのに問題はありません(私はコードの残りの部分を含めませんでした)。スパイダーは許可されていないリンクに続くと判断されたようです。問題377,398などを掻き取ろうとしており、 "culture.htm"と "feature.htm"のリンクに続いています。これは多くのエラーを発生させ、非常に重要ではありませんが、データの大量のクリーニングが必要です。何がうまくいかないかについての示唆はありますか?
class crawlerNameSpider(CrawlSpider):
name = 'crawler'
allowed_domains = ["example.com"]
start_urls = ["http://example.com/issues.htm"]
rules = (
Rule(SgmlLinkExtractor(allow = ('\d\d\d\d/(92[8-9]|9[3-9][0-9]|\d\d\d\d)/index\.htm',)), follow = True),
Rule(SgmlLinkExtractor(allow = ('fr[0-9].htm',)), callback = 'parse_item'),
Rule(SgmlLinkExtractor(allow = ('eg[0-9]*.htm',)), callback = 'parse_item'),
Rule(SgmlLinkExtractor(allow = ('ec[0-9]*.htm',)), callback = 'parse_item'),
Rule(SgmlLinkExtractor(allow = ('op[0-9]*.htm',)), callback = 'parse_item'),
Rule(SgmlLinkExtractor(allow = ('sc[0-9]*.htm',)), callback = 'parse_item'),
Rule(SgmlLinkExtractor(allow = ('re[0-9]*.htm',)), callback = 'parse_item'),
Rule(SgmlLinkExtractor(allow = ('in[0-9]*.htm',)), callback = 'parse_item'),
Rule(SgmlLinkExtractor(deny = ('culture.htm',)),),
Rule(SgmlLinkExtractor(deny = ('feature.htm',)),),
)
編集:私は2009年、2010年、2011 FOTはるかに単純な正規表現を使用して、これを固定しますが、誰もが何か提案を持っている場合は、上記の動作しませんなぜ私はまだ興味があります。
ファンタスティック。助けてくれてありがとう! – Trey