gpt4 book ai didi

python - 部分 HTML 对 Scrapy 不可见

转载 作者:行者123 更新时间:2023-11-28 22:13:41 24 4
gpt4 key购买 nike

设置

我正在使用 scrapy 来抓取住房广告。

对于每个广告,我都试图获取有关制作年份的信息。

大多数广告中都会说明此信息。


问题

当我在浏览器中检查广告及其在开发者模式下的 HTML 代码时,我可以在“关于”部分中看到 build 年份以及相关的其他信息。

但是,当我使用 Scrapy 时,我返回一个空列表。我可以抓取广告页面的其他部分(价格、房间等),但不能抓取“关于”部分。

检查this example ad .

如果我使用 response.css('#caracteristique_bien').extract_first(),我得到,

<div id="caracteristique_bien"></div>

这就是我所能做到的。任何更深的回归都会带来空虚。

如何获得 build 年份?

最佳答案

正如我提到的,这是使用 javascript 渲染的,这意味着 html 的某些部分将由浏览器动态加载(Scrapy不是浏览器)。

这种情况的好处是 JavaScript 位于实际请求中,这意味着您仍然可以解析该信息,但方式不同。

例如要获取描述,您可以在里面找到它:

import re
import demjson

script_info = response.xpath('//script[contains(., "Object.defineProperty")]/text()').extract_first()

# getting description
description_json = re.search("descriptionBien', (\{.+?\});", script_info, re.DOTALL)
real_description = demjson.decode(description_json)['value']

# getting surface area
surface_json = re.search("surfaceT', (\{.+?\})\);", script_info, re.DOTALL).group(1)
real_surface = demjson.decode(surface_json)['value']

...

正如您所看到的 script_info 包含所有信息,您只需要想出一种方法来解析它即可获得您想要的内容

但是有些信息不在同一响应中。要获取它,您需要执行 GET 请求:

https://www.seloger.com/detail,json,caracteristique_bien.json?idannonce=139747359

如您所见,它只需要 idannonce,您可以通过以下方式从之前的响应中获取它:

demjson.decode(re.search("idAnnonce', (\{.+?\})\);", script_info, re.DOTALL).group(1))['value']

稍后通过第二个请求,您可以通过以下方式获取例如“施工年份”:

import json

...

[y for y in [x for x in json.loads(response.body)['categories'] if x['name'] == 'Général'][0]['criteria'] if 'construction' in y['value']][0]['value']

关于python - 部分 HTML 对 Scrapy 不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53780385/

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