python爬取學習通題庫(爬蟲爬取題庫)

本文目錄一覽:

python爬取學習通考試題庫是真的嗎?是騙人的嗎?

學習通是一個手機APP,那麼就會通過http協議傳輸數據,只要通過手機抓包,得到網絡請求地址和cookie等驗證信息,就可以通過python去模擬請求。

理論上是可以得到題目的網絡請求,然後使用python模擬請求獲取的。不是騙人的。

爬取某筆公考app公基題庫的操作

最近在準備上岸,備考中需做大量的練習,手機APP讓練習無處不在,但有個缺點,就是每次只能練習10-20道題目,不能用題海戰術,海量做題。能不能把網站的題庫及解析都弄下來,在本地電腦上做題呢?以下是我的思路:1、分析並爬取手機軟件的題庫;2、調整好格式存入xls文件中;3、導入PC版可自定義的考試系統中(如教之初考試系統免費版);4、自行設置考試模式,海量練習。

倒騰了兩天,終於搞定,後續再更新文章!

涉及到幾個點。

1、關於手機網絡數據的分析,我是用Fiddler 4進行的分析。

2、關於excel表格的操控,之前想用xlwings模塊,後因沒裝office,用的是wps2013政府閹割版,無法操控,後改用xlrd、xlutils、shutil、os模塊自己寫了一個excel操縱類對象,發現還是有問題,後卸載閹割版wps,換了wps2016最新版的,就可以操作了。後來也沒換xlwings模塊了,將就着用自寫模塊。 大坑:xlrd模塊好像不支持中文路徑,全部換用英文路徑,最後再把文件夾及文件名轉換成中文的。

3、題庫分類保存。

1、Fiddler抓包手機APP的網絡請求

Fiddler是一款非常流行並且實用的http抓包工具,它的原理是在本機開啟了一個http的代理服務器,然後它會轉發所有的http請求和響應,不僅如此,它還可以支持請求重放等一些高級功能。顯然它是可以支持對手機應用進行http抓包的。

設置在同一局域網下電腦端Fiddler抓取手機APP應用網絡請求的步驟:

(1)電腦端啟動Fiddler,打開菜單欄中的 Tools Fiddler Options,打開“Fiddler Options”對話框。

(2)在Fiddler Options”對話框切換到“Connections”選項卡,然後勾選“Allow romote computers to connect”後面的複選框,然後點擊“OK”按鈕。( 小技巧: HTTPS標籤中可以設置下拉框為…from remote clients only , 貌似 就只接收遠程端的網絡請求了)

(3)在電腦端的命令行輸入:ipconfig,找到本機的ip地址。(我的局域網IP:192.168.1.10)

(4)在手機端,打開android設備的“設置”-“WLAN”,找到你要連接的網絡,在上面長按,然後選擇“修改網絡”,彈出網絡設置對話框,然後勾選“顯示高級選項”。 (其實蘋果手機也是類似的)

(5)在“代理”後面的輸入框選擇“手動”,在“代理服務器主機名”後面的輸入框輸入電腦的ip地址,在“代理服務器端口”後面的輸入框輸入8888,然後點擊“保存”按鈕。

(6)然後啟動android設備中的APP應用,在fiddler中可以看到完整的請求和響應數據。

2、手機APP應用網絡數據分析

手機上打開某筆公考軟件後,從Fiddler左側欄中可以看到大量的請求鏈接。

點擊上圖黃色區域的鏈接,可看到右側詳細數據。

在右側詳細數據欄中,我們可以看到請求的網址:POST http:// xxx bi.com/android/sydw/exercises?platform=android22version=6.4.3vendor=Tencentapp=gwydeviceId=F4J/K8kXx6+C24yqFuzAiA==av=8kav=3 HTTP/1.1

post請求的參數keypointId=621638type=3limit=15

返回的數據為Json格式,從返回數據中我們可以找出questionIds對應的題目編號,如2084744.

點擊上上圖(Fiddler網絡請求響應)中紅色框中的鏈接地址,我們可以看到右側詳細數據欄的數據

從上圖中我們可以找到ID號為2084744的題目的題干、選項、題型、答案等有用數據。

分析基本結束,此手機APP應用的模式基本是這樣:先請求15道題的ids,再根據meidaoti的ids請求題目相關數據。後續測試發現,請求questionIds時,修改參數,能一次最多請求到100道題的ids。

另外,從左側請求鏈接可以找出對應的章節分類請求鏈接,根據分類號再查找對應的questionids,就可以把所有的題目抓取出來。

3、xls操控

將就着基於xlrd模塊編寫自用模塊。

源碼在此,可能格式錯亂。需整理。

”’python

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

“””

Created on 2018-05-14 12:48:07

@author: wangzheng

Sys_Env : Windows_AMD64 Python3.5.2

Wechat : hrcl2015(微信)

Filename: MyXls.py

Description : xls文件操控類MyXls

            注意:文件路徑中不能有中文名,否則出錯

“””

from xlrd import open_workbook

from xlutils.copy import copy

import os,shutil

class MyXls:

    def __init__(self,fpath=None,modelfpath=None,sheetindex=None,protectrow=None,overwrite=True):

        self.openxlspath=”#已打開的xls文件

        self.sheetindex=None#當前工作表索引

        self.rb=None#

        self.wb=None#workbook工作簿

        self.ws=None#worksheet工作表

        self.headrow=0#開頭保護行數

        if (fpath is not None) and (modelfpath is not None):

            self.open_copy_xls(modelfpath,fpath,True)

        elif fpath is not None:self.open_xls(fpath)

        if sheetindex is not None:self.get_sheet(sheetindex)

        if protectrow is not None:self.headrow=protectrow

    def open_xls(self,fpath):

        path=fpath

        try:

            rb = open_workbook(path)

        except Exception as err:

            print(“File not exists: “+str(err))

            return False

        #通過sheet_by_index()獲取的sheet沒有write()方法

        #rs = rb.sheet_by_index(0)

        #rs = rb.sheet_by_name(‘sheet 1’)

        self.wb = copy(rb)

        self.openxlspath=path

        return True

    def get_sheet(self,sheet_index=0):

        sheets=sheet_index

        #通過get_sheet()獲取的sheet有write()方法

        self.ws = self.wb.get_sheet(sheets)

        self.sheetindex=sheets

    def write_xls(self,row_index,column_index,data_str):

        row,col,data=row_index,column_index,data_str

        #寫入數據

        self.ws.write(row,col,data)#write(行,列,內容),索引從0開始

    def write_xls_bycolname(self,row_index,column_name,data_str):

        column_index=self.colname_to_num(column_name)

        row,col,data=row_index,column_index,data_str

        #寫入數據

        self.ws.write(row,col,data)#write(行,列,內容),索引從0開始

    def write_xls_bysheet(self,sheetindex,row_index,column_name,data_str):

        ”’在指定工作表的指定行列表格中寫入數據”’

        if self.sheetindex != sheetindex :self.get_sheet(sheetindex)

        self.write_xls_bycolname(row_index,column_name,data_str)

    def save_xls(self,fpath=None):

        if fpath is None:

            self.wb.save(self.openxlspath)

            print(‘saved ‘+self.openxlspath)

        else:

            path=fpath

            self.wb.save(path)#保存xls文件

            print(‘saved ‘+path)

        return True

    def open_copy_xls(self,model_fpath,new_fpath,overwrite=True):

        ”’參照模板文件,複製並打開xls文件”’

        if os.path.exists(model_fpath) :

            new_fpath=self.auto_mkdir(new_fpath)

            if (not os.path.exists(new_fpath)) or overwrite:

                #print(‘copy[%s]to[%s]’%(model_fpath,new_fpath))

                shutil.copy(model_fpath,new_fpath)

                return self.open_xls(new_fpath)

            else:print(‘新文件已存在,請修改新文件名!’);return False

        else:print(‘模板文件不存在,不能複製到新文件!’);return False

    def num_to_colname(self,col_index,start=0):

        #列索引轉列名,基數start從0開始,0–A

        if type(col_index) != int:

            return col_index

        if start==0:

            x=col_index+1

        elif start==1:

            x=col_index

        s=”

        flag=False#借位標誌

        while x26:

            y=x%26#取餘0-25

            if y==0:y=26;flag=True;

            d=chr(y+64)#低位

            s=d+s

            x=x//26#整除取商

            if flag:x=x-1;flag=False;#如果借位,商要先-1

        g=chr(x+64)#高位

        s=g+s

        return s

    def colname_to_num(self,colname,start=0):

        #列名轉列索引 A–0,B-1,開始基數start為0

        if type(colname) is not str:

            return colname

        colname=colname.upper()#轉成大寫

        col = 0

        power  = 1

        #print(len(colname))#位數

        for i in range(len(colname) – 1, -1, -1):#range(start=0,stop,step=1)

            ch = colname[i] #倒序取字母

            #print(ch)#所在位上的字母

            col += (ord(ch) – ord(‘A’) +  1 ) * power

            power *= 26

        #print(col-1)

        if start==0:return col-1

        if start==1:return col

    def auto_mkdir(self,fpath):

        ”’自動補全目錄,目錄不存在就創建目錄”’

        #fpath=’D:\\MyPython\\粉筆公考題庫提取\\678\\980\\test.txt’

        fpath=fpath.replace(‘\\’,’/’)

        if not os.path.exists(fpath):

            plst=fpath.split(sep=’/’)

            path=”

            if not fpath.endswith(‘/’):plst=plst[:-1]

            for p in plst:

                path=path+p+’/’

                if not os.path.exists(path):os.mkdir(path)

            return fpath

