Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 12 additions & 10 deletions newspaper/extractors.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,12 +254,19 @@ def get_title(self, doc):
"""
title = ''
title_element = self.parser.getElementsByTag(doc, tag='title')
# no title found
if title_element is None or len(title_element) == 0:
return title
title_text_fb = (
self.get_meta_content(doc, 'meta[property="og:title"]') or
self.get_meta_content(doc, 'meta[name="og:title"]') or ''
)

# title elem found
title_text = self.parser.getText(title_element[0])
# no title found, fallback to og:title
if title_element is None or len(title_element) == 0:
title_text = title_text_fb
if not title_text:
return title
else:
# title elem found
title_text = self.parser.getText(title_element[0])
used_delimeter = False

# title from h1
Expand All @@ -281,11 +288,6 @@ def get_title(self, doc):
# clean double spaces
title_text_h1 = ' '.join([x for x in title_text_h1.split() if x])

# title from og:title
title_text_fb = (
self.get_meta_content(doc, 'meta[property="og:title"]') or
self.get_meta_content(doc, 'meta[name="og:title"]') or '')

# create filtered versions of title_text, title_text_h1, title_text_fb
# for finer comparison
filter_regex = re.compile(r'[^\u4e00-\u9fa5a-zA-Z0-9\ ]')
Expand Down
4 changes: 4 additions & 0 deletions tests/unit_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,10 @@ def test_get_title_quotes(self):
html = '<title>{}</title>'.format(title)
self.assertEqual(self._get_title(html), title)

def test_get_title_fallback_to_og_title_when_title_missing(self):
html = '<meta property="og:title" content="Fallback title from og">'
self.assertEqual(self._get_title(html), 'Fallback title from og')

def _get_canonical_link(self, article_url, html):
doc = self.parser.fromstring(html)
return self.extractor.get_canonical_link(article_url, doc)
Expand Down