XPath / Python - 如何在<div>

时间:2015-08-31 10:19:54

标签: python html xpath

我正在尝试使用此Python sintax来抓取此网址上的html内容:http://www.dlib.org/dlib/november14/beel/11beel.html

    s="http://www.dlib.org/dlib/november14/beel/11beel.html"
    content = requests.get(s)
    tree = html.fromstring(content.text)
    titoli = tree.xpath('/html/body/form/table[3]/tr/td/table[5]/tr/td/table[1]/tr/td[2]/h3/text()')
    par = tree.xpath('/html/body/form/table[3]/tr/td/table[5]/tr/td/table[1]/tr/td[2]/p/text()')
    articoli = json.dumps({'titoli':titoli,'contenuti':par})
    print ("Content-type: json")
    print
    print (articoli)

主要的要求是找到一个XPath查询,用于返回页面中最有用div内的每个标签,标签内容和文本,你可以用这个路径找到它/ html / body / form / table [3] / tr / td / table [5]或使用注释行下的Web检查器:! - CONTENT TABLE - 。 使用之前发布的代码不可能得到div的全部内容,但只有标题和文本在p div内,现在我找不到另一种方式。

1 个答案:

答案 0 :(得分:5)

要使用Python / XPath获取网站某个部分的实际HTML内容,使用from lxml import etree代替from lxml import html会更容易。设置元素树时,有一个函数允许您返回元素的HTML内容,而不是仅返回文本内容(如您所述)。您的代码如下:

from lxml import etree
import requests

s = "http://www.dlib.org/dlib/november14/beel/11beel.html"
page = requests.get(s)
tree = etree.HTML(page.text)
element = tree.xpath('./body/form/table[3]/tr/td/table[5]')
content = etree.tostring(element[0])

tree.xpath返回所选元素的列表。在这种情况下,因为您使用的是特定的XPath,所以它返回一个只包含一个元素的列表。因此,我们必须使用etree.tostring(element[0])来访问列表的第一个元素,并将该元素的HTML内容作为字符串返回。