Проблема с парсингом на PyQt5

Pewde

Новичок
Пользователь
Авг 7, 2022
1
0
1
Пишу код для парсинга https://apitest.arizona-rp.com/mon/fraction/11/9. Паршу с помощью PyQt5. Вся проблема в том, что при первом вызове парсинга этого сайта код работает на отлично, но если вызвать метод 2 раза, то код выполняется только первый раз, а на второй раз выкидывает ошибку
Process finished with exit code -1073741819 (0xC0000005).
Помогите с решением этой проблемы, пожалуйста. Код прилагается:
Класс парсера:
Python:
from PyQt5.QtWebEngineWidgets import QWebEnginePage
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl
import sys
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.toHtml(self.Callable)
        print('Load finished')

    def Callable(self, html_str):
        self.html = html_str
        self.app.quit()
Парсинг сайта:
Python:
import bs4 as bs
from page import Page

organizations = {"1" : "Полиция ЛС", "2" : "Областная полиция", "3" : "ФБР", "4": "Полиция СФ", "5" : "Больница ЛС", "6" : "Правительство", "7" : "Тюрьма Строгого Режима", "8" : "Больница СФ", "9" : "Автошкола", "10" : "СМИ ЛС",
                 "11" : "Грув стрит", "12" : "Вагосы", "13" : "Балласы", "14" : "Ацтеки", "15" : "Рифа", "16" : "Русская мафия", "17" : "Якудза", "18" : "ЛКН", "19" : "Байкеры", "20" : "Армия ЛС",
                 "21" : "Центральный Банк", "22" : "Больница ЛВ", "23" : "СВАТ", "24" : "СМИ ЛВ", "25" : "Ночные волки", "26" : "СМИ СФ", "27" : "Армия СФ", "28" : "Темное Братство", "29" : "Страховая Компания"
}

def getMessageAboutOrg(orgId):
    page = Page("https://apitest.arizona-rp.com/mon/fraction/11/" + str(orgId))
    soup = bs.BeautifulSoup(page.html, 'html.parser')
    table = soup.find("tbody")
    countOnline = 0
    isLeaderOnline = False
    leader = ""
    deputy = []
    countOffline = 0
    for tr in table.find_all("tr"):
        if "_" in str(tr.find_all("td")[1]) and not str(tr.find_all("td")[3]).replace("<td>", "").replace("</td>", "") == "Сейчас играет":
            countOffline += 1
        if "_" in str(tr.find_all("td")[1]) and str(tr.find_all("td")[3]).replace("<td>", "").replace("</td>","") == "Сейчас играет" and str(tr.find_all("td")[2]).replace("<td>", "").replace("</td>","") == "Лидер":
            isLeaderOnline = True
        if str(tr.find_all("td")[2]).replace("<td>", "").replace("</td>","") == "Лидер":
            if leader == "":
                leader = str(tr.find_all("td")[1]).replace("<td>", "").replace("</td>","")
        if "_" in str(tr.find_all("td")[1]) and str(tr.find_all("td")[2]).replace("<td>", "").replace("</td>", "") == "9":
            nick = str(tr.find_all("td")[1]).replace("<td>", "").replace("</td>","")
            isOnline = False
            if str(tr.find_all("td")[3]).replace("<td>", "").replace("</td>","") == "Сейчас играет":
                isOnline = True
            deputy.append([nick, isOnline])
        if "_" in str(tr.find_all("td")[1]) and str(tr.find_all("td")[3]).replace("<td>", "").replace("</td>", "") == "Сейчас играет":
            countOnline += 1
    message = "Информация об организации " + "\"" + organizations[str(orgId)] + "\"\nОнлайн организации - " + str(countOnline) + "\nОффлайн организации - " + str(countOffline) + "\nЛидер организации:\n" + leader + " - "
    if isLeaderOnline:
        message = message + "Онлайн\nЗаместители:\n"
    else:
        message = message + "Оффлайн\nЗаместители:\n"
    for deput in deputy:
        if deput[1]:
            message = message + deput[0] + " - " + "Онлайн\n"
        else:
            message = message + deput[0] + " - " + "Оффлайн\n"
    return message
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 650
472
83
вы через qt получаете только html, тоже самое можно получить через requests, зачем вам вообще qt, не понятно

а ошибка, это ошибка доступа, то есть вы пытаетесь использовать память, которая вам уже не принадлежит
вы не верно используете qt класс, в питоне выяснить, где именно ошибка, тяжело, так как в недра qt тут залезть нельзя, а так ошибка на вызове QWebEnginePage.__init__(self) в классе Page
 
Последнее редактирование:

Форум IT Специалистов