使用xpath提取图像

cra骨

我一直在尝试从此网站获取信息https://www.leadhome.co.za/property/poortview-ah/roodepoort/lh-95810/magnificent-masterpiece-in-poortview-,但我在获取全部内容时遇到了问题财产的图像;更具体而言,URL

这是该类的样子:

<div class="lazy-image listing-slider-carousel-item lazy-image-loaded">
   <div class="lazy-image-background" style="background-image: url(&quot;https://s3-eu-west-1.amazonaws.com/leadhome-listing-photos/025c90ab-9c87-47d5-b11c-1cfbce3f67f2-md.jpg&quot;);"></div>
</div>

到目前为止,我有:

        for item in response.xpath('//div[@class="lazy-image-background"]/*[starts-with(@style,"background-image")]/@style').getall():
            yield {"image_link":item}

但不幸的是,这是空的。关于我在做什么的任何提示?谢谢!

乔治

如果您查看此网页的原始html源(Google Chrome浏览器中的CTRL + U,而不是Crhome开发人员工具/元素部分的html代码),
您将看到2件重要的事情:

  1. 标签等中的图像<div class="lazy-image listing-slider-carousel-item lazy-image-loaded">以及其他数据不存在于这些html标签中。
  2. 存储在script标记和window.REDUX_INITIAL_STATEjavascript变量内的所有数据

    原始HTML来源

在这种情况下,我们可以dict使用python的内置json模块将数据从javascript变量转换为基本的python格式
该任务最复杂的部分是正确地使该script标签的内容适合json.loads功能。严格来说,它应该是window.REDUX_INITIAL_STATE =下一个javascript操作之前和之后的文本(在这种情况下,应为最新;符号之前)。结果,我们将获得以下代码:

def parse(self, response):
    script_tag = [script for script in response.css("script::text").extract() if "window.REDUX_INITIAL_STATE = {" in script]
    script_data = json.loads(script_tag[0].split("window.REDUX_INITIAL_STATE = ")[-1][:-1], encoding="utf-8")

如下面的调试器屏幕快照所示,所有数据都已成功转换:以字典列表形式debugger_converted_data存储的图像是实体ID,因此在更新的代码中将单独选择该实体ID,以便能够在其他页面中使用它:script_data['app']['listing']['listing']['entity']['lh-95810']['images']debugger_images lh-95810

def parse(self, response):
    script_tag = [script for script in response.css("script::text").extract() if "window.REDUX_INITIAL_STATE = {" in script]
    script_data = json.loads(script_tag[0].split("window.REDUX_INITIAL_STATE = ")[-1][:-1], encoding="utf-8")
    entity_key = [k for k in script_data['app']['listing']['listing']['entity'].keys()]
    images = [image["medium"] for image in script_data['app']['listing']['listing']['entity'][entity_key[0]]['images']]

该网站使用javascript在网页上呈现数据。但是,任何以javascript形式形成的内容都具有*以原始html代码为根的内容。这种方法仅使用内置json模块,不需要CSS或Xpath选择器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章