【问题标题】:How to scrape a webpage that changes content from <select> tag如何从 <select> 标记中抓取更改内容的网页
【发布时间】:2012-09-10 09:57:19
【问题描述】:

我想抓取一个通过&lt;select> 标签更改其内容的网页。当我选择不同的选项时,页面的内容会动态变化。我想知道是否有一种方法可以从 python 脚本更改选项,以便我可以从&lt;select&gt; 标记中所有不同选项的所有不同页面获取内容。

【问题讨论】:

  • 仅与select 元素交互不会更改文档。必须涉及一些Javascript。找出会发生什么并将结果添加到您的问题中。
  • 你用的是什么浏览器?我知道谷歌浏览器至少可以更改它正在查看的 html。有了它,您可以进入那里并更改

标签: python web-scraping


【解决方案1】:

我假设您使用像 urllib 这样的库来进行抓取。您已经知道网站的内容会动态变化。我还假设动态内容使用服务器端交互。这意味着,使用 javascript (ajax) 浏览器根据选择的值从服务器请求新数据)。

如果是这样,那么您可以尝试在您的网络抓取库中模拟对服务器的 ajax 调用。

  1. 首先,使用浏览器调试工具找出正在调用的服务器的 url。
  2. 在ajax调用中拆分参数部分
  3. 执行相同的调用以查找 select 标记中的选项。

【讨论】:

    【解决方案2】:

    As @Tichodroma said, when the select is changed, either:

    1. 以前隐藏在页面上的某些内容变得可见,或者:
    2. 进行 ajax 调用以检索一些附加内容并将其添加到 DOM 中

    在这两种情况下,都涉及到 JavaScript。看看它,根据发生的情况(案例 #1 或 #2),您应该:

    1. 抓取整个页面,因为您想要的所有内容都已经在其中,或者:
    2. 对通常使用 ajax 调用的文件进行多次调用,以检索 &lt;select&gt; 的每个值所需的内容

    【讨论】:

    • 标签有一个 onchange 事件="this.submit.form()",但我找不到 js 页面,所以我可以找出这个函数的作用。有什么想法吗?
    • 要查找第一个场景,只需在查看页面源时按 ctrl+f 并搜索&lt;select&gt; 选项时出现的内容。如果您没有找到任何方法,请按照@hans-then 的建议进行操作:启动控制台(Chrome 上的 ctrl+shift+i),切换到网络选项卡,然后更改 &lt;select&gt; 值。如果进行了 ajax 调用,您会看到新的一行出现了请求 uri、使用的方法、它的参数...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 2013-05-01
    相关资源
    最近更新 更多