crawler - 如何在 Python 爬蟲中完成 JavaScript 函數(shù)翻頁(yè)?
問(wèn)題描述
本人爬取一個(gè)網(wǎng)頁(yè)時(shí)注意到它的翻頁(yè)時(shí)靠這樣的一個(gè)函數(shù)實(shí)現(xiàn)的, 翻頁(yè)之后頁(yè)面網(wǎng)址也不變:
<input name='goto2' onclick='dirGroupMblogToPage(document.getElementById(’dirGroupMblogcp2’).value)' type='button' value='Go'/> </input> function dirGroupMblogToPage(currentPage){ jQuery.post('dirGroupMblog.action', {'page.currentPage':currentPage,gid:MI.TalkBox.gid}, function(data){$('#talkMain').html(data);window.scrollTo(0, $css.getY(MI.talkList._body)-65); });}
寫了這樣的函數(shù)試圖實(shí)現(xiàn)翻頁(yè):
def login_page(login_url, content_url, usr_name='******@126.com', passwd='******'): # 實(shí)現(xiàn)登錄, 返回Session對(duì)象和獲得的頁(yè)面 post_data = {’r’: ’on’, ’u’: usr_name, ’p’: passwd} s = requests.Session() s.post(login_url, post_data) r = s.get(content_url) return s, rdef turn_page(s, next_page, content_url): post_url = 'http://sns.icourses.cn/dirGroupMblog.action' post_headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36','X-Requested-With':'XMLHttpRequest'} post_data = {'page.currentPage': next_page, 'gid': 2632} s.post(post_url, data=post_data, headers = post_headers) res = s.get(content_url) return res
但是調(diào)用turn_page()之后沒能實(shí)現(xiàn)翻頁(yè)。請(qǐng)問(wèn)應(yīng)該怎么解決這個(gè)問(wèn)題? 另外請(qǐng)問(wèn)想要解決好這類問(wèn)題需要自學(xué)哪些方面的知識(shí)呢?謝謝!
問(wèn)題解答
回答1:推薦使用 selenium
例如,如果需要點(diǎn)擊界面上,下一頁(yè)的按鈕,或者說(shuō)需要輸入上下左右鍵,頁(yè)面可以翻頁(yè),selenium webdriver可以做到,給出一個(gè)參考(我以前用來(lái)爬起點(diǎn)中文網(wǎng)的小說(shuō))
selenium 可以與頁(yè)面進(jìn)行交互,單擊,雙擊,輸入,等待頁(yè)面加載(隱式等待,和顯式等待)。。。。
from selenium import webdriver# from selenium.webdriver.common.keys import Keys#driver = webdriver.PhantomJS(executable_path='D:phantomjs-2.1.1-windowsbinphantomjs')# 我的windows 已配置環(huán)境變量,不需指定 executable_path,使用 Chrome需要對(duì)應(yīng)的瀏覽器以及驅(qū)動(dòng)程序driver = webdriver.Chrome()# url 為你需要加載的頁(yè)面urlurl = ’http://sns.icourses.cn/*****’# 打開頁(yè)面driver.get(url)# 在你的例子中,是需要點(diǎn)擊 button ,通過(guò)class 屬性獲取到button,然后執(zhí)行單擊 .click()# 如果需要準(zhǔn)確定位,可以自行搜索其他的 find_driver.find_element_by_class_name('buttonJump').click()# selenium webdriver 還有很多其它高級(jí)的用法,自行谷歌,你這個(gè)問(wèn)題,搜索應(yīng)該是能得到答案的,回答2:
分幾種情況,1、頁(yè)面上通過(guò) js 效果實(shí)現(xiàn)滑動(dòng)或者點(diǎn)擊實(shí)現(xiàn)翻頁(yè);2、頁(yè)面上通過(guò)超鏈接點(diǎn)擊實(shí)現(xiàn)翻頁(yè);
可以通過(guò) chrome 的開發(fā)者工具中的 network 分析得到結(jié)果反會(huì)的是 html 頁(yè)面還是反饋 json 渲染。json 的話就好辦了,直接拿結(jié)果。普通html 頁(yè)面需要使用正則匹配到換頁(yè)。然后將鏈接放入待爬的池子中。
/a/11...
相關(guān)文章:
1. javascript - 有什么比較好的網(wǎng)頁(yè)版shell前端組件?2. sql語(yǔ)句 - mysql中關(guān)聯(lián)表查詢問(wèn)題3. javascript - 原生canvas中如何獲取到觸摸事件的canvas內(nèi)坐標(biāo)?4. css - div外層有一圈白色5. javascript - [js]為什么畫布里不出現(xiàn)圖片呢?在線等6. javascript - vscode alt+shift+f 格式化js代碼,通不過(guò)eslint的代碼風(fēng)格檢查怎么辦。。。7. javascript - 如何將一個(gè)div始終固定在某個(gè)位置;無(wú)論屏幕和分辨率怎么變化;div位置始終不變8. html - vue項(xiàng)目中用到了elementUI問(wèn)題9. javascript - iframe 為什么加載網(wǎng)頁(yè)的時(shí)候滾動(dòng)條這樣顯示?10. javascript - 求解答:實(shí)例對(duì)象調(diào)用constructor,此時(shí)constructor內(nèi)的this的指向?
