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

2024-04-24 06:46:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用这个Python sintax从url:http://www.dlib.org/dlib/november14/beel/11beel.html抓取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 inspector在评论行下:!--内容表--。 由于我之前发布的代码不可能获得div的全部内容,只能获取p div中的标题和文本,现在我找不到其他方法了。在


Tags: textdivformtreehttp内容htmlwww
1条回答
网友
1楼 · 发布于 2024-04-24 06:46:41

要使用Python/XPath获取网站某一部分的实际HTML内容,使用from lxml import etree而不是{}更容易。当您设置元素树时,有一个函数允许您返回元素的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内容。在

相关问题 更多 >