web抓取:使用bs4抓取数据时获取“\n”标记

2024-05-15 07:47:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图从维基百科的页面上抓取表格 Link

我在创建数据框时出错,因为当我将每个列按分隔以保存在csv中时,我得到了/n标记

示例:第1行输出为

“,Navi Peth\n,英国政府\n,1818+\n,Navi(马拉地语:新)\n”

我不明白为什么会得到这个\n以及如何删除它。 我认为这是\n我在创建数据帧时出错的结果:

标记数据时出错。C错误:在saw 2的第2行中应该有1个字段

我的代码:

import requests
from bs4 import BeautifulSoup
import pandas as pd
page1 = requests.get('https://en.wikipedia.org/wiki/Peths_in_Pune').text
soup1 = BeautifulSoup(page1, 'lxml')
table = soup1.find('table',{'class':'wikitable sortable'})
#table
table1=""
for tr in table.find_all('tr'):
    row1=""
    for tds in tr.find_all('td'):
        row1=row1+","+tds.text
    table1=table1+row1[1:]
row1

“,Navi Peth\n,英国政府\n,1818+\n,Navi(马拉地语:新)\n”

进一步:

file=open("data1.csv","wb")
file.write(bytes(table1,encoding="ascii"))
df = pd.read_csv('data1.csv', header=None)
df

标记数据时出错。C错误:在saw 2的第2行中应该有1个字段

PS:我想要的结果是wiki表的第一列


Tags: csv数据in标记import错误tablefind
2条回答

这只是一个更简单的版本,可以通过pandas read_html方法在df中获取所需的表

import pandas as pd

df = pd.read_html("https://en.wikipedia.org/wiki/Peths_in_Pune")[1]

df.to_csv("data.csv", index=False)

对于单次放炮,您可以使用pandasread_html函数执行此操作:

import pandas as pd

df = pd.read_html("https://en.wikipedia.org/wiki/Peths_in_Pune")[1]

print(df)

df.to_csv("data.csv", index=False)

输出:view-online

enter image description here

对于第一列

target = df['Peth Naam'].to_list()

print(target)

输出:

['Kasba Peth', 'Guruwar Peth', 'Somwar Peth', 'Mangalwar Peth', 'Shukrawar Peth', 'Raviwar Peth', 'Shaniwar Peth', 'Bhavani Peth', 'Ghorpade Peth', 'Budhwar Peth', 'Ganesh Peth', 'Sadashiv Peth', 'Narayan Peth', 'Rasta Peth', 'Nana Peth', 'Ganj Peth(later renamed to Mahatma Phule Peth)', 'Navi Peth']

现在回到真正的问题:

使用item.get_text("\n", strip=True)

相关问题 更多 >