Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 17.04.2016
Сообщений: 17

Ошибка при парсинге таблицы с сайта

25.02.2021, 22:41. Показов 3518. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Пытаюсь парсить таблицу с сайта: https://coinmarketcap.com/

Для начала хотел получить имена криптовалют из таблицы с первой страницы сайта, тут их 100.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import requests
from bs4 import BeautifulSoup
import csv
 
 
# напишем ф-цию, которая будет делать запрос на сервер и получать html-код страницы
# в качестве параметра передадим ей url - это адрес страницы
def get_html(url):
    # делаем запрос к серверу, url - куда посылаем запрос
    r = requests.get(url)
    # с помощью свойства text - мы получаем html-код страницы
    return r.text
 
 
# данная ф-ция будет принимать html-код страницы
def get_page_data(html):
    # создаем экземпляр класса BeautifulSoup, конструктор которого принимает html-код и указание на парсер
    soup = BeautifulSoup(html, 'lxml')
 
    # в таблице с данными забираем все теги tr, обращаемся к объекту soup, вызываем на нем метод find()
    # и по цепочке исходя из исходного кода html, добираемся то тега tr
    # class - в Python зарезервированное слово, поэтому после имени ставим _
    # find_all('tr') - ищем все теги tr
    trs = soup.find('table', class_='cmc-table').find('tbody').find_all('tr')
    # с помощью цикла for забираем из каждого tr нужную нам информацию
    for tr in trs:
        # в каждом теге tr находим все теги td, результат список тегов td
        # нужные нам данные находятся внутри тегов td
        # обращаясь по индексам к списку, мы получи нужные данные
        tds = tr.find_all('td')
        # берем 3 элемент, имя содержится в ссылке и во вложенном теге p, поэтому ищем тег a, p и вызываем на нем метод text
        name = tds[2].find('a', class_='cmc-link').find('p').text
        print(name)
 
 
# ф-ция хаб, куда стекаются данные от работы др.ф-ций, идут вызовы ф-ций в нужном нам порядке
def main():
    url = 'https://coinmarketcap.com/'
    get_page_data(get_html(url))
 
 
# укажем точку входа
# и если это условие выполняется, то будет вызываться ф-ция main()
# это условие будет выполняться в том случае, если этот скрипт будет запущен самостоятельно
# если мы импортируем скрипт в др.модуль, то условие не будет выполняться, и скрипт не отработает
if __name__ == '__main__':
    main()
Внутри функции def get_page_data(html), пытаюсь для проверки через print(name) - вывести список имен всех 100 криптовалют с первой страницы сайта, но на выходе получаю всего первые 10, а далее выдается ошибка:
name = tds[2].find('a', class_='cmc-link').find('p').text
IndexError: list index out of range

Помогите пожалуйста разобраться, в чем моя ошибка?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.02.2021, 22:41
Ответы с готовыми решениями:

Ошибка при парсинге сайта
Написал код using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; using...

Ошибка при парсинге сайта
Пытаюсь вынуть с погодного сайта строчку вида дата - температура public List<String> weekParsing() { WebClient client =...

Ошибка при парсинге страницы сайта
В методе онклик пишу: public void onClick(View v) { Document doc = null; try { doc =...

9
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
26.02.2021, 06:02
Цитата Сообщение от Diman2050 Посмотреть сообщение
IndexError: list index out of range
Помогите пожалуйста разобраться, в чем моя ошибка?
нет индекса 2, не благодари!

по ошибке же все видно, возможно там есть какие то колонки, пустые строки, в общем где то меньше в списке элементов. Проверяй сначала сколько элементов, потом тащи текст.
0
Эксперт Python
 Аватар для АмигоСП
295 / 108 / 57
Регистрация: 07.12.2016
Сообщений: 209
26.02.2021, 08:36
Diman2050, потому что остальные данные подгружаются по эвенту(скроллу страницы скорей всего). Надо получше копаться в запросах к сайту))
Python
1
2
3
4
5
import requests
 
url = 'https://api.coinmarketcap.com/data-api/v3/cryptocurrency/listing?start=1&limit=100&sortBy=market_cap&sortType=desc&convert=USD&cryptoType=all&tagType=all'
resp_page = requests.get(url)
values = resp_page.json()
2
0 / 0 / 0
Регистрация: 17.04.2016
Сообщений: 17
26.02.2021, 10:28  [ТС]
Индекс 2 есть. Проверил, везде, в каждом теге <tr>, есть тег <td> с индексом 2, в котором содержится имя криптовалюты.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
26.02.2021, 10:30
Diman2050, ух ты! ты нашел баг в питоне! индекс есть, а глупый интерпретатор не видит, надо зарепортить!

А если серьезно -нет, ты не нашел баг, ошибаешься именно ты, включай отладку и проверяй. Кроме того прочти совет спеца по парсингу выше.
1
0 / 0 / 0
Регистрация: 17.04.2016
Сообщений: 17
26.02.2021, 10:55  [ТС]
Цитата Сообщение от АмигоСП Посмотреть сообщение
Diman2050, потому что остальные данные подгружаются по эвенту(скроллу страницы скорей всего). Надо получше копаться в запросах к сайту))
Python
1
2
3
4
5
import requests
 
