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()
парсит только первую страницуНаверное, не первую, а последнюю? У вас на каждую итерацию
while
массив найденных элементов затирается и используется потом только данные последней страницы.for i in root:
нужно поправить - эта логика должна выполняться внутри цикла while
.tage = []
нужно из цикла, наоборот, вынести. Ну а лучше вообще эту переменную убрать и писать в файл прямо внутри while
. Знаю, что быдло код, просьба не критиковать , так как я только учась! :)
Почему не парсит остальные страницы?
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")