lxml.html。读取文件错误;无法加载外部实体
lxml.html. Error reading file; Failed to load external entity
我正在尝试使用 lxml.html:
的解析从 YouTube 获取电影预告片 url
from lxml import html
import lxml.html
from lxml.etree import XPath
def get_youtube_trailer(selected_movie):
# Create the url for the YouTube query in order to find the movie trailer
title = selected_movie
t = {'search_query' : title + ' movie trailer'}
query_youtube = urllib.urlencode(t)
search_url_youtube = 'https://www.youtube.com/results?' + query_youtube
# Define the XPath for the YouTube movie trailer link
movie_trailer_xpath = XPath('//ol[@class="item-section"]/li[1]/div/div/div[2]/h3/a/@href')
# Parse the YouTube html code
html = lxml.html.parse(search_url_youtube)
# Add the movie trailer to our results
results['movie_trailer'] = 'https://www.youtube.com' + movie_trailer_xpath(html)[0]
我收到以下错误:
File "C:/Users/Aleks/Google Drive/Udacity - Full Stack Web Dev Nanodegree/Lessons/Lesson 3a (Make Classes) - Movie Website/models.py", line 163, in <module>
print get_youtube_trailer("titanic")
File "C:/Users/Aleks/Google Drive/Udacity - Full Stack Web Dev Nanodegree/Lessons/Lesson 3a (Make Classes) - Movie Website/models.py", line 157, in get_youtube_trailer
html = lxml.html.parse(search_url_youtube)
File "C:\Python27\lib\site-packages\lxml\html\__init__.py", line 788, in parse
return etree.parse(filename_or_url, parser, base_url=base_url, **kw)
File "lxml.etree.pyx", line 3301, in lxml.etree.parse (src\lxml\lxml.etree.c:72453)
File "parser.pxi", line 1791, in lxml.etree._parseDocument (src\lxml\lxml.etree.c:105915)
File "parser.pxi", line 1817, in lxml.etree._parseDocumentFromURL (src\lxml\lxml.etree.c:106214)
File "parser.pxi", line 1721, in lxml.etree._parseDocFromFile (src\lxml\lxml.etree.c:105213)
File "parser.pxi", line 1122, in lxml.etree._BaseParser._parseDocFromFile (src\lxml\lxml.etree.c:100163)
File "parser.pxi", line 580, in lxml.etree._ParserContext._handleParseResultDoc (src\lxml\lxml.etree.c:94286)
File "parser.pxi", line 690, in lxml.etree._handleParseResult (src\lxml\lxml.etree.c:95722)
File "parser.pxi", line 618, in lxml.etree._raiseParseError (src\lxml\lxml.etree.c:94754)
IOError: Error reading file 'https://www.youtube.com/results?search_query=titanic+movie+trailer': failed to load external entity "https://www.youtube.com/results?search_query=titanic+movie+trailer"
解析来自其他网站的信息的方法完全相同,然后就奏效了。
SSL/TLS is not supported by libxml2. Use Python's urllib2 instead.
如果您使用 http://<blah>.<blah>
尝试任何 url,您不会遇到麻烦,但此处不支持 https。还有重定向问题。
尝试
from urllib2 import urlopen
import lxml.html
tree = lxml.html.parse(urlopen('https://google.com'))
有关详细信息,请参阅 this
解决方案
嗯,有解决方法。试试 selenium,如果你不想要 UI 然后 运行 无头模式下的 selenium。很好,我自己试过了。
我正在尝试使用 lxml.html:
的解析从 YouTube 获取电影预告片 urlfrom lxml import html
import lxml.html
from lxml.etree import XPath
def get_youtube_trailer(selected_movie):
# Create the url for the YouTube query in order to find the movie trailer
title = selected_movie
t = {'search_query' : title + ' movie trailer'}
query_youtube = urllib.urlencode(t)
search_url_youtube = 'https://www.youtube.com/results?' + query_youtube
# Define the XPath for the YouTube movie trailer link
movie_trailer_xpath = XPath('//ol[@class="item-section"]/li[1]/div/div/div[2]/h3/a/@href')
# Parse the YouTube html code
html = lxml.html.parse(search_url_youtube)
# Add the movie trailer to our results
results['movie_trailer'] = 'https://www.youtube.com' + movie_trailer_xpath(html)[0]
我收到以下错误:
File "C:/Users/Aleks/Google Drive/Udacity - Full Stack Web Dev Nanodegree/Lessons/Lesson 3a (Make Classes) - Movie Website/models.py", line 163, in <module>
print get_youtube_trailer("titanic")
File "C:/Users/Aleks/Google Drive/Udacity - Full Stack Web Dev Nanodegree/Lessons/Lesson 3a (Make Classes) - Movie Website/models.py", line 157, in get_youtube_trailer
html = lxml.html.parse(search_url_youtube)
File "C:\Python27\lib\site-packages\lxml\html\__init__.py", line 788, in parse
return etree.parse(filename_or_url, parser, base_url=base_url, **kw)
File "lxml.etree.pyx", line 3301, in lxml.etree.parse (src\lxml\lxml.etree.c:72453)
File "parser.pxi", line 1791, in lxml.etree._parseDocument (src\lxml\lxml.etree.c:105915)
File "parser.pxi", line 1817, in lxml.etree._parseDocumentFromURL (src\lxml\lxml.etree.c:106214)
File "parser.pxi", line 1721, in lxml.etree._parseDocFromFile (src\lxml\lxml.etree.c:105213)
File "parser.pxi", line 1122, in lxml.etree._BaseParser._parseDocFromFile (src\lxml\lxml.etree.c:100163)
File "parser.pxi", line 580, in lxml.etree._ParserContext._handleParseResultDoc (src\lxml\lxml.etree.c:94286)
File "parser.pxi", line 690, in lxml.etree._handleParseResult (src\lxml\lxml.etree.c:95722)
File "parser.pxi", line 618, in lxml.etree._raiseParseError (src\lxml\lxml.etree.c:94754)
IOError: Error reading file 'https://www.youtube.com/results?search_query=titanic+movie+trailer': failed to load external entity "https://www.youtube.com/results?search_query=titanic+movie+trailer"
解析来自其他网站的信息的方法完全相同,然后就奏效了。
SSL/TLS is not supported by libxml2. Use Python's urllib2 instead.
如果您使用 http://<blah>.<blah>
尝试任何 url,您不会遇到麻烦,但此处不支持 https。还有重定向问题。
尝试
from urllib2 import urlopen
import lxml.html
tree = lxml.html.parse(urlopen('https://google.com'))
有关详细信息,请参阅 this
解决方案
嗯,有解决方法。试试 selenium,如果你不想要 UI 然后 运行 无头模式下的 selenium。很好,我自己试过了。