使用 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=&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.
最近我处理了一个不寻常的元素,它不是微不足道的。请你建议如何检索 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=&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.