Scrapy代码跳过JSON输出上的数据

8ftvxx2r  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(105)

我创建了一个解析足球比赛数据的代码。代码工作几乎正常,但由于某些原因,数据刮取不完整。例如在url上:https://www.fcf.cat/acta/2223/futbol-11/divisio-honor-cadet/grup-1/hc/barcelona-fc-a/hc/damm-cf-a
json输出不包括第34分钟的进球,我不明白为什么。有人能告诉我为什么吗?

case "Gols":
                        for row in table.css("tbody tr"):
                            #player_name = row.css("td a::text").get().strip()
                            player_name = player_name = row.xpath("string(td/a)").get().strip()
                            
                            timestamp_acta = ""
                            tipus_gol = ""
                            
                            
                            if row.css(".faf-pilota_base.p-a.stat-center.gol-normal"):
                                tipus_gol = "Normal"

                            if row.css(".faf-pilota_base.p-a.stat-center.gol-propia"):
                                tipus_gol = "Propia"

                            if row.css(".faf-pilota_base.p-a.stat-center.gol-penal"):
                                tipus_gol = "Penal"
                            
                            
                            # special selector for 👇 selecting last of it's kind
                            timestamp = row.css("td:last-child::text").get()
                            
                            table_data[player_name] = {
                                "Minut": timestamp,
                                "Tipus": tipus_gol}
                            
                    
                    case "Estadi":
                        table_data = []
                        table_data.append(
                            table.css("tr a::text").get()
                        )
                        table_data.append(
                            table.css("tr td.uppercase::text").get()
                        )
                    
                    case "Comparativa":
                        team1 = response.css(".td-comparativa .comparativa-equip1 span::text").get()
                        team2 = response.css(".td-comparativa .comparativa-equip2 span::text").get()
                        
                        table_data["Local"] = team1
                        table_data["Visitant"] = team2
    
                dt[table_heading] = table_data

字符串
我想找人来帮助理解为什么代码跳过了这一行,这样我就可以解决代码。能够抓取所有数据真的很重要。

pbwdgjma

pbwdgjma1#

第34分钟的进球没有出现在结果中,因为您将进球数据存储在按球员姓名键入的字典中。因此,如果一个球员打进多个进球,您将只记录他们最后一个进球。
也许你想考虑存储一个由球员名字索引的进球列表。
而不是这样:

table_data[player_name] = {
    "Minut": timestamp,
    "Tipus": tipus_gol}

字符串
你可以使用这样的东西:

goal_info = { "Minut": timestamp, "Tipus": tipus_gol}
if player_name in table_data:
    table_data = { **table_data, player_name: table_data[player_name] + [goal_info]}
else:
    table_data[player_name] = [goal_info]

相关问题