Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Вопрос Парсер сайта

Мальчик твоей бывшей
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
7 Май 2018
Сообщения
391
Реакции
17
Всем хелоу, вопрос такой, есть сайт, и на него каждый день загружают определенный файл, с обновленной информацией, т.е. ты заходишь на сайт, там есть кнопка, при нажатии на которую у тебя скачивается этот файл.
Как можно реализовать отправку содержимого этого файла в чат с ботом в ТГ? (По запросу от самого пользователя).
Может у кого есть гайд?
Заранее спасибо :)
 
Python:
Expand Collapse Copy
import requests, datetime, os, wget, bs4, docx
import Utill.VK.Log as Log

def GetSiteStatus():
    try:
        requests.get("https://college.ru")
        return True

    except:
        return False


def GetDateTime(Day):
    Month = {1 : "января", 2 : "февраля", 3 :"марта", 4 : "апреля", 5 : "мая", 6 : "июня", 7 : "июля", 8 : "августа", 9 : "сентября", 10 : "октября", 11 : "ноября", 12 : "декабря"}

    if (Day == "зм"):
        ThisDateTime = datetime.date.today()
        TomorrowDateTime = ThisDateTime + datetime.timedelta(days = 1)

        if (datetime.datetime.today().isoweekday() == 6):
            TomorrowDateTime = ThisDateTime + datetime.timedelta(days = 2)

        if (datetime.datetime.today().isoweekday() == 7):
            TomorrowDateTime = ThisDateTime + datetime.timedelta(days = 1)

        ThisDay = TomorrowDateTime.strftime("%d")
        ThisMonth = int("%d"% TomorrowDateTime.month)

    else:
        ThisDateTime = datetime.datetime.now()

        ThisDay = str("%02d" % ThisDateTime.day)
        ThisMonth = int("%d"% ThisDateTime.month)

    return f"Замена на {ThisDay} {Month[ThisMonth]}"


def SearchFile(Day):
    Request = requests.get("https://college.ru/students/schedule", verify = False)
    Site = bs4.BeautifulSoup(Request.text, "lxml").html

    for Link in Site.findAll("img"):
        if (GetDateTime(Day)) in str(Link):
            FileLink = Link["title"].replace("Скачать ", "").replace(" ", "_")

            try:
                wget.download(f"http://college.ru/upload/price/postoynnoe_spo/para/{FileLink}.docx")
                return {"status": True, "Folder": FileLink}

            except:
                return {"status": False, "Message": "Не удалось скачать файл."}


    return {"status": False, "Message": "Файла с заменами нет."}


def Normalize(Message):
    return str(Message).replace("\n", " ")


def GetLastRow(File, Index):
    LastIndex = len(File.tables[0].rows[Index].cells) - 1
    return Normalize(str(File.tables[0].rows[Index].cells[LastIndex].text))


def ParceDOCXFile(Folder):
    File = docx.Document(Folder + ".docx")
    os.remove(Folder + ".docx")

    ReplaceForMyGroup = False
    GroupNameList = ["3ИСП-9-1", "3ИСП9-1"]

    for Table in File.tables:
        for Index, Row in enumerate(Table.rows):
            Group = str(File.tables[0].rows[Index].cells[0].text).replace(" ", "").upper()
            if (Group in GroupNameList):
                ReplaceForMyGroup = True
                break

   
    if (ReplaceForMyGroup):
        AllReplace = ""

        for Table in File.tables:
            for Index, Row in enumerate(Table.rows):
                Group = str(File.tables[0].rows[Index].cells[0].text).replace(" ", "").upper()

                if (Group in GroupNameList):
                    ReplaceOld = "[СТАРОЕ] > "
                    ReplaceNew = "[НОВОЕ] > "

                    OldNum = Normalize(File.tables[0].rows[Index].cells[1].text)
                    OldItem = Normalize(File.tables[0].rows[Index].cells[2].text)
                    OldPoint = Normalize(File.tables[0].rows[Index].cells[3].text)

                    NewItem = Normalize(File.tables[0].rows[Index].cells[4].text)
                    NewPoint = Normalize(GetLastRow(File, Index))

                    if ("НБ" in OldItem.upper() or "Н/Б" in OldItem.upper()):
                        if (len(OldNum) > 0): ReplaceOld += "№ " + OldNum
                        if (len(OldItem) > 0): ReplaceOld += " НБ"

                    else:
                        if (len(OldNum) > 0): ReplaceOld += "№" + OldNum
                        if (len(OldItem) > 0): ReplaceOld += " " + OldItem + " "
                        if (len(OldPoint) > 0): ReplaceOld += f"({OldPoint})"
                   
                   
                    if ("НБ" in NewItem.upper() or "Н/Б" in NewItem.upper()):
                        if (len(NewItem) > 0): ReplaceNew += " НБ"

                    else:
                        if (len(NewItem) > 0): ReplaceNew += NewItem + " "
                        if (len(NewPoint) > 0): ReplaceNew += f"({NewPoint})"


                    AllReplace += f"{ReplaceOld}\n{ReplaceNew}\n"
       
        return AllReplace

    else:
        return "Замен нет."
           

