"How can I get to some specific text using selector?" 如何通过选择器获取特定文本?

2024-06-08 16:47:09 发布

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

如何使用python结合css选择器访问“phone”和“fax”。我确实选择了“姓名”,但在“电话”和“传真”的情况下,我卡住了。在此方面的任何帮助都将不胜感激。提前谢谢。你知道吗

我试过:

name = div.contact-details p     #It works
phone = div.contact-details p    #Can't think beyond
fax = div.contact-details p      #Can't think beyond

项目所在的元素:

<div class="contact-details block dark">
<h3>Contact Details</h3><p>Company Name: PIMS Group Pty Ltd<br>Phone: +61 7 
4969 3900<br>Fax: +61 7 4969 3999<br>Email: <a 
href="mailto:admin@pims.net.au">admin@pims.net.au</a><br>Web: <a 
target="_blank" href="http://www.pims.net.au">http://www.pims.net.au</a></p>
<h4>Address</h4><p>43 Evans Avenue<br>North Mackay<br>QLD<br>4740</p>
<h4>Contact</h4><p></p>
</div>

Tags: brdivnetcontactphonedetailscanh4
2条回答

您可以尝试使用以下XPath表达式来获取所需的数据:

# For Fax
substring-after(//div[@class="contact-details block dark"]/p/text()[starts-with(., "Fax:")], "Fax: ")
# For Phone
substring-after(//div[@class="contact-details block dark"]/p/text()[starts-with(., "Phone:")], "Phone: ")

请参见: -Get the inner HTML of a element in lxml

因为键值是非结构化的,所以这是不可靠的,但是可以执行以下操作:

for x in inner_html.split('<br>'):
    if ':' in x:
        yield x.split(':')[0], x.split(':')[1]
    else:
        yield 'unknown', x

或者类似的东西,但是您必须添加某种逻辑来对键值进行排序。我不确定regex是否合适,因为无法保证数据的结构,所以逻辑将是脆弱的,但有些黑客可能在这里工作。你知道吗

为了给它提供更多的结构,您可以使用xpath选择,例如:

//div.contact-details/descendant-or-self::h4[text()='Address']//p

相关问题 更多 >