Задать вопрос
@Sanyx

Почему код написанный на python работает некорректно?

Есть такой сайт https://cs-ms-monitoring.ru/all-servers/ на каждой странице список IP адресов игровых серверов. Мне нужно написать код который будет парсить ip и записывать их в файл на компьютере. Я написал вот такой код, все работает и записует, однако, парсит только первую страницу. Почему не парсит остальные страницы?
from bs4 import BeautifulSoup
import  requests

cout_page = 1
while cout_page < 8:
 content = "https://cs-ms-monitoring.ru/all-servers/page/" + str(cout_page)  +  "/"
 req = requests.get(content)
 cout_page += 1
 soup = BeautifulSoup(req.text, "lxml")
 tage = []
 root = soup.findAll('span',{'class':'label label-default'})

for i in root:
 tage.append(i.text)

file = open("base.txt", "w")
for files in tage:
 file.write(files)
 file.write("\n")
file.close()
  • Вопрос задан
  • 129 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
парсит только первую страницу
Наверное, не первую, а последнюю? У вас на каждую итерацию while массив найденных элементов затирается и используется потом только данные последней страницы.

Отступы у for i in root: нужно поправить - эта логика должна выполняться внутри цикла while.
А tage = [] нужно из цикла, наоборот, вынести. Ну а лучше вообще эту переменную убрать и писать в файл прямо внутри while.
Ответ написан
Комментировать
Mike_Ro
@Mike_Ro Куратор тега Python
Python, JS, WordPress, SEO, Bots, Adversting
Знаю, что быдло код, просьба не критиковать , так как я только учась! :)

А как Вы научитесь, если Вас не будут критиковать?
Почему не парсит остальные страницы?

Вас не смущает, что root находится в другой области видимости?
while cout_page < 8:
  # ...
  root = soup.findAll('span',{'class':'label label-default'})

for i in root:
  tage.append(i.text)

Вот так работает:
import requests
from bs4 import BeautifulSoup

start_page = 1
last_pages = 8

tags = []

for page in range(start_page, last_pages + 1):
    url = f"https://cs-ms-monitoring.ru/all-servers/page/{page}/"
    res = requests.get(url)

    if res.status_code == 200:
        soup = BeautifulSoup(res.text, "lxml")
        root = soup.find_all('span', {'class': 'label label-default'})
        tags.extend([tag.text for tag in root])
    else:
        print(f"Ошибка на странице {page}")

with open("base.txt", "w") as file:
    for tag in tags:
        file.write(tag + "\n")

КартинкО

66bc90f85ce5e092912425.png
66bc90fcd10ad137906749.png
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы