Web scraping 如何从bs4中的标记数组中获取字符串?

Web scraping 如何从bs4中的标记数组中获取字符串?,web-scraping,beautifulsoup,Web Scraping,Beautifulsoup,之后: 我得到: soup.select('tr:nth-child(1)') [ 日期 T(C) Td(C) Tmax(C) Tmin(C) ... ] 如何在不手动选择每个元素的情况下获取字符串列表(Date、T、Td),如soup.select('tr:nth child(1)>th:nth child(5)')[0]。text,因为这非常慢,而且我在不同的页面上有不同数量的th?要将表获取到pandas数据帧,可以使用以下示例: 重新导入 导入请求 作为pd进口熊猫 从bs4导入Be

之后:

我得到:

soup.select('tr:nth-child(1)')
[
日期
T
(C) Td
(C) Tmax
(C) Tmin
(C) ... ]

如何在不手动选择每个元素的情况下获取字符串列表(Date、T、Td),如
soup.select('tr:nth child(1)>th:nth child(5)')[0]。text
,因为这非常慢,而且我在不同的页面上有不同数量的th?

要将表获取到pandas数据帧,可以使用以下示例:

重新导入
导入请求
作为pd进口熊猫
从bs4导入BeautifulSoup
url=”https://www.ogimet.com/cgi-bin/gsynres?ind=28698&lang=en&decoded=yes&ndays=31&ano=2021&mes=1&day=1"
soup=BeautifulSoup(requests.get(url.content,“html.parser”)
标题=[
th.get_text(strip=True)为汤中的th.thead.select(“tr”)[0]。select(“th”)
]
所有_数据=[]
对于soup.thead.select(“tr”)中的行[1:]:
tds=[td.get_text(strip=True)表示第行中的td。选择(“td”)[:-3]]
tds.insert(0,tds.pop(0)+“”+tds.pop(0))
对于第行中的td。选择(“td”)[-3:]:
img=td。选择一个(“img[onmouseover]”)
如果img:
tds.append(再搜索(r“'([^']+)”,img[“onmouseover”]).group(1))
其他:
tds.追加(“-”)
所有数据追加(tds)
df=pd.DataFrame(所有数据,列=标题)
打印(df)
df.to_csv(“data.csv”,index=False)
印刷品:

日期T(C)Td(C)Tmax(C)Tmin(C)ddd ffkmh Gustkmh P0hPa P seahPa PTnd Prec(mm)Nt Nh InsoD-1 Viskm雪(cm)WW W1 W2
2021年01月01日06:00-30.6-33.7----31.1北纬7.2----1027.8 1045.5+1.5----0----20.0----钻石尘(有雾或无雾)雪,或雨雪混合云,在。。。
2021年1月1日03:00-30.7-33.7------30.7 NNW 7.2----1026.2 1044.0+1.0 Tr/12h 8 8 8 3.7 10.0 23钻石尘(有雾或无雾)雪,或覆盖1/2以上天空的雨雪混合云。。。
2021年1月21日00:00-30.1-33.1------北纬7.2---1025.3 1043.0+0.6---8 0---10.0----钻石尘(有雾或无雾)雪,或雨雪混合云,在。。。
3 2020年12月31日21:00-30.5-33.5------北纬3.6----1024.7 1042.4+0.6----0----10.0----钻石尘(有雾或无雾)雪,或覆盖1/2或更少天空的雨雪混合云。。。
等等
并保存
data.csv
(来自LibreOffice的屏幕截图):


你能分享这个URL吗?我已经将这个页面解析为df,但是我的解决方案假设列数固定,并且不能像我所希望的那样正确工作。
[<tr>
 <th bgcolor="#5ac05a" colspan="2">Date</th>
 <th bgcolor="#a3c35a">T<br/>(C)</th>
 <th bgcolor="#c0a35a">Td<br/>(C)</th>
 <th bgcolor="#a3c35a">Tmax<br/>(C)</th>
 <th bgcolor="#a3c35a">Tmin<br/>(C)</th>
...
 </tr>]