Использование python goose2 для python 2.7.
KNOWN_ARTICLE_CONTENT_TAGS
, куда вы помещаете теги / класс или идентификатор статьи, которую вы хотите извлечь, похоже, не работает.
скажем, например, взять внутри теги по умолчанию как
KNOWN_ARTICLE_CONTENT_TAGS = [
{'attr': 'itemprop', 'value': 'articleBody'},
{'attr': 'class', 'value': 'post-content'},
{'tag': 'article'},
]
Теперь мой первый вопрос: какова точная логика, по которой эти значения берутся?
- считает ли он, что весь текст внутри этих текстов является текстом по умолчанию?
- Являются ли они просто ссылкой на гуся, чтобы увеличить счет текста внутри этих узлов, но не гарантирует, что все будет отображаться?
- неужели гусь игнорирует другие общие общие теги, учитывают только эти теги?
- я видел, что пропускает добавление родного брата, если он возвращает true, что это значит?
но после некоторой отладки я обнаружил, что текст внутри упомянутых тегов не получает каких-либо особых предпочтений, на самом деле, не вызывая известный код статьи, имел точно такой же вывод, а также при некоторых известных источниках происходит сбой извлечения изображения при использовании известного теги по какой-то причине.
также при дальнейшем копании я увидел, что функция
def get_known_article_tags(self):
for item in KNOWN_ARTICLE_CONTENT_TAGS:
nodes = self.parser.getElementsByTag(
self.article.doc,
**item)
if len(nodes):
return nodes[0]
return None
работает с article.doc
объектом, который, похоже, не имеет тегов.
также это почти для всех сообщений возвращает только элемент с тегом article, а не элементы с атрибутами itemprop = articleBody , даже если они есть в статье.
при отладке функции is_articlebody
, как видно из кода ниже
def is_articlebody(self, node):
for item in KNOWN_ARTICLE_CONTENT_TAGS:
# attribute
if "attr" in item and "value" in item:
if(self.config.debug):
print 'for attr and value'
print self.parser.getAttribute(node, item['attr'])
print item['value']
print node
if self.parser.getAttribute(node, item['attr']) == item['value']:
if(self.config.debug):
print 'is article body from attribute'
return True
# tag
if "tag" in item:
print 'if tag'
print node.tag
if node.tag == item['tag']:
if(self.config.debug):
print 'is article body from tag'
return True
я заметил, что эта функция никогда не возвращала true, даже если в целевом документе извлечения были такие теги / классы.
Чтобы строка print self.parser.getAttribute(node, item['attr'])
всегда возвращалась как ноль.
Как мне заставить гуся взять весь текст внутри тех атрибутов / классов / тегов, которые указаны в известном списке , как и в приведенном выше примере, я хочу получить весь текст внутри нескольких тегов p (может быть другой кроме тегов p) независимо от оценки?
Редактировать:
пытаясь отладить его, я понял, что функция get_known_articles_tags возвращает только первый найденный тег / атрибут, найденный в dict,
сосредоточиться на: return nodes[0]
, поэтому он возвращает только этот единственный узел документа, а затем отправляет только этот объект узла, чтобы найти верхний узел - и предположим, что узел не удовлетворяет условиям хорошего / верхнего узла, затем он возвращается как пустой, что приводит к сбою ,
как мне объединить все объекты узлов в списке nodes
и отправить все узлы в качестве документа для анализа и использования его для поиска верхнего узла?