Перебор красивого супового массива за python - PullRequest
1 голос
/ 07 февраля 2020

Я только начал изучать webscraping в python, используя красивый суп. Я пытаюсь получить доступ к определенному значению в массиве, заданном из find_all (). Я могу легко распечатать весь массив, но у меня проблемы с распечаткой одного элемента. Когда я пропущу через него oop, все это сохранится в 0-м элементе, и любое значение больше 0 приведет к исключению индекса из диапазона.

l oop работает нормально и показывает, что я равен 0 на каждой итерации. печать над ним, которая пытается получить доступ к элементу, не работает, и мне нужна помощь, пытаясь получить доступ к одному из td, возвращаемому find_all. Если нет способа сделать это, то, мне кажется, мне нужна помощь в уточнении поиска до игрового режима и ранга. Спасибо!

Вот код:

import requests
from bs4 import BeautifulSoup
#python -m pip install lxml
result  = requests.get("https://rocketleague.tracker.network/profile/steam/teicho")

src = result.content
soup = BeautifulSoup(src, 'html.parser')
links = soup.find(id = "season-13")
rank = links.find_all('tr')
bound = len(rank)

data = []
for i in range(bound):
  print("")
  tds = [rank[i].find_all('td')]
  print(tds[1]) #where the error occurs
  for i in range(0,len(tds)):
    print (i)
    print(tds[i])
    print("")

Вот часть вывода из l oop, который показывает, что находится в tds, потому что, если я выложу все это, я не смогу получить Фильтр нежелательной почты переполнения стека:

image

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

Я прошелся по исходному коду по-другому и поместил все это в список. Мне пришлось убрать кучу \ n, которые были в исходном коде по какой-то причине. Но так люди сделали свой сайт. Вот мой код:

import requests
from bs4 import BeautifulSoup
#python -m pip install lxml
result  = requests.get("https://rocketleague.tracker.network/profile/steam/teicho")
src = result.content
soup = BeautifulSoup(src, 'lxml')
tbl = soup.find(id = "season-13")
rank = tbl.find_all("table", class_ = "card-table items")

ranks = [rank[1].find("tbody").text]
for i in range(len(ranks)):
  print(ranks[i].replace('\n',''))
0 голосов
/ 07 февраля 2020

tds[1] всегда будет неправильным, потому что в предыдущей строке вы помещаете возвращенный список в другой список, добавляя круглые скобки вокруг функции.

tds = [rank[i].find_all('td')] # Wrong
tds = rank[i].find_all('td') # Correct
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...