Scrapy基于selenium結(jié)合爬取淘寶的實(shí)例講解
在對于淘寶,京東這類網(wǎng)站爬取數(shù)據(jù)時(shí),通常直接使用發(fā)送請求拿回response數(shù)據(jù),在解析獲取想要的數(shù)據(jù)時(shí)比較難的,因?yàn)閿?shù)據(jù)只有在瀏覽網(wǎng)頁的時(shí)候才會(huì)動(dòng)態(tài)加載,所以要想爬取淘寶京東上的數(shù)據(jù),可以使用selenium來進(jìn)行模擬操作
對于scrapy框架,下載器來說已經(jīng)沒多大用,因?yàn)楂@取的response源碼里面沒有想要的數(shù)據(jù),因?yàn)闆]有加載出來,所以要在請求發(fā)給下載中間件的時(shí)候直接使用selenium對請求解析,獲得完整response直接返回,不經(jīng)過下載器下載,上代碼
from selenium import webdriver from selenium.webdriver.chrome.options import Options import time from scrapy.http.response.html import HtmlResponse from scrapy.http.response.text import TextResponse from selenium.webdriver import ActionChains class TaobaoMiddleware(object): #處理請求函數(shù) def process_request(self,request,spider): #聲明一個(gè)Options對象 opt = Options() #給對象添加一個(gè)--headless參數(shù),表示無頭啟動(dòng) opt.add_argument('--headless') #把配置參數(shù)應(yīng)用到驅(qū)動(dòng)創(chuàng)建的對象 driver = webdriver.Chrome(options=opt) #打開requests中的地址 driver.get(request.url) #讓瀏覽器滾動(dòng)到底部 for x in range(1,11): j = x / 10 js = "document.documentElement.scrollTop = document.documentElement.scrollHeight*%f"%j driver.execute_script(js) #每次滾動(dòng)等待0.5s time.sleep(5) #獲取下一頁按鈕的標(biāo)簽 next_btn =driver.find_element_by_xpath('//span[contains(text(),"下一頁")]') #睡眠0.5秒 time.sleep(0.5) #對下一頁標(biāo)簽進(jìn)行鼠標(biāo)右鍵觸發(fā)事件 ActionChains(driver).context_click(next_btn).click().perform() # driver.save_screenshot('截圖.png') #把驅(qū)動(dòng)對象獲得的源碼賦值給新變量 page_source = driver.page_source #退出 driver.quit() #根據(jù)網(wǎng)頁源代碼,創(chuàng)建Htmlresponse對象 response = HtmlResponse(url=request.url,body=page_source,encoding='utf-8',request=request) #因?yàn)榉祷氐氖俏谋鞠?所以需要指定字符編碼格式 return response def process_response(self,request,response,spider): return response def process_exception(self,request,exception,spider): pass
以上這篇Scrapy基于selenium結(jié)合爬取淘寶的實(shí)例講解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
通過Python腳本+Jenkins實(shí)現(xiàn)項(xiàng)目重啟
Jenkins是一個(gè)流行的開源自動(dòng)化服務(wù)器,用于快速構(gòu)建、測試和部署軟件,本文主要介紹了通過Python腳本+Jenkins實(shí)現(xiàn)項(xiàng)目重啟,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10python 去除二維數(shù)組/二維列表中的重復(fù)行方法
今天小編就為大家分享一篇python 去除二維數(shù)組/二維列表中的重復(fù)行方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01python構(gòu)建深度神經(jīng)網(wǎng)絡(luò)(續(xù))
這篇文章主要詳細(xì)介紹了python構(gòu)建深度神經(jīng)網(wǎng)絡(luò)DNN,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03python?中collections的?deque使用詳解
這篇文章主要介紹了python中collections的deque使用詳解,deque是一個(gè)雙端隊(duì)列,如果要經(jīng)常從兩端append的數(shù)據(jù),選擇這個(gè)數(shù)據(jù)結(jié)構(gòu)就比較好了,更多相關(guān)內(nèi)容,需要的小伙伴可以參考下面文章內(nèi)容2022-09-09Python算法繪制特洛伊小行星群實(shí)現(xiàn)示例
這篇文章主要介紹了Python算法繪制特洛伊小行星群實(shí)現(xiàn)示例,這個(gè)小示例完成后非常的有意思也會(huì)使你在Python學(xué)習(xí)的道路上感到一絲絲小成就2021-10-10python opencv把一張圖片嵌入(疊加)到另一張圖片上的實(shí)現(xiàn)代碼
這篇文章主要介紹了python opencv把一張圖片嵌入(疊加)到另一張圖片上,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06Python爬取數(shù)據(jù)并寫入MySQL數(shù)據(jù)庫的實(shí)例
今天小編就為大家分享一篇Python爬取數(shù)據(jù)并寫入MySQL數(shù)據(jù)庫的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06