如何从不使用POST的网站上抓取信息

时间:2018-09-02 13:11:58

标签: python web-scraping scrapy html-select

我需要从使用HTML select过滤其内容的网站上获取一些信息。但是,我这样做很麻烦,因为在从select更改值时,网站不会“重新加载”,而是使用一些内部功能来获取新内容。

有问题的网页为this,如果我使用Chrome开发人员工具来查看更改select值时会发生什么。我接到这样的电话。

  

index.php?eID = dmmjobcontrol&type = discipline&uid = 77&_ = 1535893178522

有趣的是,uid是select选项的ID,因此我们得到了正确的ID。但是,当我转到此链接时,我只会看到一个页面,上面写着null

考虑到类似的网站this one。当我在此处更改选择表单时,将获得一个表单数据,可用于获取所需的信息。

我对抓取还很陌生,说实话,我不知道如何获得这些信息。如果用于某些用途,我正在使用python中的scrapy来解析来自网站的信息。

1 个答案:

答案 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/

请注意,在许多文章中,人们都会做类似的事情来进行测试,因此甚至没有提到“抓取”一词。但从技术上讲,它是相同的-模拟用户在浏览器中单击并最终从特定页面元素获取数据。