PyQt не предполагает, что вы будете создавать QApplication несколько раз. Из-за этого, видимо, и возникает ошибка с памятью, так как где-то может быть обращение к невалидному указателю.
Мне кажется, что для ваших целей лучше подойдёт Selenium, а не PyQt.
import sys
from PyQt5.QtCore import QEventLoop, QUrl
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView
from bs4 import BeautifulSoup
class Render(QWebEngineView):
def __init__(self):
self.html = None
self.app = QApplication(sys.argv)
QWebEngineView.__init__(self)
self.loadFinished.connect(self._loadFinished)
def _callable(self, data):
self.html = data
def _loadFinished(self, result):
self.page().toHtml(self._callable)
def get_data(self, url):
self.html = None
self.load(QUrl(url))
while self.html is None:
self.app.processEvents(QEventLoop.ExcludeUserInputEvents |
QEventLoop.ExcludeSocketNotifiers |
QEventLoop.WaitForMoreEvents)
return self.html
if __name__ == '__main__':
print("Collecting data...")
render = Render()
for p in range(3):
html = render.get_data(f'https://hh.ru/search/vacancy?area=&fromSearchLine=true&st=searchVacancy&text=&page={p}')
# get data from page
bs4 = BeautifulSoup(html, "lxml")
for elem in bs4.find_all("div", "vacancy-serp-item"):
print(elem.find('a', 'bloko-link').text)