【发布时间】:2021-05-23 09:02:31
【问题描述】:
我正在为我的网球俱乐部开发一个 Python 网络爬虫,以从我的数据库中的网页保存游戏结果、排名等(然后将其显示在我自己的网站上)。工作得很好,我得到这样的表格:
但是,有些球队的名字在我的网站上输出得很好(尤其是当两个俱乐部在一起时)。
我的问题是:如果字符串达到一定长度,例如 34,我如何用 pandas 剪切“/”后面的所有内容。
到目前为止我的代码(对已爬取的信息进行了其他有效的更改):
for x in range(len(teams)):
driver.get('https://baden.liga.nu/cgi-bin/WebObjects/nuLigaTENDE.woa
/wa/teamPortrait?team=' + teams[x][1])
table_games = driver.page_source
df = pd.read_html(table_games)[1]
banned = ['TSG']
f = lambda x: ' '.join([item for item in x.split() if item not in banned])
df["Heimmannschaft"] = df["Heimmannschaft"].apply(f)
df["Gastmannschaft"] = df["Gastmannschaft"].apply(f)
df = df.rename(columns={'Datum, Uhrzeit.1': 'Termin'})
df[['Datum', 'Uhrzeit']] = df.Termin.str.split(" ", expand=True, )
del df['Termin']
df = df[['Datum', 'Uhrzeit', 'Heimmannschaft', 'Gastmannschaft', 'Matches',
'Spielbericht']]
df.to_sql(con=con, name=teams[x][0]+'_Spiele', if_exists='replace')
driver.get('https://baden.liga.nu/cgi-bin/WebObjects/nuLigaTENDE.woa
/wa/groupPage?targetFed=BAD&championship=B1+S+2021&group=' + teams[x][2])
table_ranks = driver.page_source
df = pd.read_html(table_ranks)[0]
f = lambda x: ' '.join([item for item in x.split() if item not in banned])
df["Mannschaft"] = df["Mannschaft"].apply(f)
df.iloc[0:, 1:].to_sql(con=con, name=teams[x][0]+ '_Tabelle', if_exists='replace')
driver.quit()
我的代码示例中的驱动程序会在 和 比赛日中爬到不同的网站,并且在这两种情况下,某些团队名称都太长了(所以我想删掉第二个团队名称, 从“/”开始)。
我希望你能帮助我。
【问题讨论】:
-
所以你想把每个名字剪成一定的固定长度或'/'之后?
-
在“/”之后,当字符串比 e.g. 34. 所以如果我喜欢“TC Germania 1890 Großsachsen/KSV 1948 Steinklingen”,它太长了(例如粗体字超过了限制),我不想把它剪成35 个字母,但在“/”处。在这种情况下,就像只有一个团队会玩一样。
-
如果没有“/”,那么剪成34长?
-
会是合理的,但是没有超过34个字母的球队(只有当两支球队一起比赛时)。
标签: python pandas web-crawler