XPath / Python-如何在<div>中获取不同的html标签和文本

Pog*_*gio 4 html python xpath

我正在尝试使用以下Python语法从以下URL抓取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)
Run Code Online (Sandbox Code Playgroud)

主要要求是找到一个XPath查询,以返回页面最有用的div中的每个标签,标签内容和文本,您可以使用以下路径找到它/ html / body / form / table [3] / tr / td / table [5]或在注释行下使用Web检查器:!-内容表-。使用我以前发布的代码无法获取div的全部内容,而只能获取p div中的标题和文本,现在我找不到其他方法。

gtl*_*ert 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])
Run Code Online (Sandbox Code Playgroud)

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