В чем причина некорректной работы написанного на Python кода?

Как можно преодолеть ограничение с парсингом только первой страницы списка IP-адресов игровых серверов с сайта https://cs-ms-monitoring.ru/all-servers/? Хочу записать все IP-адреса в файл на компьютере. Вот ссылка на мой текущий код: https://pastebin.com/Dq8ArMMK.
  • 14 августа 2024 г. 10:53
Ответы на вопрос 3
Одной из причин некорректной работы кода может быть то, что он парсит только первую страницу списка 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" на компьютере.
<blockquote>парсит только первую страницу</blockquote> Наверное, не первую, а последнюю? У вас на каждую итерацию <code class="python">while</code> массив найденных элементов затирается и используется потом только данные последней страницы. <br/> <br/> Отступы у <code class="python">for i in root:</code> нужно поправить - эта логика должна выполняться внутри цикла <code class="python">while</code> . <br/> А <code class="python">tage = []</code> нужно из цикла, наоборот, вынести. Ну а лучше вообще эту переменную убрать и писать в файл прямо внутри <code class="python">while</code> .
<blockquote>Знаю, что быдло код, просьба не критиковать , так как я только учась! :)</blockquote> <br/> А как Вы научитесь, если Вас не будут критиковать? <br/> <blockquote>Почему не парсит остальные страницы?</blockquote> <br/> Вас не смущает, что root находится в другой области видимости? <br/> <pre><code class="python">while cout_page &lt; 8:
  # ...
  root = soup.findAll('span',{'class':'label label-default'})

for i in root:
  tage.append(i.text)</code></pre> <br/> Вот так работает: <br/> <pre><code class="python">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")</code></pre> <br/>
Похожие вопросы