Проблема с печатью BS4 только определенных частей веб-страницы - PullRequest
0 голосов
/ 30 мая 2019

У меня проблема с bs4, я только нахожу некоторые вещи в html.Чтобы быть точным, когда я пытаюсь напечатать span.nav2__menu-link-main-text, он выбирает его и печатает без проблем, но когда я пытаюсь выбрать другую часть страницы, он, вероятно, выбирает ее, но не хочет ее распечатывать.Вот код, который печатает, и код, который не печатает:

Пробовал использовать другие парсеры, кроме lxml, и ни один не работал.

#This one prints

from bs4 import BeautifulSoup
import requests
import lxml

url = 'https://osu.ppy.sh/users/12008062'
res = requests.get(url)
soup = BeautifulSoup(res.text, 'lxml')

for i in soup.select('span.nav2__menu-link-main-text'):
    print(i.text)

#This one does not print

from bs4 import BeautifulSoup
import requests
import lxml

url = 'https://osu.ppy.sh/users/12008062'
res = requests.get(url)
soup = BeautifulSoup(res.text, 'lxml')

for i in soup.select('div.value-dispaly__value'):
    print(i.text)

Я ожидаю, что эта программа напечатает текущее значение div.value-dispaly__value, но когда я запускаю программу, она ничего не печатает, даже если я проверяю страницу, я вижу значение 4000.

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Веб-сайт Страница - это рендеринг javascript-запроса для получения данных, поэтому вам необходимо использовать библиотеку автоматизации, такую ​​как selenium. загрузите веб-драйвер селена согласно требованиям вашего браузера.

Скачать веб-драйвер selenium для браузера Chrome:

http://chromedriver.chromium.org/downloads

Установить веб-драйвер для браузера Chrome:

https://christopher.su/2015/selenium-chromedriver-ubuntu/

Учебник Selenium:

https://selenium -python.readthedocs.io /

Замените ваш код следующим:

from selenium import webdriver
from bs4 import BeautifulSoup
import time

driver = webdriver.Chrome('/usr/bin/chromedriver')
driver.get('https://osu.ppy.sh/users/12008062')
time.sleep(3)

soup = BeautifulSoup(driver.page_source, 'lxml')

for i in soup.find_all('div',{"class":"value-display__value"}):
    print(i.get_text())

O / P: * * 1 032

#47,514
#108
11d 19h 49m
44
4,000
11d 19h 49m
44
4,000
#47,514
#108
0
0
0 голосов
/ 30 мая 2019

Кажется, что код, который вы хотите получить, динамически добавляется на веб-страницу с помощью javascript.Для обновления части web js необходимо использовать функцию requests render().

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