【问题标题】:Parsing a table on webpage using BeautifulSoup使用 BeautifulSoup 解析网页上的表格
【发布时间】:2020-02-25 09:31:18
【问题描述】:

尝试从网站SGX获取一张桌子。

页面保存到本地驱动器,我正在使用 BeautifulSoup 来解析它:

soup = BeautifulSoup(open(pages), "lxml")
soup.prettify()

list_0 = soup.find_all('table')[0]
print list_0

它返回的,不是页面的第一行:

[<tr><td>Zhongmin Baihui</td><td>5SR</td><td class="nowrap">09:44 AM</td><td class="nowrap">09:49 AM</td><td>0.615</td><td>0.675</td><td>0.555</td></tr>]

检索此表的正确方法是什么?

谢谢。

【问题讨论】:

  • 如果你的表中有一些类或 id,你可以按类或 id 过滤soup.findAll('table', {'class': 'some_class', 'id': 'some_id'})
  • 我发现表格不在表格标签中,而是在 div soup.findAll('div', {'class': 'table-container'})[0] 中,这将为您提供您想要的表格

标签: python parsing web-scraping beautifulsoup


【解决方案1】:

页面加载后使用 AJAX 请求获取数据,通过检查页面您可以找到 API URL(下面的 Url),然后您可以使用类似的东西:

import pandas as pd
import requests
import json

response = requests.get('https://api.sgx.com/securities/v1.1?excludetypes=bonds&params=nc%2Cadjusted-vwap%2Cb%2Cbv%2Cp%2Cc%2Cchange_vs_pc%2Cchange_vs_pc_percentage%2Ccx%2Ccn%2Cdp%2Cdpc%2Cdu%2Ced%2Cfn%2Ch%2Ciiv%2Ciopv%2Clt%2Cl%2Co%2Cp_%2Cpv%2Cptd%2Cs%2Csv%2Ctrading_time%2Cv_%2Cv%2Cvl%2Cvwap%2Cvwap-currency')
data = json.loads(response.content)["data"]["prices"]
df = pd.DataFrame(data)
print(df)

如果您的要求很复杂并且您的爬网定期完成,我建议您使用 scrapy。

【讨论】:

    猜你喜欢
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 2011-05-10
    相关资源
    最近更新 更多