【问题标题】:Search/Filter/Select/Manipulate data from a website using Python使用 Python 从网站搜索/过滤/选择/操作数据
【发布时间】:2017-12-06 06:24:54
【问题描述】:

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

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

我考虑过查看 URL 结构,并找到一种方法为每次迭代生成准确的 URL,但即使这样可行,我仍然会因为“保存”按钮而卡住,因为我可以'找不到会自动下载我想要的数据的链接,并且使用 urllib2 库的功能会下载页面而不是我想要的实际文件。

关于如何解决这个问题的任何想法?任何参考/教程都会非常有帮助,谢谢!

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

【问题讨论】:

  • 他们提供 API 吗?如果是,请使用它。如果没有,那么您的网络报废方法似乎很好。我建议使用 Python 的 requests 模块。
  • 使用 Python requests 和 Beautiful Soup crummy.com/software/BeautifulSoup
  • 我推荐 selenium webdriver
  • 如果保存按钮是表单的一部分,那么您必须发送带有相应参数的 GET/POST 请求
  • @code_byter 这是国会图书馆,所以如果我没记错的话,他们应该提供一个 API。问题是,我没有太多使用 API 和请求的经验,特别是如果我要做的不仅仅是检索数据。我需要脚本根据类型选择内容以进行过滤,通过单击“保存”按钮而不是“取消”按钮来选择操作。 API、请求、Beautiful Soup 或 Selenium 是否允许我以这种方式操作和在网站上工作,或者它们是否受到限制?

标签: python api url web-scraping beautifulsoup


【解决方案1】:

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

对于某些网站,例如 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)

【讨论】:

    【解决方案2】:

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

    如果没有 API,那么你有

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

    2. 通过了解他们的搜索引擎如何处理 GET 和 POST 请求,尝试获取尽可能多的生成、过滤等信息,而无需实际按下该页面上的任何按钮。例如,如果您要查找某个范围内的书籍,则手动执行此搜索并查看 URL 的变化情况。如果幸运的话,您会看到您的搜索条件在 URL 中。使用此信息,您实际上可以通过访问该 URL 进行搜索,这意味着您的程序不必填写表格和按钮、下拉菜单等。

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

    一个可能的例子:

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

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

    【讨论】:

      猜你喜欢
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-09
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-02
      相关资源
      最近更新 更多