@RosesX

Почему html.Parser выдаёт ошибку?

Вот код самого парсера:
import requests
from bs4 import BeautifulSoup as BS


s = requests.Session()

auth_html = s.get('https://forum.excalibur-craft.ru/login/')
auth_bs = BS(auth_html.content, 'html.parser')
csrf = auth_bs.select('input[name=csrfKey]')[0]['value']

payload = {
	'csrfKey' : csrf,
	'auth' : 'hekoso524@oriwijn.com',
	'password' : 'malaki63',
	'remember_me' : 1
}

answ = s.post('https://forum.excalibur-craft.ru/?_fromLogout=1&_fromLogin=1', data = payload)
anw_bs = BS(answ.content, 'html.parser')

max_page = 226
pages = []

r = requests.get("https://forum.excalibur-craft.ru/forum/14-флудилка/")
html = BS(r.content, "html.parser")

for el in html.select(".ipsDataList "):
	title = el.select(".ipsDataItem_meta a")
print( title[0].text )

Вот текст ошибки:
Traceback (most recent call last):
  File "C:\Users\kkk22\OneDrive\Рабочий стол\123.py", line 9, in <module>
    csrf = auth_bs.select('input[name=csrfKey]')[0]['value']
IndexError: list index out of range
  • Вопрос задан
  • 701 просмотр
Решения вопроса 1
Yaroslav Rsx, добрый день!
Вы немного усложнили способ получения активных пользователей ветки этого сайта.
Страницы форума доступны любому, в том числе незарегистрированному, пользователю.
Нет смысла логиниться.
Посмотрите мой код, запустите.

import requests
from bs4 import BeautifulSoup
from pprint import pprint


# %%time

list_nicknames = []

url = r"https://forum.excalibur-craft.ru/forum/14-флудилка/?page="

for i in range(1,228):
    r = requests.get(url+str(i))
    soup = BeautifulSoup(r.content)

    all_rows = soup.find_all("div", {"class": "ipsDataItem_meta"})
    for el in all_rows:
        if el.find("a") is not -1 and el.find("a") is not None:
            nickname = el.find("a").get_text()
            list_nicknames.append(nickname)

uniq_nicknames = set(list_nicknames)
print(len(list_nicknames)) # 5671 пользователя
print(len(uniq_nicknames)) # 2126 уникальных
# pprint(uniq_nicknames)


Успехов в парсинге)

UPD:
Код выше тестировался в Google.Colab - ошибок не было.
Интерпретатор в связке с PyCharm или SiblimeText возвращает ошибку.

В этом случае стоит попробовать так:
import requests
from bs4 import BeautifulSoup
from pprint import pprint


list_nicknames = []

url = r"https://forum.excalibur-craft.ru/forum/14-флудилка/?page="

for i in range(1,228):
    r = requests.get(url+str(i))
    soup = BeautifulSoup(r.content, "html.parser")

    all_rows = soup.find_all("div", {"class": "ipsDataItem_meta"})
    for el in all_rows:
        if el.find("a") != -1 and el.find("a") is not None:
            nickname = el.find("a").get_text()
            list_nicknames.append(nickname)

uniq_nicknames = set(list_nicknames)
print(len(list_nicknames)) # 5671 пользователя
print(len(uniq_nicknames)) # 2126 уникальных
# pprint(uniq_nicknames)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы