python - не могу разобрать текст с сайта, но с моего - PullRequest
0 голосов
/ 23 марта 2020

я борюсь с сайтом вот мой код

import csv
from bs4 import BeautifulSoup


page = requests.get('https://fmdataba.com/20/p/220045/diego-barbosa',headers = {'User-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'})


soup = BeautifulSoup(page.text, 'html.parser')
physical = {}
technical = {}

table = soup.find_all('table',{'class':'table tab61'})
print(len(table))
trs = table[0].find_all('tr')
for tr in trs:
    tds = tr.find_all("td")
    if len (tds) ==2:
        physical[tds[0].text] = tds[1].text
print(physical)

table = soup.find_all('table',{'class':'table tab61'})
trs = table[1].find_all('tr')
for tr in trs:
    tds = tr.find_all("td")
    if len (tds) ==2:
        technical[tds[0].text] = tds[1].text
print(technical)

дело в том, что мне нужно разобрать работоспособность игроков, но это выдает мне каждый раз эту ошибку

Traceback (most recent call last):
  File "C:\Users\marco\Desktop\fmdata.py", line 17, in <module>
    trs = table[1].find_all('tr')
IndexError: list index out of range

i получил копию части файла html на моем сайте

http://pes6indie.tk/test.html

, если я попробую против этого, это сработает, но не на самом сайте

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Я посмотрел на предоставленную вами ссылку:

https://fmdataba.com/20/p/220045/diego-barbosa

и для текущего экземпляра она не содержит элемента с класс "таблица tab61".

Фраза "tab61" отсутствует даже в html.

. Вы получаете индекс вне диапазона, потому что в таблице нет класса tab61. html

0 голосов
/ 23 марта 2020

Скорее всего, владелец сайта блокирует попытки очистки в той или иной форме. Вы получаете ошибку индекса списка, потому что будет страница (что-то вроде 501 запрещено) с сообщением об ошибке, которое, вероятно, не имеет второго атрибута таблицы.

В таких случаях может быть безопаснее сделать либо ( или оба) из двух вещей:

  1. Проверьте длину списка, чтобы определить, есть ли у вас второй элемент.
  2. Проверьте, есть ли у указанного поставщика информации (REST) ​​API для вас. Это более аккуратный и более структурированный способ сбора данных.

[РЕДАКТИРОВАТЬ] Кроме того: Вы можете проверить с запросами на код состояния. Это будет что-то вроде 200 для успехов и другие для разных состояний отказа. Любой приличный сайт предоставит код ошибки в этот момент, что упрощает остановку очистки до того, как будет совершена первая ошибка.

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