2010-01-18 16 views
5

मुझे यह xpath क्वेरी मिली है:Lxml, XPath और पायथन का उपयोग कर किसी वेबपृष्ठ से लिंक निकालने के लिए कैसे?

/html/body//tbody/tr[*]/td[*]/a[@title]/@href 

यह शीर्षक विशेषता के साथ सभी लिंक निकालता है - और href में href देता है।

हालांकि, मैं lxml के साथ इसका उपयोग नहीं कर सकता।

from lxml import etree 
parsedPage = etree.HTML(page) # Create parse tree from valid page. 

# Xpath query 
hyperlinks = parsedPage.xpath("/html/body//tbody/tr[*]/td[*]/a[@title]/@href") 
for x in hyperlinks: 
    print x # Print links in <a> tags, containing the title attribute 

यह lxml (खाली सूची) से कोई परिणाम नहीं देता है।

एक हाइपरलिंक के href टेक्स्ट (लिंक) को कैसे ले जाएगा जिसमें पायथन के तहत lxml के साथ विशेषता शीर्षक शामिल है?

+0

क्या आपके द्वारा पार्स किए जा रहे दस्तावेज़ में नामस्थान (xmlns) सेट है? –

उत्तर

9

मैं इसे निम्न कोड के साथ काम करने के लिए कर रहा था:

from lxml import html, etree 
from StringIO import StringIO 

html_string = '''<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 

<html lang="en"> 
<head/> 
<body> 
    <table border="1"> 
     <tbody> 
     <tr> 
      <td><a href="http://stackoverflow.com/foobar" title="Foobar">A link</a></td> 
     </tr> 
     <tr> 
      <td><a href="http://stackoverflow.com/baz" title="Baz">Another link</a></td> 
     </tr> 
     </tbody> 
    </table> 
</body> 
</html>''' 

tree = etree.parse(StringIO(html_string)) 
print tree.xpath('/html/body//tbody/tr/td/a[@title]/@href') 

>>> ['http://stackoverflow.com/foobar', 'http://stackoverflow.com/baz'] 
2

फ़ायरफ़ॉक्स एचटीएमएल जब यह renders के लिए adds additional html tags, xpath फ़ायरबग उपकरण वास्तविक एचटीएमएल सर्वर द्वारा लौटाए के साथ असंगत द्वारा वापस कर रही है (और क्या urllib/2 वापस आ जाएगा)।

<tbody> टैग को हटाने से आमतौर पर चाल चलती है।

संबंधित मुद्दे