【问题标题】:Scrapy empty xpath responseScrapy 空 xpath 响应
【发布时间】:2018-10-13 06:40:02
【问题描述】:

我正在尝试从此网址获取图像的网址:https://www.iproperty.com.my/sale/all-residential/

使用 Chrome 扩展 Xpath Helper,我已识别 Xpath 并使用 Scrapy Shell 获得响应:

fetch("https://www.iproperty.com.my/sale/all-residential/")

response.xpath("//div[@class='cFwUMy']/div[@class='fUtkLG']/div[@class='slick-initialized slick-slider']/div[@class='slick-list']/div[@class='slick-track']/div[@class='slick-slide slick-active'][1]/div[@class='img-wrapper']/a/div[@class='cHKlDH']/img[@class='lazyautosizes lazyloaded']/@src")

但是,它不会返回任何东西。

我也试过了:

response.xpath("//div[@class='img-wrapper']/a/div[@class='cHKlDH']")

还是不行。

如何从页面中获取图片的 url?我已经成功地获得了标题、位置和价格,但一直无法获得图像。

编辑1:

好奇怪,我试过了

response.xpath("div[@class='img-wrapper']/a")

它按预期返回链接,但是

response.xpath("div[@class='img-wrapper']/a/div[@class='cHKlDH']")

response.xpath("//div[@class='cHKlDH']")

只是拒绝退货。

【问题讨论】:

    标签: web-scraping scrapy screen-scraping


    【解决方案1】:

    Scrapy 只下载初始页面响应

    它不像我们的普通浏览器那样执行 Javascript。

    技巧是,disable Javascript 在您的浏览器中,然后检查您想要的元素是否存在

    在上面提到的网站中,他们在初始页面响应和之后都有 JSON 格式的图像链接

    在scrapy中,你可以这样做

    re.findall(r"window.__INITIAL_STATE__ =(.*)window.__RENDER_APP_ERROR__", response.body, flags=re.DOTALL)
    

    它会返回这个 JSON 代码,https://jsoneditoronline.org/?id=bbef330441b24957aeaceedcea621ba7

    listings > items键,里面有你需要的所有数据、价格/图片

    这是完整的 Python 代码

    https://repl.it/@UmairAyub/AdmirableHilariousSpellchecker

    【讨论】:

    • 啊,你是对的,禁用 javascript 并且图像无法加载。你能澄清一下代码吗?我应该在外壳中运行它吗?我将如何在我的蜘蛛中实现它?
    • 上述正则表达式将返回 JSON 字符串,然后将其加载到 Python Dict 中,然后获取所需的数据
    • 对不起,我对此一无所知,我将代码复制并粘贴到 scrapy shell 中,但出现错误。
    • 创建scrape项目,然后在回调函数中,做logging.info( the regex I provided),你会明白我在说什么,你似乎对Python很陌生,你必须努力:P
    • 是的,我之前没有使用 Python 的经验。我已收到 JSON 响应,但现在我需要过滤以仅获取图像 URL 并将 URL 与每个列表相关联。我该怎么做?
    猜你喜欢
    • 2018-02-27
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2021-05-01
    • 2021-11-24
    • 1970-01-01
    相关资源
    最近更新 更多