Не удалось загрузить html при разборе URL с помощью lxml - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь разобрать смайлики в предоставленном URL.Это учебное пособие в Книге обсуждения данных, которое поможет мне понять анализ данных.Это дословный код из учебника, и в конце выдает ошибку.Я слышал предложения по использованию urllib2, но смысл этого упражнения - использовать lxml.Это достижимо, или этот пример просто устарел?Можете ли вы дать некоторое представление, чтобы запустить это, проанализировать эмодзи, а затем вернуть список.

from lxml import html

page = html.parse('http://www.emoji-cheat-sheet.com/')

proper_headers = page.xpath('//h2|//h3')
proper_lists = page.xpath('//ul')

all_emoji = []

for header, list_cont in zip(proper_headers, proper_lists):
    section = header.text
    for li in list_cont.getchildren():
        emoji_dict = {}
        spans = li.xpath('div/span')
        if len(spans):
            link = spans[0].get('data-src')
            if link:
                emoji_dict['emoji_link'] = li.base_url + link
            else:
                emoji_dict['emoji_link'] = None
            emoji_dict['emoji_handle'] = spans[1].text_content()
        else:
            emoji_dict['emoji_link'] = None
            emoji_dict['emoji_handle'] = li.xpath('div')[0].text_content()
        emoji_dict['section'] = section
        all_emoji.append(emoji_dict)

print all_emoji

Ошибка:

Traceback (most recent call last):
  File "chp11-scraping/lxml_emoji_xpath.py", line 24, in <module>
    page = html.parse('http://www.emoji-cheat-sheet.com/')
  File "/home/ryan/.local/lib/python2.7/site-packages/lxml/html/__init__.py", line 940, in parse
    return etree.parse(filename_or_url, parser, base_url=base_url, **kw)
  File "src/lxml/etree.pyx", line 3426, in lxml.etree.parse
  File "src/lxml/parser.pxi", line 1840, in lxml.etree._parseDocument
  File "src/lxml/parser.pxi", line 1866, in lxml.etree._parseDocumentFromURL
  File "src/lxml/parser.pxi", line 1770, in lxml.etree._parseDocFromFile
  File "src/lxml/parser.pxi", line 1163, in lxml.etree._BaseParser._parseDocFromFile
  File "src/lxml/parser.pxi", line 601, in lxml.etree._ParserContext._handleParseResultDoc
  File "src/lxml/parser.pxi", line 711, in lxml.etree._handleParseResult
  File "src/lxml/parser.pxi", line 638, in lxml.etree._raiseParseError
IOError: Error reading file 'http://www.emoji-cheat-sheet.com/': failed to load external entity "http://www.emoji-cheat-sheet.com/"

1 Ответ

0 голосов
/ 29 ноября 2018

он перенаправляет на https и lxml не поддерживается, используйте urllib2 или requests, чтобы прочитать html

from lxml import html
import urllib2

# https://www.webpagefx.com/tools/emoji-cheat-sheet/
doc = urllib2.urlopen('http://www.emoji-cheat-sheet.com/')
page = html.parse(doc)
...