Seite 1 von 1

Web Scrapping Cookies

Verfasst: Freitag 10. April 2020, 17:35
von Boonlight
Moin Python Freunde,

ich habe folgendes Problem. Mein Script funktioniert soweit, das ich die Daten meines Fussballmanagaers jeden Tag auslesen kann und per CSV Speichere. Nun will ich aber, dass ich nicht händisch meine Cookies eintrage sondern ich möchte, dass das automatisch passiert. Bitte nehmt Rücksicht auf meinen schlechten Code. Dieses Projekt ist mein erstes Python Projekt.

Cookie hier extra anonymisiert

Code: Alles auswählen

import requests

headers_player = {
            
            'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
            'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8',
            'Accept-Language' : 'de,en-US;q=0.7,en;q=0.3',
            'Connection' : 'keep-alive',
            'Cookie' : '_ga=abc; _fbp=cde; _gid=fgh; onlineliga_location=OL-cookie; io=io-coockie; XSRF-TOKEN=xsrf-token; onlineliga_session=OL-Session',
            'Accept-Encoding' : 'gzip, deflate, br',
            'Host' : 'www.onlineliga.de',
            'Upgrade-Insecure-Requests' : "1"
            }

rplayer = requests.get(url = playerurl ,  headers = headers_player)
Dieser Teil funktioniert also einwandfrei wenn ich es hardcoded reinkopiere.

Hier nun dann versuche Cookies wegzulassen und automatisch zu holen, aber daran scheitere ich leider gnadenlos.

Code: Alles auswählen

headers_player = {
            
            'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
            'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8',
            'Accept-Language' : 'de,en-US;q=0.7,en;q=0.3',
            'Connection' : 'keep-alive',
            'Accept-Encoding' : 'gzip, deflate, br',
            'Host' : 'www.onlineliga.de',
            'Upgrade-Insecure-Requests' : "1"
            }
            
  r = requests.get('https://www.onlineliga.de')
  c = r.cookies
  h = r.headers
  print (r.headers)
#  session = requests.Session()
#  response = session.get('https://www.onlineliga.de')
#  cookies = session.cookies
#  cookies = response.cookies.get_dict('.onlineliga.de')
#  if cookies:
#      str_cook = str(cookies)
#      str_cook = re.sub('{', '', str_cook)
#      str_cook = re.sub('}', '', str_cook)
#      str_cook = re.sub(':', '=', str_cook)
##      str_cook = re.sub("'", '', str_cook)
##      str_cook = re.sub(",", ';', str_cook)
#      print(str_cook)
  #print(cookies)
#  print("------------------------------------")
#  #headers_player.update({'Cookie' : cookies})
#  #headers_skill.update({'Cookie' : cookies})
#  print("PLAYER")
#  print(headers_player)
#  print("------------------------------------")
#  print("SKILL")
#  print(headers_skill)        


for x in playerids:    
    playerurl = "https://www.onlineliga.de/player/overview?playerId=" + x
    
    rplayer = requests.get(url = playerurl ,  cookies = c, headers = headers_player)

Wäre schön wenn mich hier jemand unterstützen könnte.

Grüße
Boon

Re: Web Scrapping Cookies

Verfasst: Samstag 11. April 2020, 13:21
von Sirius3
Warum machst Du so komplizierte Dinge mit den Cookies?
Du hast doch schon ein Session, wenigstens auskommentiert, aber trotzdem haust Du noch mit replace drauf rum?
Cookies werden in einer Session automatisch gespeichert:

Code: Alles auswählen

session = requests.Session()
response = session.get('https://www.onlineliga.de')
response.raise_for_status()
for player_id in player_ids:
    response = session.get('https://www.onlineliga.de/player/overview', params={'playerId':player_id})

Re: Web Scrapping Cookies

Verfasst: Samstag 11. April 2020, 18:14
von __blackjack__
Und eventuell muss man in der Session sich auch anmelden, falls das Daten sind die man nur zu Gesicht bekommt, falls man angemeldet ist.

Re: Web Scrapping Cookies

Verfasst: Samstag 11. April 2020, 22:50
von Boonlight
__blackjack__ hat geschrieben: Samstag 11. April 2020, 18:14 Und eventuell muss man in der Session sich auch anmelden, falls das Daten sind die man nur zu Gesicht bekommt, falls man angemeldet ist.
Der erste Request funktioniert, die Daten bekommt man ohne Anmeldung zu Gesicht.

Code: Alles auswählen

session = requests.Session()
  response = session.get('https://www.onlineliga.de')
  response.raise_for_status()
  for player_id in playerids:
    

    #playerurl = "https://www.onlineliga.de/player/overview" + player_id
    skillurl = "https://www.onlineliga.de/team/training/details/results/player?playerId=" + player_id
   
    rplayer = session.get('https://www.onlineliga.de/player/overview', params={'playerId':player_id})
    docplayer = html.fromstring(rplayer.content.decode('UTF-8'))

Der zweite scheitert aber.

Code: Alles auswählen

rskill = session.get(skillurl)    
docskill = html.fromstring(rskill.content.decode('UTF-8'))
zusätzlicher Versuch mit Headerinformationen

Code: Alles auswählen

rskill = requests.get(url = skillurl ,  headers = headers_skill)
beides funktioniert nicht. Auth habe ich auch versucht. Hatte aber auch keinen Erfolg.

Code: Alles auswählen

s.auth = ('user', 'pass')

Re: Web Scrapping Cookies

Verfasst: Mittwoch 15. April 2020, 08:18
von Boonlight
Hab es jetzt erstmal lauffähig über eine ConfigDatei, sodass sich das jeder selbst anlegen kann.
Automatisch auslesen wäre aber immer noch deutlich netter. Aber das bekomme ich bisher nicht hin.

Re: Web Scrapping Cookies

Verfasst: Donnerstag 16. April 2020, 20:00
von Boonlight
hab es nun geschafft. Danke für die Denkanstöße

Code: Alles auswählen

result = session_requests.post(
      	login_url, 
      	data = payload, 
      	headers = dict(referer=login_url)
      )

Re: Web Scrapping Cookies

Verfasst: Dienstag 21. April 2020, 23:37
von Boonlight
soup.findall komm mit folgendem Resultset zurück

Code: Alles auswählen

[<div class="team-overview-next-match-wrapper" onclick="olAnchorNavigation.load('/match', { season : 3, matchId : 7097 });">
<div class="text-center">-</div>
<div class="text-center next-match-preview-link">
                                    Vorschau
                                    <span class="fa fa-angle-right"></span>
</div>
</div>]
wie komm ich einfach nun an die season und die matchId?
mit Get_text und get etc hab ich es schon probiert aber er liefert mir nur dann " Vorschau "

Code: Alles auswählen

roverview = session_req.get(url = overurl)
    soup = BeautifulSoup(roverview.text, 'html.parser')
    #docoverview = html.fromstring(roverview.content.decode('UTF-8'))
    content = soup.find_all('div', { "class" : "team-overview-next-match-wrapper"})

Re: Web Scrapping Cookies

Verfasst: Dienstag 21. April 2020, 23:43
von Boonlight
hab es selbst rausgefunden

Code: Alles auswählen

content[0].attrs['onclick'].text

Re: Web Scrapping Cookies

Verfasst: Mittwoch 22. April 2020, 11:28
von __blackjack__
@Boonlight: Wenn Du nur das erste (vielleicht sogar einzige) vorkommen finden willst, dann nimm doch nicht `find_all()`.