我正在尝试使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'),)
因此,初始网址为'http://www.whitecase.com/jacevedo/'
,我正在进入allow=('/aadler',)
并希望如此
'/aadler/'
也会被扫描。但相反,蜘蛛扫描初始网址然后关闭:
[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不会让我发布超过1个网址,因此必要时替换初始网址。对不起。
答案 0 :(得分:10)
您正在覆盖它出现的“解析”方法。 “parse”,是CrawlSpider中用于跟踪链接的私有方法。
答案 1 :(得分:3)
如果您查看文档,则会清楚地写出“警告”
“在编写爬网蜘蛛规则时,请避免使用parse作为回调,因为Crawl Spider使用parse方法本身来实现其逻辑。因此,如果重写parse方法,爬网蜘蛛将不再起作用。”
答案 2 :(得分:1)
allow =(r'/ aadler /',...
答案 3 :(得分:1)
在“规则”的第一个元素成为元组之后,您缺少逗号..
rules = (Rule(SgmlLinkExtractor(allow=('/careers/n.\w+', )), callback='parse', follow=True),)