我从lxml on Python3的lxml开始,我无法获得正确的正弦化来选择所有具有ul内容的li元素。我试着用这个结构:
<body>
<div> ..... </div>
<div> ..... </div>
<div id="div-A">
<div id="subdiv-1">
<form> ... </form>
<div> ..... </div>
<div> ..... </div>
<ul>
<li>
<div id="div-1">
<div> ..... </div>
<div> ..... </div>
<div id="subdiv-1">
<a class="name">
<span>
....text1....
</span>
</a>
</div>
<div id="subdiv-2">
<div class="class-1">
<div class="subClass-1">
<div> ....text2.... </div>
</div>
<span class="subClass-2">
....text3....
</span>
</div>
</div>
</div>
</li>
... x23...
</ul>
</div>
</div>
</body>我的目标是能够得到text1,text2和text3。
因此,首先,我尝试获取所有li元素及其内容:
content = html_response.content
fixed_content = fromstring(content) # parse the HTML and correct malformed HTML
items = fixed_content.xpath('//ul/li/*')并将items传递给具有for循环的函数,以便在23个li元素上进行迭代。现在我试着得到短信,所以:
for item in items:
text1 = item.xpath('/div[@id="div-1"]/div[@id="subdiv-1"]/a[@class="name"]/span').text_content()
text2 = item.xpath('/div[@id="div-1"]/div[@id="subdiv-2"]/div[@class="class-1"]/div[@class="subClass-1"]/div').text_content()
text3 = item.xpath('/div[@id="div-1"]/div[@id="subdiv-2"]/div[@class="class-1"]/div[@class="subClass-2"]/span[@class="subClass-2"]').text_content()但在所有情况下,我得到的结果都是空洞的,没有任何内容。我做错什么了?
致以问候。
发布于 2018-08-30 08:37:19
尝试下面的代码以获得所需的输出:
items = fixed_content.xpath('//ul/li//span | //ul/li//div[@class="subClass-1"]')
for item in items:
item.text_content().strip()输出是
'....text1....'
'....text2....'
'....text3....'或
items = fixed_content.xpath('//ul/li')
for item in items:
text1 = item.xpath('.//a[@class="name"]/span')[0].text_content().strip()
text2 = item.xpath('.//div[@class="subClass-1"]')[0].text_content().strip()
text3 = item.xpath('.//span[@class="subClass-2"]')[0].text_content().strip()如果希望将每个文本节点作为变量
发布于 2018-08-30 08:37:08
xpath查询似乎为我提供了想要的输出。text1、text2和text3在完全写出它们时会产生结果。使用string()方法,您可以选择查找元素的内部文本值:
//ul/li/div[@id="div-1"]/div[@id="subdiv-1"]/a[@class="name"]/span/string(),
//ul/li/div[@id="div-1"]/div[@id="subdiv-2"]/div[@class="class-1"]/div[@class="subClass-1"]/div/string(),
//ul/li/div[@id="div-1"]/div[@id="subdiv-2"]/div[@class="class-1"]/span[@class="subClass-2"]/string()编写它们并使用string()方法是否没有为您提供预期的text1 1-3值?
发布于 2018-08-30 10:29:24
[i.strip() for i in tree.xpath('//ul//div[@class="subClass-1"]//text()|//ul//span//text()') if i.strip()]https://stackoverflow.com/questions/52092180
复制相似问题