Python 2.7中的lxml输出 - python

这可能是一个完全愚蠢的问题,但谷歌无济于事。
首先,我需要导入库:

from lxml import html
from lxml import etree
import requests

很简单。现在运行并解析一些代码。在这种情况下,该链接是本地餐厅的每周午餐菜单。在这里,我们准备从中提取位的代码。

page = requests.get("http://www.farozon.se/lunchmeny-20207064")
tree = html.fromstring(page.text)
htmlparser = etree.HTMLParser()
tree2 = etree.parse(page.raw, htmlparser)

现在,让我们来看看菜单!如您所见,我正在测试几种不同的方式来获得所需的输出。

friday = tree.cssselect("#block_82470858 > div > div > div.h24_frame_personal_text.h24_frame_padding > div > table > tbody > tr:nth-child(4)")
test = tree.xpath("/html/body")

让我们只打印输出以查看我们得到了什么。

print page
print tree.cssselect('#block_82470858 > div > div > div.h24_frame_personal_text.h24_frame_padding > div > table > tbody > tr:nth-child(4)')
print tree2
print friday
print test

希望能吃点东西...等等,那不健康的食物。到底是什么?在上面的尝试中,在我的IDE中,我尝试了Google的lxml和请求的前20个链接,它们都输出相同的内容,但是声称要输出实际的html。我不知道发生了什么事。

<Response [200]>
[<Element tr at 0x30139f0>]
<lxml.etree._ElementTree object at 0x2db0dd0>
[<Element tr at 0x30139f0>]
[<Element body at 0x3013a48>]

python大神给出的解决方案

通过lxml.etreerequests教程应该有助于理解基础知识。

<Response [200]>

这是一个requests.Response对象,在这种情况下,该对象是requests.get()调用返回的。

<lxml.etree._ElementTree object at 0x2db0dd0>

这是ElementTree方法返回的parse() object。

在这种情况下,tree.cssselect()tree.xpath()返回一个lxml.etree.Element实例列表,列表中的每个项目都对应于页面上的HTML元素。

这是提取菜单项的示例代码:

from lxml import html
import requests

page = requests.get("http://www.farozon.se/lunchmeny-20207064")
tree = html.fromstring(page.text)

days = tree.cssselect("#block_82470858 table tr")[1:-1]
for item in days:
    cells = item.findall('td')
    day = cells[0].text_content().strip()
    dishes = cells[-1].text_content().strip()

    print day
    print dishes
    print "----"

印刷品:

Måndag
----
Tisdag
----
Onsdag
  Helstekt kalkonbröstfile med rödkål, gele
  Panpizza med skinka,ananas,lök,bacon, vitkålssallad
 
----
Torsdag
 Ärtsoppa med fläsk, pannkaka, sylt, grädde
 Köttfärslimpa pampas med gräddsås, lingonsylt
...

如您所见,我正在使用text_content()方法提取Element对象的内容。