Javascript解析器出现索引错误

Index error with Javascript parser

本文关键字:索引 错误 Javascript      更新时间:2023-09-26

我正在使用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]

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

有人看到我做错了什么吗?

感谢

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

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

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

if script:

由于CCD_ 3和CCD_。这与较长的对应部分做了相同的事情。