使用 xpath 或 css 提取特定的 HREF

Extract specific HREF with xpath or css

最近我处理了一个不寻常的元素,它不是微不足道的。请你建议如何检索 href。

我正在使用 python scrapy 抓取 Tripadvisor 的一些餐厅,需要从位置和联系人部分检索 Google 地图的 link(href 属性)。你能建议怎么做吗 网页例如 (link)

元素代码:

<a data-encoded-url="S0k3X2h0dHBzOi8vbWFwcy5nb29nbGUuY29tL21hcHM/c2FkZHI9JmRhZGRyPVNjYWJlbGxzdHIuKzEwLTExJTJDKzE0MTA5K0JlcmxpbitHZXJtYW55QDUyLjQyODgxOCwxMy4xODI0MjFfeVBw" class="_2wKz--mA _27M8V6YV" target="_blank" href="**https://maps.google.com/maps?saddr=&amp;daddr=Scabellstr.+10-11%2C+14109+Berlin+Germany@52.428818,13.182421**"><span class="_2saB_OSe">Scabellstr. 10-11, 14109 Berlin Germany</span><span class="ui_icon external-link-no-box _2OpUzCuO"></span></a>

我尝试了以下 XPATH,但每次都得到 None 作为响应,或者无法获取 href 属性上的数据,就好像它不存在一样。

response.xpath("//a[contains(@class, '_2wKz--mA _27M8V6YV')]").getall()

输出:

['<a data-encoded-url="Z3pLX2h0dHBzOi8vbWFwcy5nb29nbGUuY29tL21hcHM/c2FkZHI9JmRhZGRyPVNjYWJlbGxzdHIuKzEwLTExJTJDKzE0MTA5K0JlcmxpbitHZXJtYW55QDUyLjQyODgxOCwxMy4xODI0MjFfMk1z" class="_2wKz--mA _27M8V6YV" target="_blank"><span class="_2saB_OSe">Scabellstr. 10-11, 14109 Berlin Germany</span><span class="ui_icon external-link-no-box _2OpUzCuO"></span></a>',

'Website']

您尝试使用特定的 XPath 查询来获取 href,例如 "//a[contains(@class, 'foobar')]/@href" 以检索元素的特定属性。

使用您已经得到的data-encoded-url并使用Base64对其进行解码。示例:

>>> import base64
>>> base64.b64decode("Z3pLX2h0dHBzOi8vbWFwcy5nb29nbGUuY29tL21hcHM/c2FkZHI9JmRhZGRyPVNjYWJlbGxzdHIuKzEwLTExJTJDKzE0MTA5K0JlcmxpbitHZXJtYW55QDUyLjQyODgxOCwxMy4xODI0MjFfMk1z").decode("utf-8")
'gzK_https://maps.google.com/maps?saddr=&daddr=Scabellstr.+10-11%2C+14109+Berlin+Germany@52.428818,13.182421_2Ms'

然后您可以删除 gzK_ 前缀和 _2Ms 后缀,您将拥有 URL.