【问题标题】:Scrapy Xpath: Extracting @title from img nodeScrapy Xpath:从 img 节点中提取 @title
【发布时间】:2018-09-09 09:38:46
【问题描述】:

我想从此页面的根据您的投票部分提取@titlehttps://www.fragrantica.com/perfume/Remy-Latour/Cigar-9351.html

我已获取 HTML,然后在 scrapy shell 上尝试了这行代码,但输出为 None

response.xpath('//*[@id="userMainNotes"]/div/img/@title).extract_first()

我做错了什么?

【问题讨论】:

    标签: python scrapy scrapy-shell


    【解决方案1】:

    如果您检查源代码 (Ctrl+U),您会发现:

    <div title="96:241;171:117;33:103;34:103;41:70;128:63;4:59;182:59;170:58;75:56;191:48;21:39;77:39;14:28" id="userMainNotes">Loading...</div>
    

    这意味着上面的&lt;div&gt; 是由Javascript 呈现的,这就是您的代码不起作用的原因。

    【讨论】:

    • 谢谢大佬,有什么有效的爬取javascript重页的方法?
    【解决方案2】:

    这会起作用

    response.xpath('//span[contains(@id, "note")]/img[@rel]/@title')
    

    不要忘记将 USER AGENT 设置为您的 settings.py

    Crawler data form website use Scrapy 1.5.0 - Python

    【讨论】:

    • 谢谢 Yash,您的代码有效。但是,我可以请您澄清一下您的代码行背后的逻辑吗?特别是 img[@rel] 部分代表什么...
    • @AnhQuocVo 欢迎您,我可以告诉您背后的逻辑
    • 您可能已经根据 chrome/firefox 的开发人员检查工具中的 html 节点排列编写了该 xpath。如我错了请纠正我。好吧,这并不总是与您的回复相同。因为浏览器已经编译了它。重新排列您的 python 爱好者级别请求无法执行此操作的节点。
    • 是的,你是对的,我直接从检查工具复制了 xpath。对于其他一些元素,例如产品名称,这是有效的……但不适用于香水味。我已选择您的答案作为该问题的解决方案,但是我的声誉很低,因此我无法投票。
    • 现在,如果您想编写 100% 正确的 xpath,那么您必须保存响应并根据该响应正文编写 xpath。你可以参考这个medium.com/@yashpokar/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    相关资源
    最近更新 更多