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

簡介

上一個博文已經講述瞭如何使用selenium跳過webdriver檢測並爬取天貓商品數據,因此在此再也不詳細講,有須要思路的能夠查看另一篇博文。html

源代碼

# -*- 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安裝下列包python

    • [x] pip install selenium
  4. 點擊這裏登陸微博,並經過微博綁定淘寶帳號密碼
  5. 在main中填寫chromedriver的絕對路徑
  6. 在main中填寫微博帳號密碼
#改爲你的chromedriver的完整路徑地址
    chromedriver_path = "/Users/bird/Desktop/chromedriver.exe" 
    #改爲你的微博帳號
    weibo_username = "改爲你的微博帳號"
    #改爲你的微博密碼
    weibo_password = "改爲你的微博密碼"

演示圖片



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

其餘爬蟲源代碼

全部關於爬蟲的項目都放在github了,有須要的能夠去GitHub倉庫github

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

相關文章
相關標籤/搜索