上一個博文已經講述瞭如何使用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() #爬取淘寶 我已買到的寶貝商品數據
複製代碼
#改爲你的chromedriver的完整路徑地址
chromedriver_path = "/Users/bird/Desktop/chromedriver.exe"
#改爲你的微博帳號
weibo_username = "改爲你的微博帳號"
#改爲你的微博密碼
weibo_password = "改爲你的微博密碼"
複製代碼
全部關於爬蟲的項目都放在github了,有須要的能夠去GitHub倉庫python
項目持續更新,歡迎您star本項目git