爬取京東 百度 知乎
阿新 • • 發佈:2021-10-07
爬取京東資料商品(單頁)
關於延時等待
有時候我們在訪問網站資料的時候 載入需要一定的時間 沒有載入完全的情況下程式碼極其容易報錯 此時需要我們的等待頁面資料載入完畢 如何精確等待?
bro.implicitly_wait(10) #延時等待十秒(對於正常網速十秒足夠)
關於控制瀏覽器滑鼠滾輪下滑
window.document.body.scrollHeight # 當前頁面螢幕高度 window.scrollTo # 滾動到指定位置
import time #匯入時間模組 from selenium import webdriver # 匯入自動控制瀏覽器 from selenium.webdriver.common.keys importKeys #匯入鍵盤模擬輸入 from openpyxl import Workbook wb=Workbook() wb1=wb.create_sheet('京東商品資料',0) wb1.append(['商品圖','價格','詳情','連結','銷量','店鋪名','店鋪連結']) bro=webdriver.Chrome() #使用谷歌瀏覽器開啟 bro.get('https://www.jd.com/') #開啟京東首頁 bro.implicitly_wait(10) #延時等待 載入完成即可執行命令 key=bro.find_element_by_id('key') #尋找輸入欄所對應的標籤找id欄位choice=input('請輸入需要搜尋的內容') key.send_keys(choice) #輸入搜尋內容 key.send_keys(Keys.ENTER) # 按下enter鍵進入商品頁 for i in range(0,12000,1000): # 使用js程式碼控制滑鼠滾輪向下移動, 總共長度為8000 每一次滾1000的長度 並且延時等待0.5 bro.execute_script('window.scrollTo(0,%s)'%i) time.sleep(0.5) list=bro.find_elements_by_css_selector('li.gl-item') #獲取整個下拉完成後的頁面li標籤# print(len(list)) for li in list: #迴圈獲取list中的li標籤 img_list=li.find_element_by_css_selector('div.p-img a img') #獲取圖片標籤 img_src=img_list.get_attribute('src') #獲取圖片標籤內部屬性 """內部src屬性內部存在懶載入現象""" if not img_src: # 懶載入的圖片標籤內部需加上https:構成圖片連結 img_src='https:'+img_list.get_attribute('data-lazy-img') # print(img_src) price_list=li.find_element_by_css_selector('div.p-price strong') # 獲取價格所在標籤 price=price_list.text #獲取價格標籤內部的文字內容 src_list=li.find_element_by_css_selector('div.p-name a em') #獲取商品描述所在標籤 src=src_list.text #獲取商品描述標籤內部的文字內容 link_list=li.find_element_by_css_selector('div.p-name a') #獲取商品連結所在標籤 link=link_list.get_attribute('href') #獲取標籤內部href屬性 commit_list=li.find_element_by_css_selector('div.p-commit strong a') #獲取評論所在標籤 commit=commit_list.text# 獲取評論標籤內部的文字內容 shop_list=li.find_element_by_css_selector('div.p-shop span a') #獲取店鋪名所在標籤 shop=shop_list.text# 獲取店鋪名所在標籤中的文字內容 shop_link=li.find_element_by_css_selector('div.p-shop span a') #獲取店鋪連結所在的標籤 shoplink=shop_link.get_attribute('href') # 獲取標籤內部的店鋪連結 wb1.append([img_src,price,src,link,commit,shop,shoplink]) wb.save('京東商品.xlsx') bro.close()
知乎登入案例
1.電腦端知乎不登陸是無法直接訪問首頁的 2.network監控傳送登入請求體資料為加密 加密的程式碼關鍵字:encrypt 解密的程式碼關鍵字:decrypt 3.搜尋關鍵字encrypt通過斷點除錯檢視到內部真實資料 client_id=c3cef7c66a1843f8b3a9e6a1e3160e20&grant_type=password×tamp=1566371889615&source=com.zhihu.web&signature=849409fe69f76b28a7ebfa95f0acc784d7c812bf&username=+8618896530856&password=dadasdasdas&captcha=nngt&lang=en&utm_source=&ref_source=other_https://www.zhihu.com/signin?next=%2F
from selenium import webdriver import time # 1.使用谷歌瀏覽器訪問百度首頁 bro = webdriver.Chrome() bro.get('https://www.baidu.com/') # 2.查詢頁面上的登入按鈕 login_tag = bro.find_element_by_id('s-top-loginbtn') # 3.點選登入按鈕 time.sleep(0.5) login_tag.click() '''延遲等待:頁面資料有時候需要時間載入 但是程式碼不會自動等''' time.sleep(3) # 4.查詢點選簡訊登入按鈕 message_tag = bro.find_element_by_id('TANGRAM__PSP_11__changeSmsCodeItem') message_tag.click() time.sleep(0.5) # 5.查詢手機號輸入框並填寫內容 phone_tag = bro.find_element_by_id('TANGRAM__PSP_11__smsPhone') phone_tag.send_keys(13585515712) time.sleep(0.5) # 6.查詢傳送驗證碼按鈕並點選 btn_tag = bro.find_element_by_id('TANGRAM__PSP_11__smsTimer') btn_tag.click() time.sleep(0.5) # 7.查詢並點選登入按鈕 submit_tag = bro.find_element_by_id('TANGRAM__PSP_11__smsSubmit') submit_tag.click() time.sleep(0.5) bro.close()