2016-12-28 171 views
0

我想用這段代碼解析網頁。Python爬蟲 - html.fromstring

ac = requests.get('link....') 
html_text = ac.text 
lx = html.fromstring(html_text) 

當我運行這段代碼我收到此錯誤

Traceback (most recent call last): 
File "Crawler.py", line 197, in <module> 
cnx.close() 
File "Crawler.py", line 46, in RequestPage 
lx = html.fromstring(html_text) 
File "C:\Python27\lib\site-packages\lxml\html\__init__.py", line 867, in fromstring 
doc = document_fromstring(html, parser=parser, base_url=base_url, **kw) 
File "C:\Python27\lib\site-packages\lxml\html\__init__.py", line 752, in document_fromstring 
value = etree.fromstring(html, parser, **kw) 
File "src\lxml\lxml.etree.pyx", line 3213, in lxml.etree.fromstring (src\lxml\lxml.etree.c:76696) 
File "src\lxml\parser.pxi", line 1830, in lxml.etree._parseMemoryDocument (src\lxml\lxml.etree.c:115101) 
File "src\lxml\parser.pxi", line 1711, in lxml.etree._parseDoc (src\lxml\lxml.etree.c:113677) 
File "src\lxml\parser.pxi", line 1051, in lxml.etree._BaseParser._parseUnicodeDoc (src\lxml\lxml.etree.c:107847) 
File "src\lxml\parser.pxi", line 584, in lxml.etree._ParserContext._handleParseResultDoc (src\lxml\lxml.etree.c:102150) 
File "src\lxml\parser.pxi", line 694, in lxml.etree._handleParseResult (src\lxml\lxml.etree.c:103800) 
File "src\lxml\parser.pxi", line 633, in lxml.etree._raiseParseError (src\lxml\lxml.etree.c:102888) 
lxml.etree.XMLSyntaxError: line 1843: Tag ie:menuitem invalid 

我發現的HTML標籤,它會導致錯誤:

<ie:menuitem id="MSOMenu_Help" iconsrc="/_layouts/images/HelpIcon.gif" onmenuclick="MSOWebPartPage_SetNewWindowLocation(MenuWebPart.getAttribute('helpLink'), MenuWebPart.getAttribute('helpMode'))" text="Help" type="option" style="display:none"> 

</ie:menuitem> 
+0

您可能需要定義一個自定義元素,以便lxml可以理解Sharepoint魔法:http://lxml.de/element_classes.html –

+0

或者使用BeautifulSoup模塊作爲替代方案,它知道如何處理命名空間元素。 – DeepSpace

回答

0

您發現HTML標記這種情況下,錯誤,但你解決了嗎?如果不試試這個:

ac = requests.get('link....') lx = html.fromstring(ac.content) valueOfHTMLTag = lx.xpath('//TAG[@class/id="Name"]/text()')

,你改變

  • TAG在你想要得到的價值標籤。
  • 選擇標籤
  • 標籤的ID /類名的class和id

這將返回與正確的類/ ID該標籤的值的數組。

希望這會有所幫助!