веб-утилизация: получение тега '\ n' при утилизации данных с помощью bs4 - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь удалить таблицу со страницы Википедии Ссылка .

Я получаю сообщение об ошибке при создании фрейма данных, потому что при выводе каждого столбца я получаю тег / n, чтобы сохранить в csv

Пример: выход строки 1 равен

', Navi Peth \ n, Briti sh администрация \ n, 1818 + \ n, Navi (маратхи: новый) \ n'

Я не понимаю, почему я получаю это \ n и как его удалить. Я думаю, что в результате этого \ n я получаю ошибку при создании фрейма данных:

Ошибка токенизации данных. C ошибка: Ожидается 1 поле в строке 2, видел 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

', Нави Пет \ n, Брити sh администрация \ 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 ошибка: Ожидается 1 поле в строке 2, пила 2

PS: я хочу получить первый столбец из вики-таблицы

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

С одним кадром вы можете сделать это с помощью функции 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)

Вывод: просмотр в режиме онлайн

enter image description here

Для первого столбца 1016 *:

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)

0 голосов
/ 02 апреля 2020

Просто более простая версия, чтобы получить необходимую таблицу в df с pandas read_ html method

import pandas as pd

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

df.to_csv("data.csv", index=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...