【问题标题】:Printing Text Scraped Using BeautifulSoup to Pandas Dataframe without Tags将使用 BeautifulSoup 抓取的文本打印到不带标签的 Pandas 数据框
【发布时间】:2021-05-21 08:27:29
【问题描述】:

我一直在编写下面的代码,让自己陷入困境。我想做的是使用 BeautifulSoup 抓取的文本构建一个简单的数据框。

我已经从 <h5><p> 标签中抓取了适用的文本,但使用 find_all 意味着当我构建数据框并写入 csv 时,标签被包含在内。为了解决这个问题,我添加了 print(p.text, end=" ") 语句,但现在没有任何内容写入 csv。

谁能看出我做错了什么?

import pandas as pd
import requests
from bs4 import BeautifulSoup

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
}

course = []
runner = []

page = requests.get('https://www.attheraces.com/tips/atr-tipsters/hugh-taylor', headers=headers)
soup = BeautifulSoup(page.content, 'html.parser')
tips = soup.find('div', class_='sticky')
for h5 in tips.find_all("h5"):
    course_name = print(h5.text, end=" ")
    course.append(course_name)

for p in tips.find_all("p"):
    runner_name = print(p.text, end=" ")
    runner.append(runner_name)

todays_tips = pd.DataFrame(
    {'Course': course,
     'Selection': runner,
     })

print(todays_tips)

todays_tips.to_csv(r'C:\Users\*****\Today.csv')

【问题讨论】:

  • edit你的问题显示你想要的输出。为什么不能只使用course.append(h5.text)runner.append(p.text)

标签: python pandas beautifulsoup


【解决方案1】:

不要使用print 的赋值,并考虑使用list comprehension。应用它应该可以得到你想要的数据框。

例如:

import pandas as pd
import requests
from bs4 import BeautifulSoup

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
}

page = requests.get('https://www.attheraces.com/tips/atr-tipsters/hugh-taylor', headers=headers)
tips = BeautifulSoup(page.content, 'html.parser').find('div', class_='sticky')

course = [h5.getText() for h5 in tips.find_all("h5")]
runner = [p.getText() for p in tips.find_all("p")]

todays_tips = pd.DataFrame({'Course': course, 'Selection': runner})
print(todays_tips)
todays_tips.to_csv("your_data.csv", index=False)

输出:

          Course                                  Selection
0   1.00 HAYDOCK  1pt win RAINBOW JET (12-1 & 11-1 general)
1  2.50 GOODWOOD            1pt win MARSABIT (11-2 general)

还有一个.csv 文件:

【讨论】:

    猜你喜欢
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 2020-05-19
    • 2021-02-28
    相关资源
    最近更新 更多