【问题标题】:dryscrape and BeautifulSoup to get all rows in a js rendered iframedryscrape 和 BeautifulSoup 获取 js 渲染 iframe 中的所有行
【发布时间】:2017-02-18 19:39:00
【问题描述】:

我正在尝试在http://apps2.eere.energy.gov/wind/windexchange/economics_tools.asp 上刮桌子

enter image description here

该表默认显示 5 个条目。我使用dryscrape和BeautifulSoup如下:

import dryscrape
from bs4 import BeautifulSoup
myurl = 'http://apps2.eere.energy.gov/wind/windexchange/economics_tools.asp'
session = dryscrape.Session()
session.visit(myurl)
response = session.body()
soup = BeautifulSoup(response,'lxml')
table = soup.find_all("td")

但这只会返回该表的默认 5 个条目。如何获取此表中的所有行?

非常感谢!

【问题讨论】:

    标签: javascript python iframe beautifulsoup dryscrape


    【解决方案1】:

    此特定页面不需要干刮。因为您尝试获取的整个表格都在源代码 html 中,所以您可以这样做:

    from bs4 import BeautifulSoup
    import requests
    
    myurl = 'http://apps2.eere.energy.gov/wind/windexchange/economics_tools.asp'
    soup = BeautifulSoup(requests.get(myurl).text,'lxml')
    table = soup.find_all("td")
    

    或者,使用您当前的设置:

    table = session.xpath('//td')
    

    将在 dryscrape 会话中为您提供 td 标记的节点。在这种情况下,你不需要漂亮的汤。

    session.body() 为您提供当前加载到 dom 中的 html。由于 java 脚本正在对此进行操作并更改 dom 中的内容。 因此,您可以执行一个 for 循环,在该循环中单击会话中的每个下一步按钮,并在每次迭代后将身体喂入美丽的汤中,但这对我来说似乎没有必要。

    useful reference

    【讨论】:

      猜你喜欢
      • 2017-06-11
      • 2015-09-12
      • 2017-04-22
      • 1970-01-01
      • 2020-11-12
      • 2013-06-26
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多