Извлеченные данные в коде не соответствуют данным с веб-сайта - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь создать программу, которая очищает список имен пользователей выше количества поисков в месяц, начиная с https://namemc.com/minecraft-names.. Это можно легко сделать через веб-сайт с помощью панели поиска, и вы попадете на URLhttps://namemc.com/minecraft-names?length_op=&length=3&lang=en&searches=50.

Я попытался очистить имена пользователей с этого нового URL-адреса, но продолжаю получать имена пользователей с предыдущего URL-адреса.

Ответы [ 2 ]

0 голосов
/ 18 июля 2019

Проблема в том, что веб-сайт, который я запрашивал, заблокировал веб-браузеры.

Для этого было 2 исправления:

  • Используйте Selenium, как если бы пользователь заходил на сайт
  • Использовать заголовок с пользовательским агентом при запуске request.get (url)

Например:

headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
r = requests.get('example.com',headers=headers)
0 голосов
/ 28 июня 2019

Вы не предоставили правильные атрибуты div (насколько я понял ваши потребности).Изменяя атрибуты div как таковые

soup.find_all("div", attrs={"class": "row no-gutters py-1 px-3 border-top"}

Я получил вывод вида (элемент div)

<div class="row no-gutters py-1 px-3 border-top">
<div class="col col-md order-md-1 text-nowrap"><a href="/name/xMilouu_" translate="no">xMilouu_</a></div>
<div class="col-auto col-md order-md-3 text-right">‒</div>
<div class="col-12 col-md-5 order-md-2 text-md-center"><time datetime="2019-06-28T14:34:55.000Z">2019-06-28T14:34:55.000Z</time></div>

Вы можете использовать

name, search, time = element.text.strip().split("\n")

печатая переменные из этой строки, мы получаем (строка для каждого элемента)

name: _Delta_Phoenix_    search: ‒   time: 2019-06-28T14:56:01.000Z
name: 1Destruction   search: 3   time: 2019-06-28T14:56:01.000Z
name: Pichu1028      search: 1   time: 2019-06-28T14:56:02.000Z

, а затем применяем к ней все, что вам нужно

Редактировать: и исправление: это игнорирует верхнего пользователянайдено (на основе их HTML-кода), вы можете связаться с ним с помощью

soup.find_all("div", attrs={"class": "row no-gutters py-1 px-3"}

, который для меня просто возвращает 1 пользователя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...