Нужна помощь, чтобы выяснить, как пройти через индекс - PullRequest
0 голосов
/ 04 января 2019

Я работаю над проектом, который вращает очистку большого количества данных.Я сейчас работаю над довольно длинным сценарием, но столкнулся с проблемой моего цикла for.

Я пытаюсь вычистить информацию из таблицы из 9 строк.Я попытался настроить цикл так, чтобы он собирал одну и ту же информацию из каждой строки.Чтобы получить доступ к первой строке, я разделил таблицу на список.Первый ряд начинается с третьего индекса.

Вот мой код:

Когда я запускаю его, я получаю «AttributeError» в строке «Aa».Ошибка гласит: «Объект« NoneType »не имеет атрибута« текст »»

Этого не происходит, когда я отдельно подаю эту строку кода в консоль, я получаю нужный текст.И когда я вынимаю цикл for, я могу очистить первый indaplaybox.

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

my_url ='Myurl/=' + page

uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()

page_soup = soup(page_html, "html.parser")
boxes = page_soup.findAll("table",{"class":"TableTable tableBody"})
box = boxes[0]
playboxes = box.find_all('tr')
indaplaybox = playboxes[3]

filename = "QBS.csv"
f = open(filename, "a")

headers= "Aa, Ab, Ac, Ad\n"
f.write(headers)

for indaplaybox in playboxes:

    Aa = indaplaybox.find('td', attrs = {'style' : 'font-weight: bold;'}).text

    c = indaplaybox.find('td', attrs = {'class' : 'tablePlayName'})
    cl = c.text.split() 
    Ab = cl[0] + " " + cl[1]
    Ac = cl[2]
    Ad = indaplaybox.div.a.text



    print("Aa:" + Aa)
    print("Ab:" + Ab)
    print("Ac:" + Ac)
    print("Ad:" + Ad)


    with open (filename, "a") as myfile:
        myfile.write(Aa + "," + Ab + "," + Ac.replace(",", "|") + "," + Ad + "\n")
f.close()

Я хочу пройтись по индексам плейбокса 3-11.

Я не очень разбираюсь в индексах, поэтому попытался сделать что-то вроде:

p = [str(i) for i in range (3,12)] 
indaplaybox = playboxes[p]

for indaplaybox in playboxes:

    rest of code

Но это не работает, потому что для большинства, вероятно, очевидно, что индексы списка должны бытьцелые числа.

Я мог бы действительно помочь, подумав, как сделать так, чтобы цикл работал гладко.Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Вы можете сделать:

Метод 1:

# p has all the values from playboxes at these indexes
p = [playboxes[i] for i in range(3,12)]

# now simple loop
for indaplaybox in p:
    ......

Метод 2:

for indaplaybox in playboxes[3:12]:
    ....
0 голосов
/ 04 января 2019
p = [str(i) for i in range (3,12)] 
for i in p:
    indaplaybox = playboxes[i]
    ...
    rest of the code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...