gpt4 book ai didi

python - 使用 xpath 提取图像

转载 作者:行者123 更新时间:2023-12-04 10:27:09 25 4
gpt4 key购买 nike

我一直试图从这个网站获取信息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源这个网页(谷歌Chrome浏览器上的CTRL + U,!!!不是来自Crhome开发者工具/元素部分的html代码)你会看到2个重要的事情:

  • 标签中的图片,如 <div class="lazy-image listing-slider-carousel-item lazy-image-loaded">以及这些 html 标记中不存在其他数据。
  • script 中存储的所有数据标签和内部 window.REDUX_INITIAL_STATE javascript变量:
    original html source

  • 在这种情况下,我们可以将数据从 javascript 变量转换为基本的 python dict使用python内置的 json格式化模块。此任务中最复杂的部分是正确匹配 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
    图像存储在 script_data['app']['listing']['listing']['entity']['lh-95810']['images']作为字典列表:
    debugger_images lh-95810是实体 ID,因此在更新的代码中,将单独选择此实体 ID,以便能够在其他页面中使用它:
    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 代码中的 *roots。
    此方法仅使用内置 json模块并且不需要 css 或 Xpath 选择器。

    关于python - 使用 xpath 提取图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60588421/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com