0

Ich schreibe ein Skript zum Herunterladen von Dateien von einer Website.Python Request Modul Fehler beim Einloggen in eine Wordpress-Site

import requests 
import bs4 as bs 
import urllib.request 
import re 

with requests.session() as c: #making c denote the requests.session() function 
    link="https://gpldl.com/wp-login.php" #login link 

    initial=c.get(link) #passing link through .get() 
    headers = { 
     'User-agent': 'Mozilla/5.0' 
    } 
    login_data= {"log":"****","pwd":"****","redirect_to":"https://gpldl.com/my-gpldl-account/","redirect_to_automatic":1,"rememberme": "forever"} #login data for logging in 
    page_int=c.post(link, data=login_data,headers=headers) #posting the login data to the login link 
    prefinal_link="https://gpldl.com" #initializing a part of link to be used later 
    page=c.get("https://gpldl.com/repository/",headers=headers) #passing the given URL through .get() to be used later 
    good_data = bs.BeautifulSoup(page.content, "lxml") #parsing the data from previous statement into lxml from by BS4 
    #loop for finding all required links 
    for category in good_data.find_all("a",{"class":"dt-btn-m"}): 
     inner_link=str(prefinal_link)+str(category.get("href")) 
     my_var_2 = requests.get(inner_link) 
     good_data_2 = bs.BeautifulSoup(my_var_2.content, "lxml") #parsing each link with lxml 
     for each in good_data_2.find_all("tr",{"class":"row-2"}): 

      for down_link_pre in each.find_all("td",{"class":"column-4"}): #downloading all files and getting their addresses for to be entered into .csv file 
       for down_link in down_link_pre.find_all("a"): 
        link_var=down_link.get("href") 
        file_name=link_var.split('/')[-1] 
        urllib.request.urlretrieve(str(down_link),str(file_name)) 

      my_var.write("\n") 

Mit meinem Code, wenn ich auf die Website zugreifen, um die Dateien herunterzuladen, schlägt die Anmeldung fehl. Kann mir jemand helfen, herauszufinden, was mit meinem Code nicht stimmt?
Edit: Ich denke, der Fehler ist mit der Aufrechterhaltung der eingeloggten Zustand seit, wenn ich versuche, auf eine Seite auf einmal zugreifen, kann ich auf die Links zugreifen, die nur zugegriffen werden kann, wenn man eingeloggt ist Wenn ich navigiere, denke ich, dass der Bot abgemeldet wird und nicht in der Lage ist, die Download-Links abzurufen und herunterzuladen.

Antwort

0

Websites verwenden Cookies, um den Anmeldestatus in jeder Anfrage zu überprüfen, ob es von einem angemeldeten Benutzer kommt oder nicht, und moderne Browser (Chrome/Firefox usw.) verwalten automatisch Ihre Cookies. requests.session() hat Unterstützung für Cookies und behandelt Cookies standardmäßig, so in Ihrem Code with requests.session() as c c ist wie die Miniatur-Version eines Browsers, Cookie ist in jeder Anfrage von c beteiligt, sobald Sie mit c einloggen, können Sie Verwenden Sie c.get(), um alle diese nur für den Anmeldevorgang zugänglichen Seiten zu durchsuchen.

Und in Ihrem Code urllib.request.urlretrieve(str(down_link),str(file_name)) wird zum Download verwendet, es hat keine Ahnung von früheren Login-Status, deshalb können Sie diese Dateien nicht herunterladen.

Stattdessen sollten Sie mit c halten, die den Login-Zustand hat, alle diese Dateien herunterladen:

with open(str(file_name), 'w') as download: 
    response = c.get(down_link) 
    download.write(response.content) 
Verwandte Themen