• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

Pewde

Member
24.07.2022
5
0
BIT
0
Пишу код для парсинга . Паршу с помощью 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
 

.Method

Grey Team
17.12.2018
255
63
BIT
0
Тематикой форума ошиблись)
Вам на стаковерфлоу или на какой-нибудь форум питонистов.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!