Web抓取:使用bs4抓取数据时获取'\ n'标签

时间:2020-04-02 09:45:04

标签: python web-scraping beautifulsoup

我正在尝试从Wikipedia页面上抓取表格 Link

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

示例:row1输出为

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

我不明白为什么要得到这个\ n以及如何删除它。 我认为\ n在创建数据框时出错:

标记数据时出错。 C错误:第2行中应有1个字段,看到了2

我的代码:

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错误:第2行中应有1个字段,看到了2

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

2 个答案:

答案 0 :(得分:1)

单发,您可以使用pandas read_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)

答案 1 :(得分:-1)

使用pandas read_html方法在df中获取所需表的简单版本

TCL_UTF_MAX=4