【问题标题】:Turning find_all() results into text so it can be usable in a pandas dataframe将 find_all() 结果转换为文本,以便可以在 pandas 数据框中使用
【发布时间】:2021-08-02 21:37:08
【问题描述】:

我需要在另一个重复的 div 类中抓取 div 类中的内容,因此我需要使用 find_all 来获取它们。我希望能够以文本形式获取它们,因此当我将它们放入数据框中时,它会显示内部对象的名称,就像您执行 find(...).text 而不是整个 html 行时一样

import requests
from bs4 import BeautifulSoup
import pandas as pd


url = 'https://www.grammy.com/grammys/awards/winners-nominees/138'
page = requests.get(url).text
soup = BeautifulSoup(page,'lxml')
category = soup.find_all('div', class_ = "view-grouping-content")
print(len(category))
for c in category:
    artistName = c.find_all('div', class_ = "views-field views-field-field-description")

【问题讨论】:

  • 请给出数据框前一到三行的所需输出。

标签: python pandas beautifulsoup


【解决方案1】:
import requests
from bs4 import BeautifulSoup


def main(url):
    r = requests.get(url)
    soup = BeautifulSoup(r.text, 'lxml')
    goal = [x.text for x in soup.select(
        '.freelink.freelink-nid.freelink-internal')]
    print(goal)


main('https://www.grammy.com/grammys/awards/winners-nominees/138')

【讨论】:

    【解决方案2】:

    另一个攻击角度(如果这可能来自另一个站点)...

    import pandas as pd
    import requests
    
    url = r'https://en.wikipedia.org/wiki/Grammy_Award_for_Record_of_the_Year'
    
    page = requests.get(url)
    tables = pd.read_html(page.text)
    df = pd.concat(tables[1:9])
    df.dropna(thresh=3, inplace=True)
    df = df.rename(columns={'Year[I]':'Year'})
    df['Year'] = df['Year'].str.replace('\[\d+\]', '', regex=True)
    df['Record'] = df['Record'].str.replace('"', '', regex=False)
    print(df)
    

    输出:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-22
      • 1970-01-01
      • 2018-08-17
      • 2018-01-21
      • 2011-09-21
      • 1970-01-01
      • 2019-10-30
      • 2016-11-24
      相关资源
      最近更新 更多