python--實踐--模擬瀏覽器(http)登陸


#方法一:直接使用coookies登陸,此方法需要提前在瀏覽器中使用賬號密碼登陸后,獲取瀏覽器中的cookies,在構造的請求中攜帶這個cookies(缺點是有時效性)。

#方法二:通過賬號密碼(From data)登陸,在登陸后獲得其中的cookies,之后的對需要登陸的頁面操作,只需要攜帶這個cookies即可

 

 1 #以下代碼是利用方法1
 2 # -*- coding: utf-8 -*-
 3 import requests;
 4 import sys;
 5 import io;
 6 #重點:標准解析庫
 7 from bs4 import BeautifulSoup;
 8 sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8'); #改變標准輸出的默認編碼
 9 #根據cookies訪問后台
10 url = 'http://域名/other/other.comment.wall.php?ac=l&id=&fid=&uid=&title=&source=0&status=0&b_time=&e_time=';
11 
12 #瀏覽器登錄后得到的cookie,也就是剛才復制的字符串
13 cookie_str = r'PHPSESSID=9f20c6bb676841f38aee8589aceb5c7f; username=zhonghuihong; password=XXX';
14 #把cookie字符串處理成字典,以便接下來使用
15 cookies = {};
16 for line in cookie_str.split(';'):
17 key, value = line.split('=', 1);
18 cookies[key] = value;
19 #設置請求頭,直接復制即可
20 headers = {'User-agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36'};
21 疑問:請求頭header是不是必須要加
22 搜羅網上的答復:
23 ①、不加,直接裸着請求url,似乎也沒有報錯,自己嘗試也是這樣
24 ②、防止封ip,加上准沒錯
25 ③、禁止反扒機制,輸出的text信息中會出現抱歉,無法訪問等字眼,這就是禁止爬取(headers是解決requests請求反爬的方法之一,相當於我們進去這個網頁的服務器本身,假裝自己本身在爬取數據)
26 ④、作為一個良好的習慣,最好都要加上
27  
28 疑問二:請求頭里面已經含有cookies,請求時是否還要重復添加一個cookies=cookies參數
29 根據自己的實踐:不需要重復添加
30  
31  
32 疑問三:為什么訪問android端的接口基本不用提前設置header
33 header里面是手機端信息,通過手機端頁面去爬不會那么容易被封(這個是詢問網友來着,至今不知道原因),根據目前實踐確實不需要
34  
35  
36 #在發送get請求時帶上請求頭和cookies()
37 resp = requests.get(url, headers = headers, cookies = cookies);
38 html_resp=resp.content.decode('UTF-8'); 
39 #print(resp.content.decode('utf-8'));
40 soup_string = BeautifulSoup(html_resp, 'html.parser');
41 soup_table=soup_string.find(attrs={'class':'table table-striped table-bordered table-hover'});
42 #print(soup_table);
43 soup_str=soup_table.findAll(attrs={'style':'text-align:center;vertical-align:middle;word-break:break-all; word-wrap:break-all;'});
44 print(soup_str);
45 #for soup in soup_str:
46 #print(soup.string);
47 #book_div = soup_string.find(attrs={"id":"book"})
48 #book_a = book_div.findAll(attrs={"class":"title"})
49 #for book in book_a:
50 #print book.string
51 #print(soup_string);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM