1. 程式人生 > 其它 >爬蟲_request_cookie登入(驗證碼)

爬蟲_request_cookie登入(驗證碼)

#通過登入然後進入到主頁面

# 通過找登入介面我們發現登入的時候需要的引數很多
# __VIEWSTATE: Q9zeukk7PE5h9KCMT1uBtHMfNp6+Kfkwk5KywR928SJ/NJwdBGx04xq662yh/fA3/UuhXe7hlF0C19KQ3PHIFzj37k4o/UHDvS7o/9a9hYtuGlQcQDUlyasgnsk=
# __VIEWSTATEGENERATOR: C93BE1AE
# from: http://so.gushiwen.cn/user/collect.aspx
# email: [email protected]
# pwd: ********
# code: f8ko
# denglu: 登入 # __VIEWSTATE、__VIEWSTATEGENERATOR、code 是一個可以變化的量 # 難點: # (1)__VIEWSTATE、__VIEWSTATEGENERATOR 一般情況看不到的資料都是在頁面的原始碼中 # 我們觀察到這兩個資料在頁面的原始碼中,所以我們需要獲取頁面的原始碼,然後進行解析就可以獲取了 # (2)驗證碼 import requests # 這是登入介面的url地址 url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx
' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36' } # 獲取頁面的原始碼 response = requests.get(url=url,headers=headers) content = response.text # 解析頁面原始碼 獲取__VIEWSTATE、__VIEWSTATEGENERATOR 的值 from bs4 import BeautifulSoup soup
= BeautifulSoup(content,'lxml') # 獲取__VIEWSTATE值 viewstate = soup.select('#__VIEWSTATE')[0].attrs.get('value') # 獲取__VIEWSTATEGENERATOR值 viewstategenerator = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value') print('viewstate>>',viewstate) print('viewstategenerator>>',viewstategenerator) # 獲取驗證碼圖片 code = soup.select('#imgCode')[0].attrs.get('src') code_url = 'https://so.gushiwen.cn'+code print('code_url>>',code_url) #****有坑!!!! # import urllib.request # 下載圖片 # urllib.request.urlretrieve(url=code_url,filename='code.jpg') # 利用session將兩次請求地址變成一樣的 session = requests.session() # 驗證碼的url的內容 response_code = session.get(code_url) # 注意此時要使用二進位制資料,因為我們要使用的圖片的下載 content_code = response_code.content # wb的模式就是將二進位制資料寫入到檔案 with open('code.jpg','wb')as fp: fp.write(content_code) # 獲取了驗證碼的圖片後,下載到本地然後觀察驗證碼,觀察之後然後在控制檯輸入這個驗證碼就可以將這個值給 # code的引數,就可以登入 code_name = input('請輸入你的驗證碼') # 點選登入 url_post = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx' data_post = { '__VIEWSTATE': viewstate, '__VIEWSTATEGENERATOR': viewstategenerator, 'from': 'http://so.gushiwen.cn/user/collect.aspx', 'email': '[email protected]', 'pwd': '*********', 'code': code_name, 'denglu': '登入' } response_post = session.post(url=url,headers=headers,data=data_post) content_post = response_post.text with open('gushiwen.html','w',encoding='utf-8')as fp: fp.write(content_post)