Forme nebunești. Descrierea obiectului de răspuns html răspunsuri nevalide
Să presupunem că trebuie să obținem date de pe un site web, a căror colectare manuală este imposibilă sau imposibilă din cauza volumului său. În acest caz, putem automatiza procesul folosind instrumentele descrise mai jos.
solicită bibliotecăBiblioteca Python pentru a face cereri către server și pentru a procesa răspunsurile. Fundamentul scriptului de analiză și arma noastră principală. Folosind această bibliotecă, primim conținutul paginii sub formă de html pentru o analiză ulterioară.
cereri de import răspuns = solicitări . get ("https://ya.ru") # get-request print (răspuns . text ) # output page contents payload = ( "key1" : "value1" , "key2" : "value2" ) response = requests . get ("http://httpbin.org/get" , params = payload ) # cerere cu parametri headers = ( "user-agent" : "my-app/0.0.1") răspuns = solicitări . get (url, headers = headers) # cerere cu antete html specifice
APIInterfață de programare a aplicației - interfață de programare a aplicației oferită de proprietarul aplicației web pentru alți dezvoltatori. Lipsa unui API care să ne poată satisface nevoile este primul lucru de care ar trebui să ne asigurăm înainte de a ne grăbi să analizăm codul sursă al paginii și să scriem un parser pentru acesta. Multe site-uri populare au propria lor API și documentație care explică cum să le folosească. Putem folosi API-ul în acest fel - formăm o cerere http conform documentației și primim un răspuns folosind cereri.
BS4Beautifulsoup4 este o bibliotecă pentru analizarea documentelor html și xml. Vă permite să accesați direct conținutul oricăror etichete în html.
din bs4 import BeautifulSoup soup = BeautifulSoup (raw_html, "html.parser" ) print (soup . find ( "p" , class_ = "some-class") . text ) # scoateți conținutul etichetei "p" cu clasa „oarecare clasă”
Driver web SeleniumDatele de pe site pot fi generate dinamic folosind javascript. În acest caz, nu va fi posibilă analizarea acestor date folosind requests+bs4. Cert este că bs4 analizează codul sursă al paginii fără a executa js. Pentru a executa codul js și a obține o pagină identică cu cea pe care o vedem în browser, puteți utiliza driverul web selenium - acesta este un set de drivere pentru diferite browsere, furnizate cu biblioteci pentru a lucra cu aceste drivere.
Ce să faci dacă există autorizație?session = requests.Session() data = ("login_username":"login", "login_password":"parolă") url = "http://site.com/login.php" răspuns = session.post(url, date =date)
Ce se întâmplă dacă un site vă interzice pentru prea multe solicitări?- Setați o întârziere între solicitări:
răspuns = requests.get(url, timeout=(10, 0.01)) # timeout conexiune, timeout citire (în secunde)
- Pretindeți-vă că sunteți un browser care utilizează driverul web selenium sau care transmite conținutul antetului user-agent atunci când faceți o solicitare:
user_agent = ("Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:50.0) " "Gecko/20100101 Firefox/50.0") cerere = requests.get(url, headers=("User-Agent":user_agent))
- Utilizarea proxy:
După primirea și interpretarea unui mesaj de solicitare, un server răspunde cu un mesaj de răspuns HTTP:
- O linie de stare
- Zero sau mai multe câmpuri de antet (General|Răspuns|Entitate) urmate de CRLF
- O linie goală (adică, o linie fără nimic care să precede CRLF) care indică sfârșitul câmpurilor de antet
- Opțional un mesaj-corp
Următoarele secțiuni explică fiecare entități utilizate într-un mesaj de răspuns HTTP.
Linia de stare a mesajuluiO linie de stare constă din versiunea protocolului urmată de un cod de stare numeric și fraza textuală asociată. Elementele sunt separate prin caractere SP spațiale.
Un server care acceptă HTTP versiunea 1.1 va returna următoarele informații despre versiune:
Versiune HTTP = HTTP/1.1
Cod de stareElementul Status-Code este un număr întreg de 3 cifre în care prima cifră a Status-Code definește clasa de răspuns, iar ultimele două cifre nu au nici un rol de categorizare. Există 5 valori pentru prima cifră:
1 | 1xx: Informațional Înseamnă că cererea a fost primită și procesul continuă. |
2 | 2xx: Succes Înseamnă că acțiunea a fost primită, înțeleasă și acceptată cu succes. |
3 | 3xx: Redirecționare Înseamnă că trebuie luate măsuri suplimentare pentru a finaliza cererea. |
4 | 4xx: Eroare client Înseamnă că cererea conține sintaxă incorectă sau nu poate fi îndeplinită. |
5 | 5xx: Eroare server Înseamnă că serverul nu a reușit să îndeplinească o solicitare aparent validă. |
Codurile de stare HTTP sunt extensibile, iar aplicațiile HTTP nu sunt necesare pentru a înțelege semnificația tuturor codurilor de stare înregistrate. O listă cu toate codurile de stare a fost dată într-un capitol separat pentru referință.
Câmpuri antet răspunsVom studia General-header și Entity-header într-un capitol separat când vom afla câmpurile de antet HTTP. Deocamdată, să verificăm care sunt câmpurile antetului răspunsului.
Câmpurile pentru antetul răspunsului permit serverului să transmită informații suplimentare despre răspuns care nu pot fi plasate în linia de stare. Aceste câmpuri de antet oferă informații despre server și despre accesul suplimentar la resursa identificată de Request-URI.
-
Proxy-Autentificare
-
WWW-Autentificare
Puteți introduce câmpurile dvs. personalizate în cazul în care aveți de gând să scrieți propriul Web Client și Server personalizat.
Exemple de mesaje de răspunsAcum haideți să punem totul împreună pentru a forma un răspuns HTTP pentru o solicitare de a prelua pagina hello.htm de pe serverul web care rulează pe site
HTTP/1.1 200 OK Data: Luni, 27 iulie 2009 12:28:53 GMT Server: Apache/2.2.14 (Win32) Ultima modificare: miercuri, 22 iulie 2009 19:15:56 GMT Lungimea conținutului: 88 conținut- Tip: text/html Conexiune: închisă Bună ziua, lume!
Următorul exemplu arată un mesaj de răspuns HTTP care afișează o condiție de eroare când serverul web nu a putut găsi pagina solicitată:
HTTP/1.1 404 Nu a fost găsit Data: Duminica, 18 Oct 2012 10:36:20 GMT Server: Apache/2.2.14 (Win32) Lungimea conținutului: 230 Conexiune: Tip conținut închis: text/html; charset=iso-8859-1 404 Nu a fost găsit Nu a fost găsit
Adresa URL solicitată /t.html nu a fost găsită pe acest server.
Următorul este un exemplu de mesaj de răspuns HTTP care arată starea de eroare atunci când serverul web a întâlnit o versiune HTTP greșită în cererea HTTP dată:
HTTP/1.1 400 Data cererii greșite: Duminica, 18 octombrie 2012 10:36:20 GMT Server: Apache/2.2.14 (Win32) Lungimea conținutului: 230 Tipul conținutului: text/html; charset=iso-8859-1 Conexiune: închisă 400 Solicitare greșită Solicitare greșită
Browserul dvs. a trimis o solicitare pe care acest server nu a putut-o înțelege.
Linia de solicitare conținea caractere nevalide după șirul de protocol.
Obiectul descris este un instrument foarte util și puternic. Acest obiect are mai multe metode, descrierea lor este dată mai jos:
Colecții: Metode: Proprietăți: Răspuns.Colectare cookie-uriColecția de cookie-uri stabilește valori pentru cookie-uri. Dacă cookie-urile specificate nu există, le creează. Dacă cookie-ul există, acesta capătă o nouă valoare și o distruge pe cea veche.
Răspuns.Cookies(cookie) [(cheie) | . atribute ] = valoare
Opțiuni:
- cookie - Nume cookie
- cheie - Parametru opțional. Dacă este specificat, atunci cookie-ul este un director (imbricat) și cheia este un set de valori.
- atribute - Informații specificate despre cookie-urile în sine. Acest parametru poate fi unul dintre următoarele:
- valoare - Specifică valoarea care trebuie alocată acestei chei sau atribut.
Nume | Descriere |
Domeniu | Doar înregistrare. Dacă este specificat, cookie-urile sunt trimise numai la cererea din acest domeniu. |
Expiră | Doar înregistrare. Data la care expiră cookie-ul. Această dată trebuie setată pentru ca cookie-urile să fie scrise pe hard disk-ul clientului după încheierea sesiunii. Dacă acest atribut nu este setat, se presupune că data de expirare a cookie-ului este data curentă. Cookie-urile vor expira imediat după încheierea sesiunii. |
HasKey | Doar lectură. Indică dacă cookie-ul conține cheia dată. |
cale | Doar înregistrare. Dacă este specificat, cookie-urile sunt trimise numai la cerere din această cale. Dacă parametrul nu este setat, se utilizează calea către aplicație. |
Sigur | Doar înregistrare. Indică dacă cookie-urile vor fi protejate sau nu. |
Cometariu:
Dacă cookie-ul cheie este creat așa cum se arată în următorul script,
atunci va fi trimis următorul antet:
Set-Cookie:MYCOOKIE=TYPE1=zahăr&TYPE2=cookie-uri
Dacă atribuiți o valoare mycookie fără a utiliza chei, atunci această acțiune va distruge cheile de tip1 și tip2. De exemplu:
În exemplul anterior, cheile tip1 și tip2 vor fi distruse, iar valorile lor se vor pierde. Mycookie va conține acum valoarea marshmallow de ciocolată.
De asemenea, puteți verifica existența unei chei specifice în felul următor:
Dacă este afișat TRUE, atunci o astfel de cheie există; dacă FALSE, nu există.
Răspuns.Metoda de scriereRăspuns.Scrieți variabilă_sau_valoare
Opțiuni:
- variable_or_value - Date care vor fi afișate pe ecranul browserului prin HTML. Acest parametru poate fi de orice tip acceptat de VisualBasic Scripting Edition. Adică datele pot fi de următoarele tipuri: dată, șir, caracter, valori numerice. Valoarea acestui parametru nu poate conține combinația %>. În schimb, puteți utiliza combinația echivalentă %\>. Serverul web va converti această secvență în cea necesară când scriptul este executat.
Următorul exemplu arată cum funcționează metoda Response.write pentru a scoate un mesaj către client.
Îți spun doar: Și numele tău
Următorul exemplu adaugă o etichetă HTML la o pagină web. Deoarece această metodă nu poate conține combinația %>, folosim secvența %\>. Deci un exemplu de script:
Ieșirea va fi linia: