app手機(jī)網(wǎng)站模板免費(fèi)下載網(wǎng)站seo外包公司有哪些
在爬學(xué)校安全教育題庫的時(shí)候發(fā)現(xiàn)題庫分頁實(shí)際上執(zhí)行了一段js代碼,如下圖所示
點(diǎn)擊下一頁時(shí)是執(zhí)行了函數(shù)doPostBack,查看頁面源碼如下
點(diǎn)擊下一頁后這段js提交了一個(gè)表單,隨后后端返回對(duì)應(yīng)數(shù)據(jù),一開始嘗試分析獲取對(duì)應(yīng)兩個(gè)參數(shù),封裝在data中通過POST請求獲得新的一頁,后面嘗試了很久始終不成功…(肯定是因?yàn)樘?#xff09;
沒辦法只能使用神器selenium,缺點(diǎn)是要調(diào)用瀏覽器,肯定是比較慢的,但是python直接給你模擬瀏覽器的各種操作,而且不用抓包分析,比較方便。所以還是偷偷懶,注意,除了python要安裝selenium之外,還需要安裝對(duì)應(yīng)瀏覽器的web驅(qū)動(dòng),這里我用的是谷歌瀏覽器,驅(qū)動(dòng)下載地址:
鏡像:https://registry.npmmirror.com/binary.html?path=chromedriver/
如果你谷歌版本新,鏡像上可能沒有對(duì)應(yīng)版本。
官網(wǎng):https://sites.google.com/chromium.org/driver/downloads(117以上在這里找:這里~)
下載好后就是正常的爬蟲步驟,直接看代碼吧:
import docx
from selenium import webdriver
import html2text
import timeidx = [4, 5, 9, 10, 11, 13, 14, 15, 16]
srcsel = 'xxxx/Web/userSingle.aspx?ID=' # 選擇題
srcjg = 'xxxx/Web/userIs.aspx?ID=' # 判斷題def remove_tags(text):h = html2text.HTML2Text()h.ignore_links = Truereturn h.handle(text)def process(url):driver = webdriver.Chrome()driver.get(url)res = driver.find_element("id", 'GridViewx').get_attribute('innerHTML')res = remove_tags(res)doc.add_paragraph().add_run(res)pages = int(driver.find_element("id", 'GridViewx_ctl13_lblPageCount').text)# pages = 2for i in range(pages - 1):time.sleep(1.5)driver.find_element("id", 'GridViewx_ctl13_btnNext').click()res = driver.find_element("id", 'GridViewx').get_attribute('innerHTML')res = remove_tags(res)doc.add_paragraph().add_run(res)driver.quit()doc = docx.Document('res.docx')
for pid in idx:process(srcsel + str(pid))time.sleep(3)process(srcjg + str(pid))
doc.save('res.docx')
為什么多此一舉用html2text呢?因?yàn)榘l(fā)現(xiàn)這樣寫又能比較好看(和丑的比起來)還不用自己一條數(shù)據(jù)一條數(shù)據(jù)取出來排版。然后代碼里我直接寫進(jìn)word文檔里了,這里有個(gè)小坑,你的word文檔(docx)中必須得有東西,不能是空的,要不然會(huì)報(bào)錯(cuò)…