用beautifulsoup抓取网站的问题

时间:2021-06-02 09:26:35

标签: python web-scraping beautifulsoup discord.py

基本上,我试图抓取交易网站 (https://rocket-league.com/) 以查找您在不和谐中输入的用户名的最近交易。为了测试,我使用了这个人的帐户 (https://rocket-league.com/player/Guuter)。之后,机器人发送一个包含标题和描述的嵌入(工作正常),但在添加一个标题为“Has:”的字段后,包含他拥有的项目和另一个标题为“Wants:”的字段,其中包含项目他有,目前不起作用。我正在使用的类是 rlg-trade__itemshas rlg-trade__itemswants,它们都在 3 个单独的字段下以纯文本形式包含它们的相关项目,分别是颜色、项目和数量,我希望在发送后分别按顺序排列。但是,有时没有指定颜色或数量,在这种情况下,它只是发送项目。此外,物品的数量也各不相同 - 例如:2 件、3 件或 1 件、5 件

我好难受

这是我写的:

@bot.command()
async def rlgarage(ctx, arg):
 embed=discord.Embed(title="{}'s RLGarage Account".format(arg), description="https://rocket-league.com/player/"+arg)
 name = arg
 #arg = "Guuter"
 page = requests.get("https://rocket-league.com/player/"+arg)
 soup = BeautifulSoup(page.content, 'html.parser')
 hasitems = soup.find("div",class_="rlg-trade__itemshas")
 wantsitems = soup.find("div",class_="rlg-trade__itemswants")
 haslst=[]
 wantslst=[]
 for i in hasitems.find_all("a"):
   haslst.append(i.get_text(strip=True,separator=" "))
   embed.add_field(name="Has:", value=haslst,inline=False)
 for s in wantsitems.find("a"):
   wantslst.append(s.get_text(strip=True,separator=" "))
   embed.add_field(name="Wants:", value=wantslst, inline=False)
 await ctx.send(embed=embed)

错误:

AttributeError: 'NavigableString' object has no attribute 'get_text' (line 112) - (wantslst.append)

1 个答案:

答案 0 :(得分:0)

您应该在迭代 find_all() 时将 find 更改为 wantsitems

@bot.command()
async def rlgarage(ctx, arg):
 embed=discord.Embed(title="{}'s RLGarage Account".format(arg), description="https://rocket-league.com/player/"+arg)
 name = arg
 #arg = "Guuter"
 page = requests.get("https://rocket-league.com/player/"+arg)
 soup = BeautifulSoup(page.content, 'html.parser')
 hasitems = soup.find("div",class_="rlg-trade__itemshas")
 wantsitems = soup.find("div",class_="rlg-trade__itemswants")
 haslst=[]
 wantslst=[]
 for i in hasitems.find_all("a"):
   haslst.append(i.get_text(strip=True,separator=" "))
   embed.add_field(name="Has:", value=haslst,inline=False)
 for s in wantsitems.find_all("a"):
   wantslst.append(s.get_text(strip=True,separator=" "))
   embed.add_field(name="Wants:", value=wantslst, inline=False)
 await ctx.send(embed=embed)