【问题标题】:Parsing from a website -- source code does not contain the info I need从网站解析——源代码不包含我需要的信息
【发布时间】:2012-06-03 06:36:14
【问题描述】:
我对网络爬虫等有点陌生,尽管我已经编程一年了。所以请耐心等待我在这里解释我的问题。
我正在解析来自 Yahoo! 的信息新闻,我已经设法得到了我想要的大部分内容,但有一小部分让我感到难过。
例如:http://news.yahoo.com/record-nm-blaze-test-forest-management-225730172.html
我想获得 cmets 中竖起大拇指和不喜欢的图标旁边的数字。当我在 Chrome 浏览器中使用“检查元素”时,我可以清楚地看到我必须寻找的东西 - 即 div 类“ugccmt-rate”下的 em 标签。但是,我无法在我的 python 程序中找到它。在试图追查问题的根源时,我点击查看页面的源代码,似乎没有这个标签。你们知道我应该如何解决这个问题吗?这是否与页面上仅在运行后才显示信息的 javascript 有关?我很感激一些正确方向的指示。
谢谢。
【问题讨论】:
标签:
python
html
parsing
web-crawler
【解决方案1】:
页面正在通过 JavaScript 生成。
先检查网站是否有手机版。如果没有,请检查任何 API 或 RSS/Atom 提要。如果没有其他内容,您要么必须手动确定 JavaScript 正在加载什么以及从何处加载,要么使用 Selenium 来自动化浏览器,该浏览器会为您呈现 JavaScript 以供解析。
【解决方案2】:
使用 Firefox 中的 Web 控制台,您可以很容易地查看页面在运行脚本时实际发出的请求,并找出返回所需数据的 URI。然后,您可以直接在 Python 脚本中请求该 URI 并从中提取数据。它可能是 Python 已经有一个库可以解析的格式,例如 JSON。
雅虎!他们的服务器端可能有一些东西试图阻止您在脚本中访问这些数据文件,例如检查浏览器(用户代理标头)、cookie 或引荐来源网址。这些都可以用足够的毅力来伪造,但你应该把它们的存在当作你应该小心行事的标志。 (它们还可能会限制您在给定时间段内可以提出的请求数量,这是不可能的。)