url = 'https://api.coinmarketcap.com/data-api/v3/cryptocurrency/listing?start=1&limit=100&sortBy=market_cap&sortType=desc&convert=USD&cryptoType=all&tagType=all'
resp_page = requests.get(url)
values = resp_page.json()
Подскажите пожалуйста, в каком месте моего кода - вставит Ваш код? И если можно, подскажите где и что почитать про json запросы.
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
26.02.2021, 11:01
Diman2050, ок, разжуем, вводим отладку с помощью супер метода: вставляем print(len(tds)) в 25 строку, хм, глядим:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
11
Bitcoin
11
Ethereum
11
Tether
11
Binance Coin
11
Cardano
11
Polkadot
11
XRP
11
Litecoin
11
Chainlink
11
Bitcoin Cash
1
Вот ведь незадача, кто то нас обманывает, окей, натираем кулаки ищем виновника чтоб бить рожу. Ух, глянем содержимое trs - ой какая неожиданность, там оказывается нашлась какая то кривая таблица, вот это да, кто же мог подумать.

Добавлено через 3 минуты
Цитата Сообщение от Diman2050 Посмотреть сообщение
Подскажите пожалуйста, в каком месте моего кода - вставит Ваш код? И если можно, подскажите где и что почитать про json запросы.
В Nokia3310 вставь, там есть черновики, именно туда. А если серьезно, то тебе дали запрос который избавит тебя от проблем. В переменной values лежит все что тебе необходимо: и названия, и цена и контактные данные сына маминой подруги.
2
0 / 0 / 0
Регистрация: 17.04.2016
Сообщений: 17
26.02.2021, 11:14  [ТС]
Цитата Сообщение от DmFat Посмотреть сообщение
Diman2050, ок, разжуем, вводим отладку с помощью супер метода: вставляем print(len(tds)) в 25 строку, хм, глядим:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
11
Bitcoin
11
Ethereum
11
Tether
11
Binance Coin
11
Cardano
11
Polkadot
11
XRP
11
Litecoin
11
Chainlink
11
Bitcoin Cash
1
Вот ведь незадача, кто то нас обманывает, окей, натираем кулаки ищем виновника чтоб бить рожу. Ух, глянем содержимое trs - ой какая неожиданность, там оказывается нашлась какая то кривая таблица, вот это да, кто же мог подумать.

Добавлено через 3 минуты


В Nokia3310 вставь, там есть черновики, именно туда. А если серьезно, то тебе дали запрос который избавит тебя от проблем. В переменной values лежит все что тебе необходимо: и названия, и цена и контактные данные сына маминой подруги.
Спасибо за пояснение. Я понял, что это полноценный код - который получает всю необходимую инфу и помещает все в словарь.
Подскажите уважаемый, какую-нибудь литературу или хорошие видеоуроки по теме парсинга и по методу json. Я начинающий, делал все по видеоурокам, причем видеоурок был по парсингу именно этого сайта) Но видео видимо устарело и структура сайта изменилась и соответственно я застрял)
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
01.03.2021, 10:01
Цитата Сообщение от Diman2050 Посмотреть сообщение
или хорошие видеоуроки по теме парсинга и по методу json.
первый шаг - отбросить желание чего то учить по видео, сразу видно к чему это тебя привело
второй шаг -освоить основы питона, чтобы потом не спотыкаться на каждом шагу
третий шаг - перевести и прочитать мою подпись
четвертый шаг -взять в руки книгу Марка Лутца
1
01.03.2021, 15:19

Не по теме:

Цитата Сообщение от Welemir1 Посмотреть сообщение
третий шаг - перевести и прочитать мою подпись
qt топ, с него начинал изучать python, делал приложение для формирования xml с данными из Oracle
Конечно до этого C# и С++ по году изучал

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.03.2021, 15:19
Помогаю со студенческими работами здесь

При парсинге сайта в браузере выводится ошибка: Incorrect string value: '\xE2\x80\xB3. \xD0.' for column 'content' at
Есть вероятность, что проблема с кодировкой, но, как это исправить я не знаю. В скрипте при подключении к базе данных пишу -...

При парсинге сайта содержание в строке выводится не на языке сайта
Здравствуйте. Помогите решить проблему. Сайт в браузере на русском. Когда я его парсю все содержание в строке выводится на украинском?

Неправильная кодировка при парсинге сайта
Когда делаю парс текста с сайта http://code-vk.ru/random/ У меня в memo1 выдает плохую кодировку,что делать? На сайте стоит кодировка...

Получение url при парсинге сайта
Не могу получить URL заголовков. Как решить эту проблему? public class Main { public static void main(String args) throws...

Некорректная авторизация при парсинге сайта
Доброго времени суток, господа-форумчане. Проблема следующего характера: Пишу парсинг сайта средствами CURL (первый опыт в написании...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru