日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
手把手教你寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)(5):PhantomJS實(shí)戰(zhàn)

本系列:

  • 《手把手教你寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)(1):網(wǎng)易云音樂(lè)歌單》
  • 《手把手教你寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)(2):迷你爬蟲(chóng)架構(gòu)》
  • 《手把手教你寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)(3):開(kāi)源爬蟲(chóng)框架對(duì)比》
  • 《手把手教你寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)(4):Scrapy入門(mén)》

大家好!從今天開(kāi)始,我要與大家一起打造一個(gè)屬于我們自己的分布式爬蟲(chóng)平臺(tái),同時(shí)也會(huì)對(duì)涉及到的技術(shù)進(jìn)行詳細(xì)介紹。大家如果有什么好的想法請(qǐng)多留言,多提意見(jiàn),一起來(lái)完善我們的爬蟲(chóng)平臺(tái)。在正式介紹平臺(tái)之前,先用一些篇幅對(duì)基礎(chǔ)篇做一點(diǎn)補(bǔ)充。模擬滾動(dòng)

這次的目標(biāo)是爬一個(gè)眾籌網(wǎng)站的所有項(xiàng)目,項(xiàng)目列表頁(yè)如下:https://www.kaistart.com/project/more.html。打開(kāi)后進(jìn)行分析,頁(yè)面顯示出10個(gè)項(xiàng)目:

如果想看到更多項(xiàng)目,并不能像網(wǎng)易云音樂(lè)那樣點(diǎn)“下一頁(yè)”翻頁(yè),而是需要向下拉滾動(dòng)條或者向下滾動(dòng)鼠標(biāo)滾輪來(lái)觸發(fā)異步請(qǐng)求。爬蟲(chóng)該如何應(yīng)對(duì)這種情況呢?我們可以使用selenium的api執(zhí)行js代碼將屏幕內(nèi)容滾動(dòng)到指定位置。

下面這段代碼會(huì)一直向下滾動(dòng)項(xiàng)目頁(yè),一直到滾不動(dòng)為止:

 
 
 
 
  1. # 一直滾動(dòng)到***部  
  2. js1 = 'return document.body.scrollHeight'  
  3. js2 = 'window.scrollTo(0, document.body.scrollHeight)'  
  4. old_scroll_height = 0  
  5. while browser.execute_script(js1) >= old_scroll_height:  
  6.     old_scroll_height = browser.execute_script(js1)  
  7.     browser.execute_script(js2)  
  8.     time.sleep(1) 

scrollTo() 方法可把內(nèi)容滾動(dòng)到指定的坐標(biāo):

參數(shù)描述
xpos必需。要在窗口文檔顯示區(qū)左上角顯示的文檔的 x 坐標(biāo)。
ypos必需。要在窗口文檔顯示區(qū)左上角顯示的文檔的 y 坐標(biāo)。

這里用到了scrollHeight,它和ClientHeight還有OffsetHeight有什么區(qū)別呢?

 

 
 
 
 
  1. browser = webdriver.PhantomJs()  
  2. url = 'https://www.kaistart.com/project/more.html'  
  3. try:  
  4.     browser.get(url)  
  5.     wait = ui.WebDriverWait(browser, 20)  
  6.     wait.until(lambda dr: dr.find_element_by_class_name('project-detail').is_displayed())   
  7.  
  8.     # 一直滾動(dòng)到***部  
  9.     js1 = 'return document.body.scrollHeight'  
  10.     js2 = 'window.scrollTo(0, document.body.scrollHeight)'  
  11.     old_scroll_height = 0  
  12.     while browser.execute_script(js1) >= old_scroll_height:  
  13.         old_scroll_height = browser.execute_script(js1)  
  14.         browser.execute_script(js2)  
  15.         time.sleep(1)  
  16.     sel = Selector(text=browser.page_source)  
  17.     proj_list = sel.xpath('//li[@class="project-li"]')  

 
 
 
 
  1. browser.save_screenshot(debug.png')  

這樣就會(huì)把圖片保存在項(xiàng)目目錄,打開(kāi)看看:

 

 
 
 
 
  1. browser = webdriver.Chrome() 

再次運(yùn)行程序,不出所料,Chrome瀏覽器彈出來(lái),不僅能夠正確顯示頁(yè)面,還一直在滾動(dòng):

項(xiàng)目全都刷出來(lái)了,想爬什么就爬吧!什么?你問(wèn)我在Linux服務(wù)器上怎么爬?純命令行的那種嗎?

 

 
 
 
 
  1. from selenium import webdriver  
  2. from pyvirtualdisplay import Display   
  3.  
  4. display = Display(visible=0, size=(800, 600))  
  5. display.start()  
  6. driver = webdriver.Chrome()  
  7. driver.get("http://www.baidu.com")  
  8. print (driver.page_source.encode('utf-8'))  
  9. driver.quit()  
  10. display.stop() 


網(wǎng)頁(yè)名稱:手把手教你寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)(5):PhantomJS實(shí)戰(zhàn)
網(wǎng)頁(yè)路徑:http://m.5511xx.com/article/cdsepdh.html