1. 程式人生 > 其它 >爬取京東 百度 知乎

爬取京東 百度 知乎

爬取京東資料商品(單頁)

關於延時等待

有時候我們在訪問網站資料的時候 載入需要一定的時間 沒有載入完全的情況下程式碼極其容易報錯 此時需要我們的等待頁面資料載入完畢 如何精確等待?
bro.implicitly_wait(10) #延時等待十秒(對於正常網速十秒足夠) 

關於控制瀏覽器滑鼠滾輪下滑

window.document.body.scrollHeight  # 當前頁面螢幕高度
window.scrollTo  # 滾動到指定位置
import time #匯入時間模組
from selenium import webdriver # 匯入自動控制瀏覽器
from selenium.webdriver.common.keys import
Keys #匯入鍵盤模擬輸入 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&timestamp=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()