【问题标题】:Scrapy XPath Incorrectly when there is Unicode in the page当页面中有 Unicode 时,Scrapy XPath 不正确
【发布时间】:2016-10-15 18:42:11
【问题描述】:

我想获取所有具有类别类的 div。

看看这个页面:www.postkhmer.com/ព័ត៌មានជាតិ

在scrapy shell中:scrapy shell 'www.postkhmer.com/ព័ត៌មានជាតិ'

如你所见,我只得到了 2 个元素。

scrapy fetch --nolog http://www.postkhmer.com/ព័ត៌មានជាតិ > page.html scrapy shell ./page.html response.xpath('//div[@class="category"]') 仍然只有2个元素回来。但是当我在 Sublime 中打开 page.html 时。

我有 15 场比赛:

最有趣的部分是:当我从第二类中删除锚链接时:

我再次在 scrapy shell 中运行response.xpath('//div[@class="category"]'),我得到了 3 个元素:

我到底是什么鬼!?有人可以帮我解决这个问题吗?

我已将文件上传到here,以防您想在本地进行测试。

【问题讨论】:

  • 这是一个随机猜测。我从来没有使用过scrapy和python。也许当您请求元素时没有加载它们?您可以等待一些时间来加载页面或所有类别吗?您的代码是否可能仅加载屏幕上可见的元素?
  • 得到这个文件filedropper.com/scrapypage然后scrapy shell 得到xpath,你就知道是python和scrapy的问题了。
  • 如果您确定这是一个 py 和 scrapy 问题,请提交错误报告。
  • 这里只能发生两件事。要么 html 格式错误,scrapy 无法解析它,要么scrapy 和编码存在一些问题。我觉得第一种可能性更大。 (这个)[freeformatter.com/html-validator.html] 有点放弃它。由于它适用于 Chrome,我建议使用 selenium 使浏览器修复代码并从那里删除元素。我没有测试,但也许scrapy-splash 可以有同样的效果。
  • @RafaelAlmeida:我确实尝试过 selenium,它按预期工作!再次感谢。

标签: python xpath scrapy


【解决方案1】:

这里只能发生两件事。要么 html 格式错误,scrapy 无法解析它,要么scrapy 和编码存在一些问题。我觉得第一种可能性更大。 http://www.freeformatter.com/html-validator.html 有点放弃它。

由于它适用于 Chrome,我建议使用 selenium 使浏览器修复代码并从那里废弃元素。我没有测试,但也许scrapy-splash 可以有同样的效果。

【讨论】:

    【解决方案2】:

    当您将页面保存到本地文件page.html 时,您会跳过包含编码信息的 http 标头。 后来,当你打开这个文件时,无论是用 scrapy 还是 sublime,他们都不知道文件的原始编码是什么。

    建议:从不使用保存到文件中进行解析的文档。

    【讨论】:

    • 你能证明吗?
    猜你喜欢
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多