def GetReplace(Day):
    if (GetSiteStatus()):
        Request = SearchFile(Day)

        if (Request["status"]):
            print()
            return ParceDOCXFile(Request["Folder"])

        else:
            return Request["Message"]

    else:
        return "Сайт не доступен."
 
Python:
Expand Collapse Copy
import requests, datetime, os, wget, bs4, docx
import Utill.VK.Log as Log

def GetSiteStatus():
    try:
        requests.get("https://college.ru")
        return True

    except:
        return False


def GetDateTime(Day):
    Month = {1 : "января", 2 : "февраля", 3 :"марта", 4 : "апреля", 5 : "мая", 6 : "июня", 7 : "июля", 8 : "августа", 9 : "сентября", 10 : "октября", 11 : "ноября", 12 : "декабря"}

    if (Day == "зм"):
        ThisDateTime = datetime.date.today()
        TomorrowDateTime = ThisDateTime + datetime.timedelta(days = 1)

        if (datetime.datetime.today().isoweekday() == 6):
            TomorrowDateTime = ThisDateTime + datetime.timedelta(days = 2)

        if (datetime.datetime.today().isoweekday() == 7):
            TomorrowDateTime = ThisDateTime + datetime.timedelta(days = 1)

        ThisDay = TomorrowDateTime.strftime("%d")
        ThisMonth = int("%d"% TomorrowDateTime.month)

    else:
        ThisDateTime = datetime.datetime.now()

        ThisDay = str("%02d" % ThisDateTime.day)
        ThisMonth = int("%d"% ThisDateTime.month)

    return f"Замена на {ThisDay} {Month[ThisMonth]}"


def SearchFile(Day):
    Request = requests.get("https://college.ru/students/schedule", verify = False)
    Site = bs4.BeautifulSoup(Request.text, "lxml").html

    for Link in Site.findAll("img"):
        if (GetDateTime(Day)) in str(Link):
            FileLink = Link["title"].replace("Скачать ", "").replace(" ", "_")

            try:
                wget.download(f"http://college.ru/upload/price/postoynnoe_spo/para/{FileLink}.docx")
                return {"status": True, "Folder": FileLink}

            except:
                return {"status": False, "Message": "Не удалось скачать файл."}


    return {"status": False, "Message": "Файла с заменами нет."}


def Normalize(Message):
    return str(Message).replace("\n", " ")


def GetLastRow(File, Index):
    LastIndex = len(File.tables[0].rows[Index].cells) - 1
    return Normalize(str(File.tables[0].rows[Index].cells[LastIndex].text))


def ParceDOCXFile(Folder):
    File = docx.Document(Folder + ".docx")
    os.remove(Folder + ".docx")

    ReplaceForMyGroup = False
    GroupNameList = ["3ИСП-9-1", "3ИСП9-1"]

    for Table in File.tables:
        for Index, Row in enumerate(Table.rows):
            Group = str(File.tables[0].rows[Index].cells[0].text).replace(" ", "").upper()
            if (Group in GroupNameList):
                ReplaceForMyGroup = True
                break

  
    if (ReplaceForMyGroup):
        AllReplace = ""

        for Table in File.tables:
            for Index, Row in enumerate(Table.rows):
                Group = str(File.tables[0].rows[Index].cells[0].text).replace(" ", "").upper()

                if (Group in GroupNameList):
                    ReplaceOld = "[СТАРОЕ] > "
                    ReplaceNew = "[НОВОЕ] > "

                    OldNum = Normalize(File.tables[0].rows[Index].cells[1].text)
                    OldItem = Normalize(File.tables[0].rows[Index].cells[2].text)
                    OldPoint = Normalize(File.tables[0].rows[Index].cells[3].text)

                    NewItem = Normalize(File.tables[0].rows[Index].cells[4].text)
                    NewPoint = Normalize(GetLastRow(File, Index))

                    if ("НБ" in OldItem.upper() or "Н/Б" in OldItem.upper()):
                        if (len(OldNum) > 0): ReplaceOld += "№ " + OldNum
                        if (len(OldItem) > 0): ReplaceOld += " НБ"

                    else:
                        if (len(OldNum) > 0): ReplaceOld += "№" + OldNum
                        if (len(OldItem) > 0): ReplaceOld += " " + OldItem + " "
                        if (len(OldPoint) > 0): ReplaceOld += f"({OldPoint})"
                  
                  
                    if ("НБ" in NewItem.upper() or "Н/Б" in NewItem.upper()):
                        if (len(NewItem) > 0): ReplaceNew += " НБ"

                    else:
                        if (len(NewItem) > 0): ReplaceNew += NewItem + " "
                        if (len(NewPoint) > 0): ReplaceNew += f"({NewPoint})"


                    AllReplace += f"{ReplaceOld}\n{ReplaceNew}\n"
      
        return AllReplace

    else:
        return "Замен нет."
          

def GetReplace(Day):
    if (GetSiteStatus()):
        Request = SearchFile(Day)

        if (Request["status"]):
            print()
            return ParceDOCXFile(Request["Folder"])

        else:
            return Request["Message"]

    else:
        return "Сайт не доступен."
БЛЯЯ спс !
 
Назад
Сверху Снизу