Невозможно добавить значение в столбцы.Получение ошибки IndexError: список индексов вне диапазона - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь получить данные ODI по ссылке http://www.espncricinfo.com/australia/content/player/325026.html. Я хочу добавить заголовок и ниже, чтобы добавить столбцы.Мой код:

def parse(self, response):

    #extracting the entire class
    batting=response.xpath('//*[@class="engineTable"]').extract()[0]

    #extracting batting scores
    #using selector
    y=str("#")+batting+str("#")
    sel=Selector(text=y)

    #extracting column headings
    header=sel.xpath('//thead/tr/th/text()').extract()

    #values
    data= sel.xpath('//tbody/tr/td[contains(@title, "record rank: 2")]/following-sibling::td/text()').extract()

    col=[]
    i=0
    for head in header:
        i+=1
        #creating an empty list with the
        #values appended
        col.append((head,[]))
    i=0
    for j in range(len(data)):
        #T is the j th row
        T=data[j]

        for dat in T:
            i+=1
            #appending to empty list
            col[i][1].append(dat)

    #creating dict
    Dict={title:column for (title,column) in col}
    df=pd.DataFrame(Dict)
    print (df)

Я получаю сообщение об ошибке:

Traceback (most recent call last):
File "E:\anaconda\lib\site-packages\twisted\internet\defer.py", line 654, in _runCallbacks
current.result = callback(current.result, *args, **kw)File "C:\Users\DUDE\Desktop\odi_data\odi_data\spiders\odi.py", line 41, in parse. col[i][1].append(dat)

IndexError: индекс списка вне диапазона

Не могувыяснить, что не так в коде.Любая помощь приветствуется.Спасибо

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

В вашем коде логическая ошибка. Работали следующие:

import pandas as pd

from parsel import Selector


def parse(response):

    # extracting the entire class
    batting = response.xpath('//*[@class="engineTable"]').extract()[0]

    # extracting batting scores
    # using selector
    y = str("#") + batting + str("#")
    sel = Selector(text=y)

    # extracting column headings
    header = sel.xpath('//thead/tr/th/text()').extract()

    # values
    data = sel.xpath(
        '//tbody/tr/td[contains(@title, "record rank: 2")]/following-sibling::td/text()').extract()

    col = []
    # i = 0
    for head in header:
        # i += 1
        # creating an empty list with the
        # values appended
        col.append((head, []))

    i = 0
    for j in range(len(data)):
        # T is the j th row
        T = data[j]
        # appending to empty list
        col[i][1].append(T)

        i += 1

    # creating dict
    Dict = {title: column for (title, column) in col}

    print(Dict)
    df = pd.DataFrame(Dict)
    print(df)


import requests

url = 'http://www.espncricinfo.com/australia/content/player/325026.html'
r = requests.get(url)
# print(r.text)
parse(Selector(r.text))
0 голосов
/ 16 июня 2019

Может быть, вы должны поставить i += 1 позади col[i][1].append(dat)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...