如何使用选择器访问某些特定文本?



如何使用python和css选择器访问"电话"和"传真"。我确实选择了"名称",但在"电话"和"传真"的情况下,我卡住了。对此的任何帮助将不胜感激。提前谢谢。

我尝试过:

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>

您可以尝试使用以下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: ")

请参阅: - 在 lxml 中获取元素的内部 HTML

由于键值是非结构化的,因此这将不可靠,但可以执行

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

或类似的东西,但随后您必须添加某种逻辑来对键值进行排序。 我不确定正则表达式是否合适,逻辑会很脆弱,因为无法保证数据的结构,但一些黑客可能会在这里起作用。

为了给它更多的结构,你可以使用xpath选择,如:

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

相关内容

最新更新