【问题标题】:Can't get HTML from GET request无法从 GET 请求中获取 HTML
【发布时间】:2015-08-17 21:28:30
【问题描述】:

我正在尝试获取可能是动态生成的 HTML 代码。我唯一想做的就是获取下一页的 html 代码。如果您单击按钮,当然一切都会完美无缺。但是,如果您检查此页面的 href 并将其复制粘贴到浏览器地址表单中并提交,您会得到如下文本:

{"paging":{"isLastPage":false},"pagination":{"firstUrl":"/sk/komponenty/aktivne-prvky/analogove-obvody/spustacie-obvody/c/cat-L3D_525255/showmore?q=*&filter_Buyable=1&filter_Category4=Sp%C3%BA%C5%A1%C5%A5acie+obvody&filter_Category3=Anal%C3%B3gov%C3%A9+obvody&useTechnicalView=true&pageSize=10&page=1","prevUrl":"/sk/komponenty/aktivne-prvky/analogove-obvody/spustacie-obvody/c/cat-L3D_525255/showmore? 

当您尝试使用其标头执行请求时,也会发生同样的事情。

问题是,当您单击此处的下一页按钮时,我想获取您获得的页面的 HTML 代码:http://www.distrelec.sk/sk/komponenty/aktivne-prvky/analogove-obvody/spustacie-obvody/c/cat-L3D_525255

你知道如何获取 HTML 代码吗?

编辑:我试图找到一个调用下一​​页的 GET 并使用请求模块来模拟点击(带有所有请求标头),但我得到了相同的结果。没有 HTML。

【问题讨论】:

  • 在您包含的 URL 中,下一页按钮链接到 this URL,这似乎是另一个 HTML 页面。无论如何,看起来您可以将 ?pageSize=36&page=N 附加到 URL,但将 N 替换为数字 1、2、3 等,直到没有更多结果为止。这样,您就不必直接弄乱下一页按钮。
  • 我似乎也无法重现您的结果。 href 指的是 /sk/komponenty/aktivne-prvky/analogove-obvody/spustacie-obvody/c/cat-L3D_525255?pageSize=10&page=2。你的代码是什么样的?

标签: javascript python html web-scraping


【解决方案1】:

您获得的 JSON 可能有助于动态生成下一页。如果您只想查看下一页的 html,只需在页面加载后右键单击并在 Google Chrome 中选择“检查元素”。

但如果你想要下一页的 URL,在 JSON 中它会引用 URL。

【讨论】:

    【解决方案2】:

    我无法生成 JSON 结果,但这对我使用 BeautifulSoup 有效。

    import urllib2 
    from bs4 import BeautifulSoup
    
    url = #that url
    html = urllib2.urlopen(url)
    soup = BeautifulSoup(html)
    
    # this gives you the specific next link
    next_link_tags = soup.find_all('a','btn btn-right js-page-link')
    next_link_url = "http://www.distrelec.sk" + next_link_tags[0]['href']
    
    html2 = BeautifulSoup(urllib2.urlopen(next_link_url))
    print html2
    

    【讨论】:

    • 这不起作用。链接的汤不包含这些标签。另一件事是“btn btn-right js-page-link”不是一个类。 BS 无法以这种方式处理多个类。
    【解决方案3】:

    您必须了解第 2 页的 HTML 是如何形成的。 秘诀不仅在于获取“内容 2”的 JSON,还在于正确地将其插入(将其替换为“内容 1”)到主 HTML 中。当然,特定的 JavaScript 负责解码 JSON 和更新/替换内容。 你需要:

    • 找出哪些函数可以将“内容 1”替换为“内容 2”(通过检查 HTML 和 js 脚本)以及它们的作用。
    • 拥有您的原始 HTML
    • 获取 JSON(正如您所做的那样)
    • 用任何python/其他语言方法模拟将原始HTML替换为字符串。为此使用正则表达式。或者,如果您可以使 HTML 成为 DOM 结构,请使用 XPath。

    你肯定有很多工作。成为 JS 方面的专家。 :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      相关资源
      最近更新 更多