举例用Python爬取科目四考试题库的详细方法
這篇文章僅提供參考
考駕駛證這是多少人的噩夢,小編就懼怕考證,不敢想象“馬路女殺手”在我這里會不會升級成“上手車沒人沒”,我的父親大人,他用他堅強的毅力連續報考了六次,這中間的過程我不知道是有多殘忍,就在去年度過劫難考到證,就差擺一桌慶祝了,啊~艱難的考證之路,進入主題
1、環境
PyCharm
Python 3.6
谷歌瀏覽器
pip安裝的依賴包包括:requests 2.25.0、urllib3 1.26.2、docx 0.2.4、python-docx 0.8.10、lxml 4.6.2
2、目標網站及請求分析
駕駛員考試網站
從上圖中,可以看到科目四共有1487道題目,為了將所有的題目匯總到一個Word文檔中,需要獲取到每道題的文本和圖片。
首先,打開谷歌瀏覽器訪問上述網站,鍵盤按F12,點擊Network,點擊左側題目中的向右箭頭,一直點擊下一道題,不斷發起請求,在右側可以看到每個題目的請求鏈接中只有五位字符的考試碼不一樣,所以我們要想辦法獲取每道題目的考試碼。
點擊其中的一個請求,在Headers中可以看到題目請求的url網址和狀態,在Preview中可以看到題目的相關信息。
然后用谷歌瀏覽器打開上述網站,然后鍵盤按F12,點擊sources,點擊左側Page下tk.mnks.cn下的lianxitix下的文件夾,可以看到Exam的相關變量信息,其中ExamCodes就是1487道題所對應的考試碼。
3、Python代碼
完整代碼如下:
import requests import time import urllib.request import docx #創建內存中的word文檔對象 from docx.shared import Pt from docx.enum.text import WD_PARAGRAPH_ALIGNMENTdef download_img(img_url,imgname):request = urllib.request.Request(img_url)try:response = urllib.request.urlopen(request)img_name = imgname+'.gif'filename = "D:\\Program Files (x86)\\PyCharm Community Edition 2020.1.1\\PaQukemu4tiku\\folder\\imgpath\\" + img_nameif (response.getcode() == 200):with open(filename, "wb") as f:f.write(response.read()) # 將內容寫入圖片return filenameexcept:return "failed"file = docx.Document() headers ={ 'Connection': 'close' } for i in range(0, ExamCount):ExamCodei=ExamCodes[i]urlselecti = 'https://tkdata.mnks.cn/ExamData/'+ ExamCodei +'.json?CALL=?20201231143735.json' #選擇題responsei = requests.get(urlselecti, headers=headers,timeout=50,verify=False)resulti = responsei.json()ExamTi = resulti['tm'].split('<br/>')if(len(ExamTi) > 1):print(str(i+1)+'、'+ExamTi[0] + ' 答案:' + resulti['da'] + '\n ' + ExamTi[1] + ' ' + ExamTi[2] + ' ' + ExamTi[3] + ' ' + ExamTi[4])file.add_paragraph(str(i+1)+'、'+ExamTi[0] + ' 答案:' + resulti['da'])if (resulti['tv'] != ''):ExamTiimg = resulti['tv'].split('/')ExamTiimgurl = 'https://sucimg.itc.cn/sblog/' + ExamTiimg[2]print(ExamTiimgurl)download_img(ExamTiimgurl, ExamTiimg[2])paragraph = file.add_paragraph() # 圖片居中設置paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTERrun = paragraph.add_run("")run.add_picture("D:\\Program Files (x86)\\PyCharm Community Edition 2020.1.1\\PaQukemu4tiku\\folder\\imgpath\\" + ExamTiimg[2] + '.gif')file.add_paragraph(' '+ExamTi[1] + ' ' + ExamTi[2] + ' ' + ExamTi[3] + ' ' + ExamTi[4])else:print(str(i+1)+'、'+resulti['tm'] + ' 答案:' + resulti['da'])file.add_paragraph(str(i+1)+'、'+resulti['tm'] + ' 答案:' + resulti['da'])if (resulti['tv'] != ''):ExamTiimg = resulti['tv'].split('/')ExamTiimgurl = 'https://sucimg.itc.cn/sblog/' + ExamTiimg[2]print(ExamTiimgurl)download_img(ExamTiimgurl, ExamTiimg[2])paragraph = file.add_paragraph() # 圖片居中設置paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTERrun = paragraph.add_run("")run.add_picture("D:\\Program Files (x86)\\PyCharm Community Edition 2020.1.1\\PaQukemu4tiku\\folder\\imgpath\\" + ExamTiimg[2] + '.gif')#time.sleep(1) file.save("D:\\Program Files (x86)\\PyCharm Community Edition 2020.1.1\\PaQukemu4tiku\\folder\\C1科目四1487題.docx") #保存4、運行結果
在項目文件夾下folder中imgpath保存所有題目的圖片,C1科目四1487題.docx就是運行結果。打開Word文檔進行查看:
word文檔可另存為pdf
與科目一不同的是,科目四里很多選擇題中的圖片是動態的GIF圖,而不是靜態的png,所以題目保存到Word中后圖片并不會動態顯示,因此,考慮將Word文檔另存為網頁文件(.html)
結果(包含動畫)如下圖所示:
免費:Python資源共享+視頻課堂+電子書籍點一下有驚喜
到此這篇關于Python爬取科目四考試題庫的方法實現的文章就介紹到這了,祝現在就在考證的朋友們一次就能過關,更多相關Python基礎學習資源分享可以看小編主頁關注小編。
總結
以上是生活随笔為你收集整理的举例用Python爬取科目四考试题库的详细方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网钛CMS PHP版源码(内置小刀模板)
- 下一篇: PC微信快捷聊天助手小工具