既然你看起来像是先问后问的类型(这是一件很好的事情),我不会给你答案,而是一个(非常详细)如何找到答案的指南。在
问题是,除非你是雅虎的开发人员,否则你可能无法访问你试图获取的源代码。也就是说,您不确切地知道站点是如何构建的,以及您作为用户对它的请求在服务器端是如何处理的。但是,您可以调查客户端并尝试模拟它。我喜欢使用Chrome开发工具来实现这一点,但是你可以使用其他工具,比如FF firebug。在
所以首先我们需要弄清楚到底发生了什么。所以它的工作方式是,你点击“showcomments”它会加载前十条,然后你每次都需要继续点击下十条评论。但是,请注意,所有这些点击并没有将您带到另一个链接,而是lively获取注释,这是一个非常整洁的UI,但是对于我们的案例,需要更多的工作。我可以马上告诉你两件事:他们使用javascript加载评论(因为我在同一页面上)。在
每次单击时,它们都会用AJAX调用动态地加载它们(这意味着,不是用页面加载注释,而是向您显示,每次单击都会向数据库发出另一个请求)。在
现在让我们右键单击并检查该按钮上的元素。它实际上只是一个简单的文本跨度:View Comments (2077)
通过观察,我们仍然不知道它是如何生成的,也不知道它是如何被点击的。好的。现在,让devtools窗口保持打开状态,让我们单击它。这打开了前十个。但事实上,有人要求我们去拿他们。chrome开发工具记录的请求。我们在devtools的network选项卡中看到了很多令人困惑的数据。等等,这里有一个很有道理的:
^{2}$
看到了吗?_xhr然后获取注释。这很有道理。转到浏览器中的那个链接给了我一个JSON对象(看起来像python字典),其中包含该请求获取的所有10条注释。现在这是您需要模拟的请求,因为这是您想要的。首先,让我们把它翻译成人类可以阅读的一些正常需求:go to this url: http://news.yahoo.com/_xhr/contentcomments/get_comments/
include these parameters: {'_device': 'full',
'_media.modules.content_comments.switches._enable_mutecommenter': '1',
'_media.modules.content_comments.switches._enable_view_others': '1',
'content_id': '42f7f6e0-7bae-33d3-aa1d-3dfc7fb5cdfc',
'count': '10',
'enable_collapsed_comment': '1',
'isNext': 'true',
'offset': '20',
'pageNumber': '2',
'sortBy': 'highestRated'}
现在只是一个反复试验的问题。不过,这里有几点需要注意:很明显,计数决定了你得到多少评论。我试着把它改成100,看看会发生什么,但收到了一个错误的请求。很好地告诉了我为什么-“偏移量应该是总行数的倍数”。现在我们了解如何使用偏移量
content_id可能是用来识别您正在阅读的文章的内容。这意味着你需要从原始页面中取出来。试着挖一点,你会找到的。
另外,您显然不希望一次获取10条评论,因此,最好设法以某种方式获取总评论数(要么了解页面是如何获取的,要么只是从文章中获取评论)
使用devtools,您可以访问所有客户端脚本。因此,通过挖掘,您可以发现指向/get_comments/的链接保存在一个名为YUI的javascript对象中。然后,您可以尝试理解它是如何发出请求的,并尝试模仿它(尽管您可能可以自己解决)
您可能需要克服一些安全措施。例如,您可能需要原始文章中的会话密钥才能访问评论。这是用来防止直接访问网站的某些部分。我不会麻烦你的细节,因为这似乎不是一个问题,但你确实需要知道它,以防它出现。
最后,您必须解析JSON对象(python有很好的内置工具),然后解析html注释您正在获取(您可能想查看BeautifulSoup)。
正如你所见,这需要一些工作,但尽管我写了这么多,这也不是一个非常复杂的任务。在
所以不要惊慌。在
这只是一个挖掘和挖掘的问题,直到你找到黄金(而且,拥有一些基本的网络知识并不伤害)。然后,如果你遇到了路障,真的不能再往前走了,那就回到这里来,再问一次。有人会帮你的。在
祝你好运!在