#python #pandas #string #beautifulsoup #python-3.6
#питон #панды #строка #beautifulsoup #python-3.6 #python #pandas
Вопрос:
Я извлекаю таблицу с веб-сайта. Я уже пробовала с Пандами и BeautifulSoup.
Вот пример кода, который я пробовал:
res = requests.get("https://www.dasoertliche.de/Themen/Postleitzahlen/Berlin.html")
soup = BeautifulSoup(res.content,'lxml')
table = soup.find_all('table')[0]
df = pd.read_html(str(table))[0]
df
таблица веб-сайта выглядит следующим образом
мои результаты выглядят примерно так
Я хочу, чтобы слово в третьем столбце было разделено запятой, есть идеи?!
Комментарии:
1. Попробуйте
pd.read_html("https://www.dasoertliche.de/Themen/Postleitzahlen/Berlin.html")[0]
Ответ №1:
Попробуйте это:
html = requests.get('https://www.dasoertliche.de/Themen/Postleitzahlen/Berlin.html').text.replace("<br/>", ', ')
df = pd.read_html(html, attrs={'id': 'tl-plz'})[0]
df
Проблема <br/>
внутри таблицы, поэтому сначала мы просто избавимся от нее.
Комментарии:
1. я не пробовал другое предложение, но для меня это работает просто отлично
Ответ №2:
Если вы увидите ответ HTML. Внутри этого столбца вы найдете <br/>
теги для отображения каждого в следующей строке. Вы можете просто заменить <br/>
на ,
res = requests.get("https://www.dasoertliche.de/Themen/Postleitzahlen/Berlin.html")
soup = BeautifulSoup(res.content,'lxml')
table = str(soup.find_all('table')[0])
#replce <br> with comma
table = table.replace("<br/>", ",")
df = pd.read_html(str(table))[0]
df
Ответ №3:
Я не знаю, возможно ли это, но вы можете попробовать с регулярным выражением — если шаблон исправлен, т. Е. Все отдельные слова начинаются с заглавной буквы, и никакие другие заглавные символы не отображаются в отдельной строке, вы можете попробовать добавить пробелы перед каждой заглавной буквой:
for i in range(len(df)):
df['Ortsteil'][i] = re.sub(r"(w)([A-Z])", r"1 2", df['Ortsteil'][i])
Или без зацикливания df:
df['Ortsteil'] = df['Ortsteil'].apply(lambda x: re.sub('(w)([A-Z])', r"1 2", str(x)))