SgmlLinkExtractor を機能させようとしています。
これは署名です:
SgmlLinkExtractor(allow=(), deny=(), allow_domains=(), deny_domains=(), restrict_xpaths(), tags=('a', 'area'), attrs=('href'), canonicalize=True, unique=True, process_value=None)
私はちょうど使用していますallow=()
だから、私は入ります
rules = (Rule(SgmlLinkExtractor(allow=("/aadler/", )), callback='parse'),)
したがって、最初の URL は'http://www.whitecase.com/jacevedo/'
であり、入力しており、それもスキャンされることallow=('/aadler',)
を期待し
ています。'/aadler/'
しかし代わりに、スパイダーは最初の URL をスキャンしてから閉じます。
[wcase] INFO: Domain opened
[wcase] DEBUG: Crawled </jacevedo/> (referer: <None>)
[wcase] INFO: Passed NuItem(school=[u'JD, ', u'Columbia Law School, Harlan Fiske Stone Scholar, Parker School Recognition of Achievement in International and Foreign Law, ', u'2005'])
[wcase] INFO: Closing domain (finished)
ここで何が間違っていますか?
このクモを完成させるのを手伝ってくれる、Scrapy をうまく使った人はここにいますか?
お手伝いありがとう。
以下にスパイダーのコードを含めます。
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 Nu.items import NuItem
from urls import u
class NuSpider(CrawlSpider):
domain_name = "wcase"
start_urls = ['xxxxxx/jacevedo/']
rules = (Rule(SgmlLinkExtractor(allow=("/aadler/", )), callback='parse'),)
def parse(self, response):
hxs = HtmlXPathSelector(response)
item = NuItem()
item['school'] = hxs.select('//td[@class="mainColumnTDa"]').re('(?<=(JD,\s))(.*?)(\d+)')
return item
SPIDER = NuSpider()
注: SO では複数の URL を投稿することはできないため、必要に応じて最初の URL を置き換えてください。申し訳ありません。