这是我一直试图在Scrapy framework中编写的Spyder1代码:
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 firm.items import FirmItem
class Spider1(CrawlSpider):
domain_name = 'wc2'
start_urls = ['http://www.whitecase.com/Attorneys/List.aspx?LastName=A']
rules = (
Rule(SgmlLinkExtractor(allow=["hxs.select(
'//td[@class='altRow'][1]/a/@href').re('/.a\w+')"]),
callback='parse'),
)
def parse(self, response):
hxs = HtmlXPathSelector(response)
JD = FirmItem()
JD['school'] = hxs.select(
'//td[@class="mainColumnTDa"]').re('(?<=(JD,\s))(.*?)(\d+)'
)
return JD
SPIDER = Spider1()
rules
中的regex成功地从起始url中提取我想要的所有bio url:
但当我运行代码时
[wc2] ERROR: Error processing FirmItem(school=[]) -
[Failure instance: Traceback: <type 'exceptions.IndexError'>: list index out of range
这是项目.py在
from scrapy.item import Item, Field
class FirmItem(Item):
school = Field()
pass
你能帮我了解索引错误发生在哪里吗?在
在我看来这跟SgmLinkExtractor有关。在
我几个星期来一直在努力让这只蜘蛛和痒痒一起工作。他们有一个很好的教程,但我对python和web编程还不熟悉,所以我不知道SgmlLinkExtractor
在幕后是如何工作的。在
对我来说,编写一个具有与Python库相同的简单功能的spider会更容易吗?如果有任何意见和帮助,我将不胜感激。在
谢谢
SgmlLinkExtractor在其“allow”参数中不支持选择器。在
所以这是错误的:
这是对的:
^{2}$为每个匹配的SgmlLinkExtractor调用parse函数。在
正如Pablo提到的,你想简化你的SgmlLinkExtractor。在
我还尝试将从初始url中获取的名称放入一个列表中,然后将每个名称以绝对url的形式传递给解析,即
http://www.whitecase.com/aabbas
(for/aabbas)。在下面的代码在列表中循环,但我不知道如何将其传递给parse。你认为这是个更好的主意吗?在
相关问题 更多 >
编程相关推荐