使用Python搜索/过滤/选择/操纵网站上的数据

时间:2017-07-03 04:32:53

标签: python api url web-scraping beautifulsoup

我正在开展一个项目,基本上要求我去网站,选择搜索模式(姓名,年份,数字等),搜索名称,在结果中选择具有特定类型的项目(换句话说,过滤,选择保存这些结果的选项,而不是通过电子邮件发送,选择一种格式保存,然后单击保存按钮下载它们。

我的问题是,有没有办法使用Python程序执行这些步骤?我只知道提取数据和下载页面/图像,但我想知道是否有办法编写一个操作数据的脚本,并做一个人手动做的事情,只有大量的迭代。

我已经考虑过查看网址结构,并找到一种方法为每次迭代生成准确的网址,但即使这样有效,我仍然因为"保存和#34;按钮,因为我无法找到自动下载我想要的数据的链接,并且使用urllib2库的功能将下载页面而不是我想要的实际文件。

有关如何处理此事的任何想法?任何参考/教程都非常有用,谢谢!

编辑:当我检查保存按钮时,我得到的是: Search Button

2 个答案:

答案 0 :(得分:0)

这很大程度上取决于您定位的网站以及搜索的实施方式。

对于某些网站,例如Reddit,他们有一个开放的API,您可以在其中添加.json扩展名到URL并获得JSON字符串响应而不是纯HTML。

对于使用REST API或任何JSON响应,您可以使用json模块将其作为Python字典加载

import json


json_response = '{"customers":[{"name":"carlos", "age":4}, {"name":"jim", "age":5}]}'
rdict = json.loads(json_response)

def print_names(data):
  for entry in data["customers"]:
    print(entry["name"])

print_names(rdict)

答案 1 :(得分:0)

您应该查看开发人员的国会图书馆文档。如果他们有API,您将能够了解如何搜索和过滤他们的API。这比通过像Selenium之类的东西操纵浏览器更容易。如果有API,那么您可以轻松地向上或向下扩展您的解决方案。

如果没有API,那么你有

  1. 在浏览器中使用Selenium(我更喜欢Firefox)

  2. 尝试通过了解他们的搜索引擎如何使用GET和POST请求来获取尽可能多的信息生成,过滤等,而无需实际按下该页面上的任何按钮。例如,如果您要查找范围内的图书,请手动执行此搜索并查看网址的更改方式。如果您很幸运,您会看到您的搜索条件位于网址中。使用此信息,您实际上可以通过访问该URL进行搜索,这意味着您的程序将不必填写表单和按钮,下拉菜单等。

  3. 如果你必须通过Selenium使用浏览器(例如,如果你想用html,css,js文件保存整个页面,那么你必须按ctrl + s然后点击“保存”按钮),然后你需要找到允许你在Python中操作键盘的库。 Ubuntu有这样的库。这些库允许您按下键盘上的任何键,甚至可以进行组合键。

  4. 可能的例子:

    我编写了一个脚本,将我登录到一个网站,然后导航到某个页面,下载该页面上的特定链接,访问每个链接,保存每个页面,避免保存重复页面,并避免被抓住(即它没有例如,每分钟访问100页,就像机器人一样。

    整个过程需要3-4个小时来编码,它实际上在我在Mac上运行的虚拟Ubuntu机器上工作,这意味着在完成所有工作的时候我可以使用我的机器。如果你不使用虚拟机,那么你要么必须让脚本继续运行而不是干扰它,要么制作一个更健壮的程序,IMO不值得编码,因为你可以使用虚拟机。