我需要从使用HTML select过滤其内容的网站上获取一些信息。但是,我这样做很麻烦,因为在从select更改值时,网站不会“重新加载”,而是使用一些内部功能来获取新内容。
有问题的网页为this,如果我使用Chrome开发人员工具来查看更改select值时会发生什么。我接到这样的电话。
有趣的是,uid是select选项的ID,因此我们得到了正确的ID。但是,当我转到此链接时,我只会看到一个页面,上面写着index.php?eID = dmmjobcontrol&type = discipline&uid = 77&_ = 1535893178522
null
。
考虑到类似的网站this one。当我在此处更改选择表单时,将获得一个表单数据,可用于获取所需的信息。
我对抓取还很陌生,说实话,我不知道如何获得这些信息。如果用于某些用途,我正在使用python中的scrapy来解析来自网站的信息。
答案 0 :(得分:1)
一种解决方案是使用客户端层,该层同时执行:抓取“脚本”和网站发送的所有javascript,以模拟真实的浏览器。我成功地将PhantomJS与Selenium aka Webdriver API结合使用: https://selenium-python.readthedocs.io/getting-started.html
请注意,历史上Selenium是第一个这样做的产品,因此此API的名称。我认为PhantomJS更适合,默认情况下是无头的(不运行任何GUI进程)并且速度更快。 Selenium和PhantomJS都实现了一个称为Webdriver的协议,您的Python程序将使用该协议。
这听起来可能很复杂,但是请只使用上面引用的“入门”文档,然后检查它是否适合您。
编辑: 本文还包含使用所述设置的简单示例: https://realpython.com/headless-selenium-testing-with-python-and-phantomjs/
请注意,在许多文章中,人们都会做类似的事情来进行测试,因此甚至没有提到“抓取”一词。但从技术上讲,它是相同的-模拟用户在浏览器中单击并最终从特定页面元素获取数据。