【发布时间】:2020-03-03 02:22:44
【问题描述】:
请考虑以下 HTML:
<html>
<body>
<ul>
<li><h5>Title 1</h5><div><span>Apples</span></li>
<li><h5>Title 2</h5><div><span>Bananas</span></li>
<li><h5>Title 3</h5><div><span>Grapes</span></li>
<li><h5>Title 4</h5><div><span>Pears</span></li>
</ul>
</body>
</html>
使用 lxml,我可以轻松检索 h5:
from lxml import html
example_html = '''<html>
<body>
<ul>
<li><h5>Title 1</h5><div><span>Apples</span></li>
<li><h5>Title 2</h5><div><span>Bananas</span></li>
<li><h5>Title 3</h5><div><span>Grapes</span></li>
<li><h5>Title 4</h5><div><span>Pears</span></li>
</ul>
</body>
</html>'''
tree = html.fromstring(example_html)
element_list = tree.xpath('//h5')
# List comprehension to get text
result = [i.text for i in element_list]
print(result)
从该代码中,结果当然是:
['Title 1', 'Title 2', 'Title 3', 'Title 4']
但我需要知道如何产生这样的结果:
['Title 1', 'Apples', 'Title 2', 'Bananas', 'Title 3', 'Grapes', 'Title 4', 'Pears']
我尝试像这样修改代码:
collector = []
for i in element_list:
h5 = i.xpath('//h5')
collector.append(h5[0].text)
span = i.xpath('//span')
collector.append(span[0].text)
print(collector)
但是得到了这个结果(接近但不完全):
['Title 1', 'Apples', 'Title 1', 'Apples', 'Title 1', 'Apples', 'Title 1', 'Apples']
这有可能吗?我得到了上述代码,任何帮助将不胜感激。非常感谢。
【问题讨论】:
-
您是否尝试打印
tree的属性?也许有一种方法可以通过调查来获取这些字符串。
标签: python lxml screen-scraping