Как я могу эффективно извлечь текст из группы для веб-страниц без дополнительной информации - PullRequest
0 голосов
/ 22 мая 2019

У меня есть список веб-страниц около 1 миллиона, я хочу эффективно просто извлечь текст из этих страниц.В настоящее время я использую библиотеку BeautifulSoup в python для получения текста из HTML и использую команду request для получения html веб-страницы.Этот подход извлекает некоторую дополнительную информацию в дополнение к тексту, например, если какой-либо javascript указан в теле.

Не могли бы вы предложить мне какой-нибудь подходящий и эффективный способ выполнить задачу.Я посмотрел на scrapy, но похоже, что он сканирует определенный веб-сайт.Можем ли мы передать ему список конкретных веб-страниц для получения информации?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Да, вы можете использовать Scrapy для сканирования набора URL-адресов в общем виде.

Вам просто нужно установить их в атрибуте списка start_urls вашего паука или переопределить метод start_requests spider для получения запросов от любого источника данных, а затем реализовать обратный вызов parse для выполнения универсального извлечения контента ты хочешь.

Вы можете использовать html-text для извлечения текста из них и обычные селекторы Scrapy для извлечения дополнительных данных, подобных упомянутым вами.

0 голосов
/ 22 мая 2019

В scrapy вы можете настроить свой собственный парсер. Например. Прекрасный суп. Этот парсер вы можете вызвать из вашего метода разбора.

Чтобы извлечь текст из общих страниц, я обхожу только тело, исключаю комментарии и т. Д., А также некоторые теги, такие как сценарий, стиль и т. Д .:

for snippet in soup.find('body').descendants:
    if isinstance(snippet, bs4.element.NavigableString) \
            and not isinstance(snippet, EXCLUDED_STRING_TYPES)\
            and snippet.parent.name not in EXCLUDED_TAGS:
        snippet = re.sub(UNICODE_WHITESPACES, ' ', snippet)
        snippet = snippet.strip()
        if snippet != '':
            snippets.append(snippet)

с

EXCLUDED_STRING_TYPES = (bs4.Comment, bs4.CData, bs4.ProcessingInstruction, bs4.Declaration)
EXCLUDED_TAGS = ['script', 'noscript', 'style', 'pre', 'code']
UNICODE_WHITESPACES = re.compile(u'[\t\n\x0b\x0c\r\x1c\x1d\x1e\x1f \x85\xa0\u1680\u2000\u2001\u2002\u2003\u2004'
                                 u'\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]+')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...