问题描述
我正在从网站中提取一张桌子。我已经尝试过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
网站表如下所示
我希望第三列中的单词用逗号分隔 有什么想法吗?!
解决方法
如果您将看到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
,
我不知道这是否是一个选项,但是您可以尝试使用正则表达式-如果该模式是固定的,即所有单独的单词均以大写字母开头,并且其他字符串中没有其他大写字母,则可以尝试在每个大写字母之前添加空格:
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])',str(x)))
,
尝试一下:
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/>
,所以我们首先要解决它。