Я работаю с twint, чтобы загрузить несколько подписчиков в твиттере. Время от времени twint выдает ошибку, если не может найти кнопку «еще». Это описано здесь: https://github.com/twintproject/twint/issues/340.

Мой обходной путь - пройтись по циклу до тех пор, пока я не получу желаемое количество подписчиков. Однако я хотел бы отслеживать, сколько раз кнопка «Дополнительно» не была найдена с помощью cons_errors. Если посмотреть на feed.py, https://github.com/twintproject/ twint / blob / master / twint / feed.py, IndexError появляется, когда эта кнопка не найдена. Как я могу отследить, когда это происходит?

Это код из feed.py, который вызывает ошибку:

def Follow(response):
    logme.debug(__name__+':Follow')
    soup = BeautifulSoup(response, "html.parser")
    follow = soup.find_all("td", "info fifty screenname")
    cursor = soup.find_all("div", "w-button-more")
    try:
        cursor = findall(r'cursor=(.*?)">', str(cursor))[0]
    except IndexError:
        logme.critical(__name__+':Follow:IndexError')

    return follow, cursor

Код, который я использую, выглядит следующим образом, но никогда не перехватывает исключение, скорее, twint.run.Followers(c) выводит это сообщение об ошибке в консоль: CRITICAL:root:twint.feed:Follow:IndexError, и цикл продолжает повторяться без вывода in except block или увеличения cons_errors . Другими словами, попытка всегда успешна.

import twint
import time

c = twint.Config()
c.Limit = 1000 #download 1,000 followers
c.Username = "MarketGoldberg" #random account chosen with a 79 followers
c.Output = "followers.txt" #where to save followers
c.Resume = "resume.txt" #user to pick up from if called again

download_rounds = 2  # intentionally high to force error, all 79 followers will be downloaded in the first iteration
cons_errors = 0  # number of consecutive errors received from twint.
while download_rounds > 0 and cons_errors <= 10:
    try:
        twint.run.Followers(c)
        cons_errors = 0
        download_rounds -= 1
    except IndexError as err:
        print("in except block")
        cons_errors += 1
    time.sleep(5)
1
mks212 3 Дек 2019 в 20:20

1 ответ

Поскольку исключение уже перехвачено в пакете, вы не сможете поймать его во второй раз. Вы можете изменить пакет, удалить обработку исключений и обработать это самостоятельно. Или вы можете добавить обработчик журнала, который подсчитывает сообщения журнала, заканчивающиеся на :Follow:IndexError.

0
Nicola 3 Дек 2019 в 20:39
Спасибо @nicola. Я добавил функцию из пакета, которая уже реализует вход в мой вопрос. Есть ли у меня способ войти в этот журнал? Я не хочу изменять пакет. Спасибо.
 – 
mks212
3 Дек 2019 в 21:24