繁体   English   中英

Javascript解析器的索引错误

[英]Index error with Javascript parser

我正在使用Scrapy和Javascript解析模块'slimit'在我正在爬网的页面内查找特定的Javascript项目,如下所示:

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import Selector
from scrapy.item import Item
from scrapy.spider import BaseSpider
from slimit import ast
from slimit.parser import Parser
from slimit.visitors import nodevisitor


def get_fields(data):
    parser = Parser()
    tree = parser.parse(data)
    return {getattr(node.left, 'value', ''): getattr(node.right, 'value', '')
            for node in nodevisitor.visit(tree)
            if isinstance(node, ast.Assign)}


class ExampleSpider(CrawlSpider):
    name = "goal2"
    allowed_domains = ["whoscored.com"]
    start_urls = ["http://www.whoscored.com/"]


    rules = [Rule(SgmlLinkExtractor(allow=(''),deny=('')]

    def parse_item(self, response):

        script = sel.xpath('//div[@id="team-stage-stats"]/following-sibling::script/text()')
        if script is not None:
            script = script.extract()[0]

只要在已爬网的页面上找到该项目,此方法就可以正常工作。 如果不是,我会得到一个错误,即列表索引超出范围。 我以为“不是None:”语句会对此进行排序,但事实并非如此。

谁能看到我在做什么错?

谢谢

您的xpath调用可能返回一个空列表,而不是None 将支票更改为

if script is not None and len(script) > 0:  

应该解决这个问题。 或者更简单地说,您可以仅仅依靠真实性

if script:

由于None[]均为虚假值。 这与较长的副本具有相同的作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM