hello,大家好,我是夜斗小神社!
電商時(shí)代,淘寶、京東、天貓商品數(shù)據(jù)對(duì)店鋪運(yùn)營(yíng)有極大的幫助,因此獲取相應(yīng)店鋪商品的數(shù)據(jù)能夠帶來(lái)極大的價(jià)值,那么我們?nèi)绾潍@取到相應(yīng)的數(shù)據(jù)呢?
上一篇我們講了python打包exe可執(zhí)行文件:
Python打包成exe文件史上最詳細(xì)教程:
https://blog.csdn.net/xtreallydance/article/details/112643658
這次我們來(lái)講解淘寶爬蟲代碼————代碼如下:
from selenium import webdriver
import time
import csv
import re
導(dǎo)入自動(dòng)化的庫(kù)selenium, 緩存時(shí)間time庫(kù), 將文件保存為csv形式, 導(dǎo)入re正則匹配的庫(kù)
if __name__ == '__main__':
keyword = input("請(qǐng)輸入你要商品的關(guān)鍵字:")
path = r'L:\webdriver\chromedriver.exe'
driver = webdriver.Chrome(path)
driver.get('https://www.taobao.com/')
main()
輸入查詢的關(guān)鍵字: 例如輸入ins潮流T恤,path為webdriver.exe驅(qū)動(dòng)設(shè)備存放的路徑,實(shí)例化一個(gè)driver對(duì)象,然后利用get方法訪問(wèn)淘寶網(wǎng)址!再調(diào)用main()方法.
請(qǐng)大家記住,一定要掃碼登錄!不然會(huì)被淘寶反爬!如圖所示!
- 程序運(yùn)行開(kāi)始結(jié)果如下:
[圖片上傳失敗...(image-4e94d7-1610765478375)]
def main():
print('正在爬取第一頁(yè)數(shù)據(jù)')
page = search_product(keyword)
get_product()
page_num = 1
# q不變 0 44 188(頁(yè)數(shù)*44)
while page_num != page:
print('-*-' * 50 )
print('正在爬取第{}頁(yè)的數(shù)據(jù)'.format(page_num + 1))
print('*-*' * 50)
driver.get('https://s.taobao.com/search?q={}&s={}'.format(keyword, page_num))
# 瀏覽器等待方法
driver.implicitly_wait(2)
# 最大化瀏覽器
driver.maximize_window()
get_product()
page_num += 1
main()方法當(dāng)中呢,首先利用search_product函數(shù)與get_product函數(shù)爬取一頁(yè)的數(shù)據(jù), 再利用while循環(huán)爬取全部數(shù)據(jù), 我們首先講解一頁(yè)數(shù)據(jù)的爬取.
def search_product(key):
driver.find_element_by_id('q').send_keys(key)
driver.find_element_by_class_name('btn-search').click()
# 瀏覽器窗口最大化
driver.maximize_window()
time.sleep(15)
# 因?yàn)樽詣?dòng)登錄基本實(shí)現(xiàn)不了,所以要實(shí)現(xiàn)手動(dòng)登錄
# 找到頁(yè)數(shù)的標(biāo)簽
page = driver.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/div[1]').text
page = re.findall('(\d+)', page)[0]
return int(page)
首先利用driver.find_element_by_id這個(gè)方法找到輸入框,將key這個(gè)變量輸入到搜索框中,再利用driver.find_element_by_class_name方法找到搜索兩個(gè)字,利用click()方法點(diǎn)擊搜索.將窗口最大化,并暫停15s.因?yàn)樽詣?dòng)登錄淘寶當(dāng)中會(huì)被阿里巴巴識(shí)別,所有暫停15s是為了用手動(dòng)掃碼登錄. 然后用用xapth找到page頁(yè)數(shù)的標(biāo)簽,匹配數(shù)字獲取第一個(gè)值,返回page頁(yè)數(shù),比如第5頁(yè),返回的就是5,將參數(shù)傳入到page中,在調(diào)用get_product()方法獲取這一頁(yè)的商品詳細(xì)數(shù)據(jù),例如商品名字、商品價(jià)格、付款人數(shù)、商品地址、商品店鋪名等等等,下面來(lái)看get_product()這個(gè)函數(shù)
def get_product():
divs = driver.find_elements_by_xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq "]')
print(divs)
for div in divs:
# 商品名稱
info = div.find_element_by_xpath('.//div[@class="row row-2 title"]/a').text
# 商品價(jià)格
price = div.find_element_by_xpath('.//strong').text + "元"
# 付款人數(shù)
deal = div.find_element_by_xpath('.//div[@class="deal-cnt"]').text
# 店鋪名稱
name = div.find_element_by_xpath('.//div[@class="shop"]/a').text
# 店鋪地點(diǎn)
place = div.find_element_by_xpath('.//div[@class="location"]').text
print(info, price, deal, name, place, sep='|')
with open('ins短袖.csv', 'a', newline="") as fp:
csvwriter = csv.writer(fp, delimiter=',')
csvwriter.writerow([info, price, deal, name, place])
首先找到商品列表的標(biāo)簽divs,然后利用for循環(huán)獲取每一個(gè)商品的div標(biāo)簽,利用xpath語(yǔ)法獲取到info、price、deal、name、place信息然后保存為csv文件形式!
-
最終爬取下來(lái)的數(shù)據(jù)導(dǎo)入到excel中,如圖所示:
excel表格數(shù)據(jù)顯示
好啦今天的分享就到這里啦,然后小夜斗就要滾去學(xué)習(xí)啦,see you!
- 在這個(gè)星球上,你很重要,請(qǐng)珍惜你的珍貴! ~~~夜斗小神社
[圖片上傳失敗...(image-89f7f3-1610765478375)]