BeatifulSoup findAll возвращает пустой массив (python) - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь получить данные с этой веб-страницы https://playruneterra.com/es-es/news, и часть, которую я пытаюсь получить, такова:

enter image description here

Я использую BeatufulSoup, чтобы получить html и выполнить поиск по нему, но когда я использовал метод findAll, чтобы получить эту строку, он возвращает мне пустой массив. Я пробовал то же самое на других страницах, и это прекрасно работает. Что происходит?

Это мой код:

enter image description here

Это пример работающего:

enter image description here

Спасибо всем.

Ответы [ 3 ]

1 голос
/ 02 мая 2020

Вы можете использовать PyQt для создания браузера без головы, а затем удалить данные с веб-сайта. Вот демо-код для вас:

import bs4 as bs
import sys
import urllib.request
from PyQt5.QtWebEngineWidgets import QWebEnginePage
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl

class Page(QWebEnginePage):
    def __init__(self, url):
        self.app = QApplication(sys.argv)
        QWebEnginePage.__init__(self)
        self.html = ''
        self.loadFinished.connect(self._on_load_finished)
        self.load(QUrl(url))
        self.app.exec_()

    def _on_load_finished(self):
        self.html = self.toHtml(self.Callable)
        print('Load finished')

    def Callable(self, html_str):
        self.html = html_str
        self.app.quit()


def main():
    page = Page('https://playruneterra.com/es-es/news')
    soup = bs.BeautifulSoup(page.html, 'html.parser')
    js_test = soup.find('h2', class_='heading-03 src-component-content-NewsItem-___NewsItem-module__title___3OcDj')
    print(js_test.text)

if __name__ == '__main__': main()
0 голосов
/ 02 мая 2020

первый щелчок правой кнопкой мыши и go для просмотра исходной страницы и поиска по ключевому слову, которое вы ищете, если вы можете найти там свой контент, то вы можете использовать суп над ним или же вы можете использовать селен

А в случае супа просто обернуть имена классов в формате dict

title = soup.findAll('h2',{'class':'add your full classes here'})
0 голосов
/ 02 мая 2020

Второй параметр для findAll должен быть dict, а не строкой.

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