蜘蛛屑指数

2024-10-04 11:27:08 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我一直试图在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:

^{pr2}$

但当我运行代码时

[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会更容易吗?如果有任何意见和帮助,我将不胜感激。在

谢谢


Tags: 代码fromimportitemcontribruleclassjd
3条回答

SgmlLinkExtractor在其“allow”参数中不支持选择器。在

所以这是错误的:

SgmlLinkExtractor(allow=["hxs.select('//td[@class='altRow'] ...')"])

这是对的:

^{2}$

为每个匹配的SgmlLinkExtractor调用parse函数。在

正如Pablo提到的,你想简化你的SgmlLinkExtractor。在

我还尝试将从初始url中获取的名称放入一个列表中,然后将每个名称以绝对url的形式传递给解析,即http://www.whitecase.com/aabbas(for/aabbas)。在

下面的代码在列表中循环,但我不知道如何将其传递给parse。你认为这是个更好的主意吗?在

baseurl = 'http://www.whitecase.com'
names = ['aabbas', '/cabel', '/jacevedo', '/jacuna', '/igbadegesin']

def makeurl(baseurl, names):
  for x in names:
      url = baseurl + x
      baseurl = 'http://www.whitecase.com'
      x = ''
      return url

相关问题 更多 >