9

我正在尝试使 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 不会让我发布超过 1 个网址,因此请根据需要替换初始网址。对于那个很抱歉。

4

4 回答 4

10

您正在覆盖它出现的“解析”方法。“解析”,是 CrawlSpider 中用于跟踪链接的私有方法。

于 2009-11-30T08:33:50.623 回答
3

如果您检查文档,则清楚地写 有“警告”

“在编写爬虫规则时,避免使用 parse 作为回调,因为爬虫使用 parse 方法本身来实现它的逻辑。所以如果你重写 parse 方法,爬虫将不再工作。”

验证网址

于 2011-10-25T10:04:30.240 回答
1

允许=(r'/aadler/', ...

于 2009-11-27T18:48:51.187 回答
1

您在“规则”的第一个元素之后缺少逗号作为元组..

rules = (Rule(SgmlLinkExtractor(allow=('/careers/n.\w+', )), callback='parse', follow=True),)
于 2010-12-23T07:55:13.090 回答