Big-Data-FC / scraper

sofifa.com scraper, built to scrape data needed for our project of Big Data Computing 2021-22 at Sapienza University of Rome
MIT License
15 stars 2 forks source link

Esportazione data di Nascita - Birth date export #10

Closed trivius86 closed 1 year ago

trivius86 commented 1 year ago

Salve di nuovo, purtroppo non sono esperto sulla creazione di script come questo quindi sono qui a chiedere info a voi sul vostro che reputo il migliore in assoluto! Il vostro script ovviamente esporta quelli che sono i dati presenti nella pagine di sofifa ma non i valori interni di ogni singolo giocatore. In quelle pagine cè un valore per me molto importante cioe L'ANNO DI NASCITA, questo perchè il sito di sofifa non è preciso con le età nella sua finestra sfasando anche di due anni, ma con il valore della data effettiva risolverei con una formula excel dopo esportata. Avete qualche idea?! Grazie mille da subito se trovate tempo anche solo per rispondermi.


Hi again, unfortunately I'm not an expert on creating scripts like this so I'm here to ask you for info on yours which I think is the best ever! Your script obviously exports the data present in the sofifa pages but not the internal values of each single player. In those pages there is a value that is very important to me, namely THE YEAR OF BIRTH, this is because the sofifa site is not precise with the ages in its window, even offsetting by two years, but with the value of the effective date I would solve it with an excel formula after exported. Do you have any ideas?! Thank you very much from the start if you find time even just to answer me.

davquar commented 1 year ago

Hello @trivius86 and thank you :)

The parse_team() function does a similar thing: basically gets the league name from the team page.

You can create a similar function to get the birth date for each player, from their pages.

trivius86 commented 1 year ago

Questa è la parte di codice del parse:

def parse_team(self, team_url): if team_url in self.teams_cache.keys(): return self.teams_cache[team_url]

    cookies = {"r": YEAR_KEYS[self.year]}
    headers = {
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:100.0) Gecko/20100101 Firefox/100.0"
    }

    req = requests.get(
        SITE_BASE_URL + team_url + "?r=" + YEAR_KEYS[self.year],
        cookies=cookies,
        headers=headers,
    )

    resp = scrapy.Selector(req)

    # the item is something like `English Premier League (1)`
    league_name = resp.css(".info a::text").get()[:-4]
    self.teams_cache[team_url] = league_name

    return league_name

Questo dovrei sfruttare per estrarre la data? detto che a me la lega non interessa

trivius86 commented 1 year ago

Ammetto che ci ho provato in tutti i modi ma non capisco come è stato composta questa parte di codice del PARSE Non riesco a riformularla per cercare il campo dell'anno di nascita nelle pagine dei calciatori

trivius86 commented 1 year ago

So che magari sono un rompi scatole ma avrei proprio bisogno di aiuto, sono mesi che ci provo. I know maybe I'm a pain in the ass but I really need help, I've been trying for months.

questo è il punto che mi indicavi tu: This is the point you pointed out to me:

`

`

Così estrae il dato nella pagine della LEGA. Come faccio a cambiarlo per estrarre il campo della data di nascita?! Spero tu mi possa aiutare ringraziandoti ancora per il gran lavoro creato

So it extracts the data on the LEAGUE pages. How do I change it to extract the date of birth field?! I hope you can help me by thanking you again for the great work created

davquar commented 1 year ago

Write something like this:

def parse_player(self, player_url):
        cookies = {"r": YEAR_KEYS[self.year]}
        headers = {
            "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:100.0) Gecko/20100101 Firefox/100.0"
        }

        req = requests.get(
            SITE_BASE_URL + player_url + "/" + YEAR_KEYS[self.year],
            cookies=cookies,
            headers=headers,
        )

        resp = scrapy.Selector(req)

        # the item is something like `English Premier League (1)`
        player_meta = resp.css(".meta ::text").get()

        return player_meta

.meta ::text is more or less what you are should be looking for. It will contain something like "33y.o. (Aug 21, 1988) 185cm / 6'1" 81kg / 179lbs". Write your own function to parse the date.

Adjust anything as needed. I just wrote it and didn't test.

trivius86 commented 1 year ago

In the meantime, I thank you as always for your availability.

I first tried to add your portion of code immediately below and launched the command, but it told me that the "player_url" was not declared.

So I went to the top of the code, where there is team_url and I also added: "player_url": player.css("td:nth-child(2) a::attr(href)").get(), Which was in the item list immediately below.

Also in item I added this: "player_meta": self.parse_player(player_url),

and launched the script but unfortunately the player meta column is completely empty.

I attach a screenshot of the entire code

Screenshot 2023-09-18 alle 12 05 45