无法使用 BeautifulSoup4 抓取正确的 wikitable(初学者)

这里是一个完整的初学者......我正在尝试从这个维基百科页面中抓取成分表,但是刮掉的表格是年度回报(第一个表)而不是我需要的成分表(第二个表)。有人可以帮忙看看我是否可以使用 BeautifulSoup4 来定位我想要的特定表?


import bs4 as bs

import pickle

import requests


def save_klci_tickers():

    resp = requests.get ('https://en.wikipedia.org/wiki/FTSE_Bursa_Malaysia_KLCI')

    soup = bs.BeautifulSoup(resp.text)

    table = soup.find ('table', {'class': 'wikitable sortable'})

    tickers = []

    for row in table.findAll ('tr') [1:]:

        ticker = row.findAll ('td') [0].text

        tickers.append(ticker)


    with open ("klcitickers.pickle", "wb") as f:

        pickle.dump (tickers, f)


    print (tickers)

    return tickers



save_klci_tickers()


POPMUISE
浏览 101回答 1
1回答

慕盖茨4494581

试试 pandas 库,眨眼之间就可以从 csv 文件中的该页面获取表格数据:import pandas as pdurl = 'https://en.wikipedia.org/wiki/FTSE_Bursa_Malaysia_KLCI'df = pd.read_html(url, attrs={"class": "wikitable"})[1] #change the index to get the table you need from that pagenew = pd.DataFrame(df, columns=["Constituent Name", "Stock Code", "Sector"])new.to_csv("wiki_data.csv", index=False)print(df)如果您仍然想坚持使用 BeautifulSoup,则以下内容应该可以达到目的:import requestsfrom bs4 import BeautifulSoupres = requests.get("https://en.wikipedia.org/wiki/FTSE_Bursa_Malaysia_KLCI")soup = BeautifulSoup(res.text,"lxml")for items in soup.select("table.wikitable")[1].select("tr"):    data = [item.get_text(strip=True) for item in items.select("th,td")]    print(data)如果您想使用.find_all()而不是.select(),请尝试以下操作:for items in soup.find_all("table",class_="wikitable")[1].find_all("tr"):    data = [item.get_text(strip=True) for item in items.find_all(["th","td"])]    print(data)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python