Scrapy SgmlLinkExtractor 问题
我正在尝试让 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 不允许我发布超过一个网址,所以请根据需要替换初始网址。抱歉。
4 个回答
1
allow=(r'/aadler/', ...
这段代码的意思是设置一个允许的路径,'/aadler/'。在这里,'allow' 是一个变量,用来存储这个路径。前面的 'r' 表示这是一个原始字符串,意思是字符串中的特殊字符不会被处理,比如反斜杠。后面的 '...' 表示这里可能还有其他的内容,但没有具体显示出来。
3
如果你查看文档,会看到有一个警告写得很清楚:
"在编写爬虫规则时,尽量不要把parse作为回调函数,因为爬虫本身会用到parse方法来实现它的逻辑。如果你覆盖了parse方法,爬虫就无法正常工作了。"
10
看起来你在重写“parse”这个方法。“parse”是CrawlSpider里面的一个私有方法,用来跟踪链接的。