如何使用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>
答案 0 :(得分:1)
您可以尝试使用以下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: ")
答案 1 :(得分:0)
请参阅: - 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
或类似的东西,但是你必须添加某种逻辑来排序键值。我不确定正则表达式是否合适,逻辑会很脆弱,因为不能保证数据的结构,但是有些黑客可能会在这里工作。
为了给它更多结构,你可以使用xpath选择,如:
//div.contact-details/descendant-or-self::h4[text()='Address']//p