簡介
上一個博文已經講述了如何使用selenium跳過webdriver檢測並爬取天貓商品數據,所以在此不再詳細講,有需要思路的可以查看另外一篇博文。
源代碼
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from pyquery import PyQuery as pq
from time import sleep
import random
#定義一個taobao類
class taobao_infos:
#對象初始化
def __init__(self):
url = 'https://login.taobao.com/member/login.jhtml'
self.url = url
options = webdriver.ChromeOptions()
options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2}) # 不加載圖片,加快訪問速度
options.add_experimental_option('excludeSwitches', ['enable-automation']) # 此步驟很重要,設置為開發者模式,防止被各大網站識別出來使用了Selenium
self.browser = webdriver.Chrome(executable_path=chromedriver_path, options=options)
self.wait = WebDriverWait(self.browser, 10) #超時時長為10s
#登錄淘寶
def login(self):
# 打開網頁
self.browser.get(self.url)
# 自適應等待,點擊密碼登錄選項
self.browser.implicitly_wait(30) #智能等待,直到網頁加載完畢,最長等待時間為30s
self.browser.find_element_by_xpath('//*[@class="forget-pwd J_Quick2Static"]').click()
# 自適應等待,點擊微博登錄宣傳
self.browser.implicitly_wait(30)
self.browser.find_element_by_xpath('//*[@class="weibo-login"]').click()
# 自適應等待,輸入微博賬號
self.browser.implicitly_wait(30)
self.browser.find_element_by_name('username').send_keys(weibo_username)
# 自適應等待,輸入微博密碼
self.browser.implicitly_wait(30)
self.browser.find_element_by_name('password').send_keys(weibo_password)
# 自適應等待,點擊確認登錄按鈕
self.browser.implicitly_wait(30)
self.browser.find_element_by_xpath('//*[@class="btn_tip"]/a/span').click()
# 直到獲取到淘寶會員昵稱才能確定是登錄成功
taobao_name = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.site-nav-bd > ul.site-nav-bd-l > li#J_SiteNavLogin > div.site-nav-menu-hd > div.site-nav-user > a.site-nav-login-info-nick ')))
# 輸出淘寶昵稱
print(taobao_name.text)
# 模擬向下滑動瀏覽
def swipe_down(self,second):
for i in range(int(second/0.1)):
#根據i的值,模擬上下滑動
if(i%2==0):
js = "var q=document.documentElement.scrollTop=" + str(300+400*i)
else:
js = "var q=document.documentElement.scrollTop=" + str(200 * i)
self.browser.execute_script(js)
sleep(0.1)
js = "var q=document.documentElement.scrollTop=100000"
self.browser.execute_script(js)
sleep(0.1)
# 爬取淘寶 我已買到的寶貝商品數據
def crawl_good_buy_data(self):
# 對我已買到的寶貝商品數據進行爬蟲
self.browser.get("https://buyertrade.taobao.com/trade/itemlist/list_bought_items.htm")
# 遍歷所有頁數
for page in range(1,1000):
# 等待該頁面全部已買到的寶貝商品數據加載完畢
good_total = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#tp-bought-root > div.js-order-container')))
# 獲取本頁面源代碼
html = self.browser.page_source
# pq模塊解析網頁源代碼
doc = pq(html)
# # 存儲該頁已經買到的寶貝數據
good_items = doc('#tp-bought-root .js-order-container').items()
# 遍歷該頁的所有寶貝
for item in good_items:
good_time_and_id = item.find('.bought-wrapper-mod__head-info-cell___29cDO').text().replace('\n',"").replace('\r',"")
good_merchant = item.find('.seller-mod__container___1w0Cx').text().replace('\n',"").replace('\r',"")
good_name = item.find('.sol-mod__no-br___1PwLO').text().replace('\n', "").replace('\r', "")
# 只列出商品購買時間、訂單號、商家名稱、商品名稱
# 其余的請自己實踐獲取
print(good_time_and_id, good_merchant, good_name)
print('\n\n')
# 大部分人被檢測為機器人就是因為進一步模擬人工操作
# 模擬人工向下瀏覽商品,即進行模擬下滑操作,防止被識別出是機器人
# 隨機滑動延時時間
swipe_time = random.randint(1, 3)
self.swipe_down(swipe_time)
# 等待下一頁按鈕 出現
good_total = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.pagination-next')))
# 點擊下一頁按鈕
good_total.click()
sleep(2)
if __name__ == "__main__":
# 使用之前請先查看當前目錄下的使用說明文件README.MD
# 使用之前請先查看當前目錄下的使用說明文件README.MD
# 使用之前請先查看當前目錄下的使用說明文件README.MD
chromedriver_path = "/Users/bird/Desktop/chromedriver.exe" #改成你的chromedriver的完整路徑地址
weibo_username = "改成你的微博賬號" #改成你的微博賬號
weibo_password = "改成你的微博密碼" #改成你的微博密碼
a = taobao_infos()
a.login() #登錄
a.crawl_good_buy_data() #爬取淘寶 我已買到的寶貝商品數據
使用教程
- 點擊這里下載下載chrome瀏覽器
- 查看chrome瀏覽器的版本號,點擊這里下載對應版本號的chromedriver驅動
- pip安裝下列包
- [x] pip install selenium
- 點擊這里登錄微博,並通過微博綁定淘寶賬號密碼
- 在main中填寫chromedriver的絕對路徑
- 在main中填寫微博賬號密碼
#改成你的chromedriver的完整路徑地址
chromedriver_path = "/Users/bird/Desktop/chromedriver.exe"
#改成你的微博賬號
weibo_username = "改成你的微博賬號"
#改成你的微博密碼
weibo_password = "改成你的微博密碼"
演示圖片
其他爬蟲源代碼
所有關於爬蟲的項目都放在github了,有需要的可以去GitHub倉庫
項目持續更新,歡迎您star本項目