Python爬蟲爬取淘寶,京東商品資訊

誅心人i發表於2020-02-11

小編是一個理科生,不善長說一些廢話。簡單介紹下原理然後直接上程式碼。

使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一個框架可以通過pip下載

pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 

(注)-i 後面是pip使用臨時清華源下載 比較快  使用pip原來的源很慢所以做了一個換源處理

chromedriver下載地址:http://chromedriver.storage.googleapis.com/index.html找到與自己的谷歌遊覽器對應版本的版本版本對應關係這篇文章裡面有:https://blog.csdn.net/BinGISer/article/details/88559532

京東流程。。。淘寶類似(就是多了一個登入驗證)

一,要找到商場地址:https://www.jd.com/

二,模擬正常的查詢(正常查詢商品步驟:輸入商品名,點選搜尋,下拉檢視商品,點選下一頁檢視更多的商品)怎麼來的我不去做詳細的說明(懶得打字,能用就行,懶得去做文章教人,實在想學習加我扣扣討論)直接上程式碼,能看懂就看,看不懂的可以加扣扣:2511217211一起討論(加好友驗證備註:討論)

爬取京東商品資訊程式碼:

from selenium import webdriver
from time import sleep
import re
import os


# 搜尋商品
def search_products():
    # 輸入商品名字
    driver.find_element_by_xpath('//*[@id="key"]').send_keys(keyword)
    # 點選搜尋
    driver.find_element_by_xpath('//*[@class="form"]/button').click()
    sleep(10)
    token = driver.find_element_by_xpath('//*[@id="J_bottomPage"]/span[2]/em[1]/b').text
    # 0代表所有匹配到的數字
    token = int(re.compile('(\d+)').search(token).group(1))
    # 返回總頁數
    return token


# 下拉下滑條,載入資料
def drop_down():
    for x in range(1, 11, 2):
        sleep(1)
        j = x / 10
        js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j
        driver.execute_script(js)


# 獲取商品資訊
def get_product():
    lis = driver.find_elements_by_xpath('//*[@class="gl-warp clearfix"]/li[@class="gl-item"]')
    for li in lis:
        price = li.find_element_by_xpath('.//div[@class="p-price"]/strong/i').text + '元'
        info = li.find_element_by_xpath('.//div[@class="p-name"]/a/em').text + li.find_element_by_xpath(
            './/div[@class="p-name"]/a').get_attribute('title')
        p_commit = li.find_element_by_xpath('.//div[@class="p-commit"]/strong/a').text
        p_shopnum = li.find_element_by_xpath('.//div[@class="p-shopnum"]/*').text
        p_img = li.find_element_by_xpath('.//div[@class="p-img"]/a/img').get_attribute('src')
        print(info, price, p_commit, p_shopnum, p_img, sep='|')


# 翻頁
def next_page():
    token = search_products()
    num = 1
    while (num != token):
        driver.get('https://search.jd.com/Search?keyword={}&page={}'.format(keyword, 2 * num - 1))
        driver.implicitly_wait(10)
        num += 1
        drop_down()
        get_product()


if __name__ == "__main__":
    keyword = input('輸入你想查詢的商品名字:')
    driver_path = os.path.abspath(os.path.join(os.getcwd(), "..")) + "/Drive/chromedriver.exe"
    driver = webdriver.Chrome(driver_path)
    # 視窗最大化,防止資料丟失
    driver.maximize_window()
    driver.get('https://www.jd.com/')
    next_page()

爬取淘寶資訊的程式碼:

from selenium import webdriver
from time import sleep
import re
import os


# 搜尋商品
def search_products():
    driver.find_element_by_xpath('//*[@id="q"]').send_keys(keyword)
    driver.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button').click()
    sleep(10)
    token = driver.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/div[1]').text
    # 0代表所有匹配到的數字
    token = int(re.compile('(\d+)').search(token).group(1))
    return token


# 下拉下滑條,載入資料
def drop_down():
    for x in range(1, 11, 2):
        sleep(1)
        j = x / 10
        js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j
        driver.execute_script(js)


# 獲取商品資訊
def get_product():
    lis = driver.find_elements_by_xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq  "]')
    for li in lis:
        info = li.find_element_by_xpath('.//div[@class="row row-2 title"]').text
        price = li.find_element_by_xpath('.//a[@class="J_ClickStat"]').get_attribute('trace-price') + '元'
        deal = li.find_element_by_xpath('.//div[@class="deal-cnt"]').text
        image = li.find_element_by_xpath('.//div[@class="pic"]/a/img').get_attribute('src')
        name = li.find_element_by_xpath('.//div[@class="shop"]/a/span[2]').text
        site = li.find_element_by_xpath('.//div[@class="location"]').text
        print(info, price, deal, name, site, image, sep='|')


# 翻頁
def next_page():
    token = search_products()
    num = 0
    while (num != token):
        driver.get('https://s.taobao.com/search?q={}&s={}'.format(keyword, 44 * num))
        driver.implicitly_wait(10)
        num += 1
        drop_down()
        get_product()


if __name__ == "__main__":
    keyword = input('輸入你想查詢的商品名字:')
    driver_path = os.path.abspath(os.path.join(os.getcwd(), ".."))+"/Drive/chromedriver.exe"
    driver = webdriver.Chrome(driver_path)
    # 視窗最大化,防止資料丟失
    driver.maximize_window()
    driver.get('https://www.taobao.com/')
    next_page()

 

相關文章