selenium跳過webdriver檢測並爬取淘寶我已購買的寶貝數據


簡介

上一個博文已經講述了如何使用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() #爬取淘寶 我已買到的寶貝商品數據
    

使用教程

  1. 點擊這里下載下載chrome瀏覽器
  2. 查看chrome瀏覽器的版本號,點擊這里下載對應版本號的chromedriver驅動
  3. pip安裝下列包
    • [x] pip install selenium
  4. 點擊這里登錄微博,並通過微博綁定淘寶賬號密碼
  5. 在main中填寫chromedriver的絕對路徑
  6. 在main中填寫微博賬號密碼

	#改成你的chromedriver的完整路徑地址
    chromedriver_path = "/Users/bird/Desktop/chromedriver.exe" 
    #改成你的微博賬號
    weibo_username = "改成你的微博賬號"
    #改成你的微博密碼
    weibo_password = "改成你的微博密碼"
    

演示圖片



爬蟲過程圖片查看不了點擊這里
爬蟲結果圖片查看不了點擊這里

其他爬蟲源代碼

所有關於爬蟲的項目都放在github了,有需要的可以去GitHub倉庫

項目持續更新,歡迎您star本項目


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM