Очистить большие HTML-фрагменты с помощью Python (с BeautifulSoup - или нет). Ограничение памяти - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь извлечь список подписчиков в Instagram с базовым кодированием на Python, так как я не эксперт ни в Python, ни в HTML. Итак, мой подход состоит в том, чтобы моделировать человеческие итерации.

В основном я использую Selenium, чтобы открыть страницу подписчиков Instagram, использовал базовую кодировку Python, чтобы прокрутить вниз бесконечную прокрутку, и BeautifulSoup, чтобы очистить список.

Проблема в том, что после нескольких часов прокрутки я достигаю своего предела памяти, потому что список огромен.

Мой текущий подход:

  • Получите окно бесконечной прокрутки с помощью: elemWindow=browser.find_element_by_css_selector('.j6cq2')
  • Я прокручиваю вниз, пока ~ 30 новых пользователей не появятся в списке
  • Получить всю страницу источника: pg1=browser.page_source
  • Используйте SoupStrainer и BeautifulSoup, чтобы получить весь список (использовал lxml, потому что я искал здесь, и люди говорили, что это быстрее, и это действительно так):

strainer = SoupStrainer("a",{"class":"FPmhX notranslate zsYNt "})

elm1=bs4.BeautifulSoup(pg1, "lxml", parse_only=strainer)

  • Затем я экспортирую в Excel только новых пользователей, которые появились (у меня последняя длина списка и новая длина списка, поэтому я экспортирую разницу)

Основная проблема заключается в том, что после нескольких часов прокрутки сценарий останавливается на: pg1=browser.page_source, возможно, потому что он достиг предела памяти.

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

Я искал здесь о iterparse и htmltext.split ElementTree, но мне не было ясно, следует ли идти по этому пути ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...