def index_page(page):
“”"
抓取索引頁
:param page: 頁碼
“”"
print(‘正在爬取第’, str(page), ‘頁數(shù)據(jù)’)
try:
url = ‘https://search.jd.com/Search?keyword=iPhone&ev=exbrand_Apple’
driver.get(url)
if page > 1:
input = driver.find_element_by_xpath(‘//*[@id=“J_bottomPage”]/span[2]/input’)
button = driver.find_element_by_xpath(‘//*[@id=“J_bottomPage”]/span[2]/a’)
input.clear()
input.send_keys(page)
button.click()
get_products()
except TimeoutException:
index_page(page)
這里我們依然使用隱式等待來進行 URL 訪問,這里小編通過 xpath 的方式獲取到了整個頁面最下面的翻頁組件:
小編這里的翻頁實際上是使用這里的輸入框和后面的確認按鈕進行的。
獲取商品詳細數(shù)據(jù)
這里其實有一個坑,JD 的首頁上的圖片是懶加載的,就是當頁面的滾動條沒有滾到這個圖片可以顯示在屏幕上的位置的時候,這個圖片是不會加載出來的。這就造成了小編一開始的只能獲取到前 4 個商品的圖片地址。
小編后來想了個辦法,使用 JavaScript 來模擬滾動條滾動,先將所有的圖片加載出來,然后再進行數(shù)據(jù)的獲取,代碼如下:
def get_products():
“”"
提取商品數(shù)據(jù)
“”"
js = ‘’’
timer = setInterval(function(){
var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
var ispeed=Math.floor(document.body.scrollHeight / 100);
if(scrollTop > document.body.scrollHeight * 90 / 100){
clearInterval(timer);
}
console.log(‘scrollTop:’+scrollTop)
console.log(‘scrollHeight:’+document.body.scrollHeight)
window.scrollTo(0, scrollTop+ispeed)
}, 20)
‘’’
driver.execute_script(js)
time.sleep(2.5)
html = driver.page_source
doc = PyQuery(html)
items = doc(‘#J_goodsList .gl-item .gl-i-wrap’).items()
i = 0
for item in items:
insert_data = {
‘image’: item.find(‘.p-img a img’).attr(‘src’),
‘price’: item.find(‘.p-price i’).text(),
‘name’: item.find(‘.p-name em’).text(),
‘commit’: item.find(‘.p-commit a’).text(),
‘shop’: item.find(‘.p-shop a’).text(),
‘icons’: item.find(‘.p-icons .goods-icons’).text()
}
i += 1
print(‘當前第’, str(i), ‘條數(shù)據(jù),內(nèi)容為:’ , insert_data)
中間那段 js 就是模擬滾動條向下滾動的代碼,這里小編做了一個定時任務(wù),這個定時任務(wù)將整個頁面的長度分成了 100 份,每 20 ms 就向下滾動 1% ,共計應(yīng)該總共 2s 可以滾到最下面,這里下面做了 2.5s 的睡眠,保證這個頁面的圖片都能加載出來,最后再獲取頁面上的數(shù)據(jù)。
主體代碼到這里就結(jié)束了,剩下的代碼無非就是將數(shù)據(jù)保存起來,不管是保存在數(shù)據(jù)中還是保存在 Excel 中,或者是 CSV 中,又或者是純粹的文本文件 txt 或者是 json ,都不難,小編這次就不寫了,希望大家能自己完善下這個代碼。
運行的時候,可以看到一個瀏覽器彈出來,然后滾動條自動以比較順滑的速度滾到最下方(小編為了這個順滑的速度調(diào)了很久),確保所有圖片都加載出來,再使用 pyquery 獲取相關(guān)的數(shù)據(jù),最后組成了一個 json 對象,給大家看下抓取下來的結(jié)果吧:
Chrome 無界面模式
我們在爬取數(shù)據(jù)的時候,彈出來一個瀏覽器總感覺有點老不爽了,可以使用如下命令將這個瀏覽器隱藏起來,不過需要的是 Chrome 比較新的版本。
開啟無窗口模式
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(‘–headless’)
driver = webdriver.Chrome(chrome_options=chrome_options)
首先,創(chuàng)建 ChromeOptions 對象,接著添加 headless 參數(shù),然后在初始化 Chrome 對象的時候通過 chrome_options 傳遞這個 ChromeOptions 對象,這樣我們就可以成功啟用 Chrome 的Headless模式了。
FireFox
(1)Python所有方向的學(xué)習(xí)路線(新版)
這是我花了幾天的時間去把Python所有方向的技術(shù)點做的整理,形成各個領(lǐng)域的知識點匯總,它的用處就在于,你可以按照上面的知識點去找對應(yīng)的學(xué)習(xí)資源,保證自己學(xué)得較為全面。
最近我才對這些路線做了一下新的更新,知識體系更全面了。
(2)Python學(xué)習(xí)視頻
包含了Python入門、爬蟲、數(shù)據(jù)分析和web開發(fā)的學(xué)習(xí)視頻,總共100多個,雖然沒有那么全面,但是對于入門來說是沒問題的,學(xué)完這些之后,你可以按照我上面的學(xué)習(xí)路線去網(wǎng)上找其他的知識資源進行進階。
(3)100多個練手項目
我們在看視頻學(xué)習(xí)的時候,不能光動眼動腦不動手,比較科學(xué)的學(xué)習(xí)方法是在理解之后運用它們,這時候練手項目就很適合了,只是里面的項目比較多,水平也是參差不齊,大家可以挑自己能做的項目去練練。
小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。
深知大多數(shù)初中級Python工程師,想要提升技能,往往是自己摸索成長或者是報班學(xué)習(xí),但自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年P(guān)ython爬蟲全套學(xué)習(xí)資料》送給大家,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時減輕大家的負擔。
由于文件比較大,這里只是將部分目錄截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實戰(zhàn)項目、講解視頻文章來源:http://www.zghlxwxcb.cn/news/detail-861159.html
如果你覺得這些內(nèi)容對你有幫助,可以添加下面V無償領(lǐng)?。。▊渥ⅲ簆ython)
整理了一份《2024年P(guān)ython爬蟲全套學(xué)習(xí)資料》送給大家,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時減輕大家的負擔。**
由于文件比較大,這里只是將部分目錄截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實戰(zhàn)項目、講解視頻
如果你覺得這些內(nèi)容對你有幫助,可以添加下面V無償領(lǐng)?。。▊渥ⅲ簆ython)
[外鏈圖片轉(zhuǎn)存中…(img-HRW7Sr2l-1710878137025)]文章來源地址http://www.zghlxwxcb.cn/news/detail-861159.html
到了這里,關(guān)于Python爬蟲實戰(zhàn):selenium爬取電商平臺商品數(shù)據(jù)(1)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!