if __name__==’__main__’:

    model_fpath=’D:\\MyPython\\model.xls’

    new_fpath=’D:\\MyPython\\abc\\123/out.xls’

#    myxls=MyXls()

#    myxls.open_copy_xls(model_fpath,new_fpath)

#    myxls.get_sheet(0)

    myxls=MyXls(new_fpath,model_fpath,2,3)

    myxls.write_xls_bycolname(6,’K’,’K列6行數據’)

#    myxls.save_xls(new_fpath)

    myxls.save_xls()

    pass

”’

4、文件保存

保存成xls文件,和txt文件,txt文件再轉換成word文檔打印出來。大概有7個大類,100+小類,12737道題。

5、導入題庫軟件

xls文件導入題庫中。

6、大功告成

PS:某筆app更新後,加入了防抓取數據的功能,貌似安卓5.1以上的都不能抓取了。

據資深網友反應,使用安卓模擬器(系統版本4.4)還可以抓到明文數據,有興趣的讀者可以試一試。

如何用Python爬取數據?

方法/步驟

在做爬取數據之前,你需要下載安裝兩個東西,一個是urllib,另外一個是python-docx。

請點擊輸入圖片描述

然後在python的編輯器中輸入import選項,提供這兩個庫的服務

請點擊輸入圖片描述

urllib主要負責抓取網頁的數據,單純的抓取網頁數據其實很簡單,輸入如圖所示的命令,後面帶鏈接即可。

請點擊輸入圖片描述

抓取下來了,還不算,必須要進行讀取,否則無效。

請點擊輸入圖片描述

5

接下來就是抓碼了,不轉碼是完成不了保存的,將讀取的函數read轉碼。再隨便標記一個比如XA。

請點擊輸入圖片描述

6

最後再輸入三句,第一句的意思是新建一個空白的word文檔。

第二句的意思是在文檔中添加正文段落,將變量XA抓取下來的東西導進去。

第三句的意思是保存文檔docx,名字在括號裡面。

請點擊輸入圖片描述

7

這個爬下來的是源代碼,如果還需要篩選的話需要自己去添加各種正則表達式。

雲題庫怎麼爬取答案

利用python進行爬取。

具體步驟如下:1、利用requests庫的get方法來獲取網頁內容。

2、利用BeautifulSoup庫來解析。

3、將解析的網頁答案保存在文件即可。

如何使用python爬蟲如何爬取米思米案例庫?請大神來幫忙1

背景:首先對於登錄頁面,你作為普通人類,是怎麼需要輸入賬號和密碼,才能登錄後,查看到頁面的。

用selenium:那麼就是讓selenium去定位到對應的賬號輸入框和密碼輸入框,分別輸入賬號和密碼,再定位到登錄按鈕,點擊登錄。即可模擬人類去登錄,登錄後頁面刷新,看到你要的內容。

你要處理的內容,屬於爬蟲領域。

所以你最好先去了解背景知識:

先去搞懂爬蟲基礎:

前言 · 爬取你要的數據:爬蟲技術

再去了解如何用Python寫:

如何用Python寫爬蟲

最後再參考

心得和總結 · Selenium知識總結

估計會用到find_element_by_id或find_element_by_xpath等方面的函數去定義你的輸入框或按鈕。

學習通題庫在哪裡找

一般是獲取不到的。

這個通常是老師或者學校會設置好,在布置的任務中會有題目出現,自己想要獲取一般不太可能。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/196329.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-03 09:55
下一篇 2024-12-03 09:55

相關推薦

  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29

發表回復

登錄後才能評論