Парсинг более сложной страницы // requests python
Я осваиваю парсинг страницы на python и столкнулся с проблемой при парсинге на более сложном сайте, чем статический. Пример: https://arizona-rp.com/mon/fraction/4/20 Выводит ошибку: Please turn JavaScript on and reload the page. Что делать? Код достаточно прост
post = requests.post('https://arizona-rp.com/mon/fraction/4/20', cookies=cookies)
html = BS(post.content, 'html.parser')
Ответы (1 шт):
Автор решения: Aleks Kisel
→ Ссылка
Вот готовый код для получения нужной страницы без использования splash и selenium. Для его работы нужно будет установить beautifulSoup, PyQt5 и PyQtWebEngine для его работы. А дальше просто распарсить полученные данные с помощью инструментов beautifulSoup.
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://arizona-rp.com/mon/fraction/4/20')
"""
В объект soup получаем html с которым дальше можно работать
стандартными способами (поиск элементов с xpath и т.д)
"""
soup = bs.BeautifulSoup(page.html, 'html.parser')
with open('parsed_page.html', 'w') as f: # Для примера можно записать полученные данные в файл
print(soup)
f.write(str(soup.encode('utf-8')))
if __name__ == '__main__': main()