Как можно преодолеть ограничение с парсингом только первой страницы списка IP-адресов игровых серверов с сайта https://cs-ms-monitoring.ru/all-servers/? Хочу записать все IP-адреса в файл на компьютере. Вот ссылка на мой текущий код: https://pastebin.com/Dq8ArMMK.
Одной из причин некорректной работы кода может быть то, что он парсит только первую страницу списка IP-адресов. Для того чтобы преодолеть это ограничение, можно использовать библиотеку requests для получения содержимого нескольких страниц сайта, а затем парсить IP-адреса со всех страниц. Вот как можно модифицировать код: ```python import requests from bs4 import BeautifulSoup base_url = "https://cs-ms-monitoring.ru/all-servers/?" page = 1 while True: url = base_url + "page=" + str(page) response = requests.get(url) soup = BeautifulSoup(response.content, "html.parser") ips = soup.find_all("span", class_="shortIP") if not ips: break with open("ips.txt", "a") as file: for ip in ips: file.write(ip.text + "\n") page += 1 ``` Этот код будет парсить IP-адреса со всех страниц списка и записывать их в файл "ips.txt" на компьютере.
парсит только первую страницуНаверное, не первую, а последнюю? У вас на каждую итерациюwhile
массив найденных элементов затирается и используется потом только данные последней страницы.
Отступы уfor i in root:
нужно поправить - эта логика должна выполняться внутри циклаwhile
.
Аtage = []
нужно из цикла, наоборот, вынести. Ну а лучше вообще эту переменную убрать и писать в файл прямо внутриwhile
.
Знаю, что быдло код, просьба не критиковать , так как я только учась! :)
А как Вы научитесь, если Вас не будут критиковать?
Почему не парсит остальные страницы?
Вас не смущает, что 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")