python项目之古诗文网
生活随笔
收集整理的這篇文章主要介紹了
python项目之古诗文网
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
一、學習資源
二、分析
1、先找登錄口,也就是什么情況下允許登錄。
2、打開網頁源碼找參數
?3、獲取圖片驗證碼
4、登錄 (有坑)
?5、成功登錄
?三、項目源碼
一、學習資源
尚硅谷Python爬蟲教程小白零基礎速通(含python基礎+爬蟲案例)_嗶哩嗶哩_bilibili
二、分析
1、先找登錄口,也就是什么情況下允許登錄。
? ? ? ? 首先打開古詩文網站的官網,先檢查網頁(F12或者右鍵點擊檢查)然后登錄,此時輸入錯誤的密碼(切記),不是要真正的登錄進去,而是為了找登陸口。通過找登陸接口(login)發現,登錄的時候需要的參數有很多。#觀察到 __VIEWSTATE, __VIEWSTATEGENERATOR ,code 三個是一個可以變化的量。
2、打開網頁源碼找參數
觀察到這兩個數據在頁面的源碼中 所以我們需要獲取頁面的源碼 然后進行解析就可以獲取了?3、獲取圖片驗證碼
4、登錄 (有坑)
? ? ? ? 此時登錄所需要的數據全部獲取到了,接下來就是登錄了
? ? ? ? 此時登錄時發現驗證碼是錯誤的,因為第一次請求下載圖片和下一次返回的信息的驗證碼不是一個了,相當于動態的驗證碼已經換了一個了,但是下載的是前一個。
?5、成功登錄
此時有個小問題,當程序運行的時候,左邊的圖片加載沒那么快,稍微等會就可以了或者去到本地文件中去看
?
?三、項目源碼
# coding=utf-8 #通過登錄 然后進入到主頁面#(1)先找登錄接口,也就是什么情況下才允許登錄 #(2)通過找登錄接口(login)發現,登錄的時候需要的參數很多 # __VIEWSTATE: eVgBnMThU95H2Pnl+vX1f9AtwKsdvG99QKbMzfVZkHrYs5+4t+83zenZVqGsl6OIio5aS2fojk1glAHlUuvNmBw0hw3MnKMSWrQV7jGNj0MJo6Cam0SUg+TW454= # __VIEWSTATEGENERATOR: C93BE1AE # from: http://so.gushiwen.cn/user/collect.aspx # email: 595165358@qq.com #用戶名 # pwd: action #密碼 # code: B3FP #驗證碼 # 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 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36" } #獲取頁面的源碼 response = requests.get(url=url,headers=headers) content = response.text #輸出內容看有沒有需要的數據,判斷有沒有反爬 # print(content) #解析頁面源碼,獲取__VIEWSTATE __VIEWSTATEGENERATOR from bs4 import BeautifulSoup soup = BeautifulSoup(content,'lxml') #獲取__VIEWSTATE viewsdate = soup.select('#__VIEWSTATE')[0].attrs.get('value')#返回的是個列表 #獲取__VIEWSTATEGENERATOR viewsdategenerator = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')#獲取驗證碼圖片 code = soup.select('#imgCode')[0].attrs.get('src') code_url = 'https://so.gushiwen.cn' + code# #有坑 # import urllib.request # urllib.request.urlretrieve(url=code_url,filename='code.jpg')#requests里面有一個方法 session() 通過session的返回值 就能使用請求變成一個對象session = requests.session() #驗證碼url的內容 response_code = session.get(code_url) #注意 此時要使用二進制數據 因為我們要使用的是圖片的下載 content_code = response_code.content #wb的模式就是將二進制數據寫入到文件 with open('code1.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': viewsdate,'__VIEWSTATEGENERATOR': viewsdategenerator,'from': 'http://so.gushiwen.cn/user/collect.aspx','email': '17671886917' , #用戶名'pwd': '123456789', #密碼'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)#難點 #(1)隱藏域 #(2)驗證碼總結
以上是生活随笔為你收集整理的python项目之古诗文网的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 神马是引用
- 下一篇: 写一个函数,使给定的一个二维数组(3×3