我们有以下HTML:
<a class="link contact-info__link" href="tel:+99999999999">
<svg class="icon icon--telephone contact-info__link-icon contact-info__link-icon--phone">
<use xlink:href="/local/templates/.default/img/icon-font/icon-font.svg#icon-phone"></use>
</svg>
<span class="contact-info__link-text">+9 (999) 999-99-99</span>
</a>
我需要得到这本字典:
{"tel:+99999999999": "+9 (999) 999-99-99"}
也就是说,无论在href
之后有多少个“子”标签,我都需要text
链接和相应的href
。在这种情况下,我需要href
链接本身和text
中的span
,但是请考虑它可以是span
或任何其他类型的标签。
我目前正在使用此代码从任何页面获取所有href
+ text
(因为这是目标):
for r in response.css('a'):
url = r.css('::attr(href)').get()
txt = r.css('::text').get()
适用于这种情况:
<a href="tel:+99999999999">This is my phone</a>
但是当它像第一个代码那样递归时,它不会返回:
{"tel:+99999999999": "\n"}
答案 0 :(得分:0)
要在a
标签下获取全文,可以使用getall()
方法,然后将所有文本join
合并为一个字符串。
您可以使用以下示例:
url = r.css('::attr(href)').get()
txt = r.css('::text').getall()
txt = ''.join([t.strip() for t in txt if t.strip()]) if txt else txt
答案 1 :(得分:0)
尝试一下
tel_s = response.css('.link contact-info__link')
yield {tel_s.css('::attr(href)').get(): tel_s.css('span::text)').get()}
输出:
{"tel:+99999999999": "+9 (999) 999-99-99"}