【发布时间】: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 时。
最有趣的部分是:当我从第二类中删除锚链接时:
我再次在 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,它按预期工作!再次感谢。