使用selenium抓取淘寶“已購(gòu)買的訂單”信息


使用selenium抓取已購(gòu)買訂單的信息

? ?本人是公司的數(shù)據(jù)分析師一枚陷谱,昨天公司的秘書妹紙跟我抱怨說召夹,每天都要登錄老板的賬號(hào)昧碉,去等級(jí)老板的淘寶購(gòu)買訂單信息,一頁頁的翻去手動(dòng)登記,簡(jiǎn)直是要了老命了呀掂林,這個(gè)時(shí)候我靈光一現(xiàn)进宝,怎么可以讓秘書妹紙受這樣的委屈,當(dāng)即對(duì)秘書妹紙講部逮,這個(gè)粗活還是讓我來每天登記吧,哈哈哈嫂易,我怎么可能一頁一頁的去登記兄朋,于是就想用爬蟲的技術(shù)直接抓取下來,豈不美哉怜械。說干就干颅和。

? ? 第一次本來想嘗試使用requests抓取的,已經(jīng)找到了訂單信息的api缕允,但是淘寶的偽造登陸問題實(shí)在是需要很多參數(shù)峡扩,簡(jiǎn)單嘗試之后就放棄了,果斷使用selenium

不是更簡(jiǎn)單障本,廢話不多說了教届,直接上碼响鹃。

? ? 第一步: 配置環(huán)境,pip install -i https://pypi.douban.com/simple selenium? 這里使用豆瓣源進(jìn)行安裝案训,下載速度快一大截买置,可以自己嘗試。

? ? 第二步:配置webdriver强霎,下載瀏覽器對(duì)應(yīng)的webdriver版本忿项,這個(gè)可以直接在網(wǎng)上查找搜索 谷歌瀏覽器對(duì)應(yīng)的driver版本就可以找到了,這里就不贅述城舞。如果不想指定路徑的話轩触,就直接把下載好的webdriver復(fù)制到你的python安裝目錄下,本人的python安裝目錄是?C:\Users\Administrator.PC-20190709LRDQ\AppData\Local\Programs\Python\Python36

? ? ? ? 第三步:直接上代碼家夺,下面慢慢解釋

? ? 第四步:代碼講解

1. 定義一個(gè)抓取淘寶已購(gòu)訂單信息的類AlibabaBought怕膛, 下面的類屬性是后面的類方法里面需要用到的,這里我把它定義成類屬性秦踪,方便后面的直接調(diào)用跟代碼的美觀性褐捻,__init__方法是類實(shí)例化的時(shí)候直接會(huì)調(diào)用的,這里用來添加瀏覽器打開的參數(shù)椅邓,這里只是簡(jiǎn)單的設(shè)置了一下瀏覽器的寬高柠逞,其他需要的參數(shù)可以在網(wǎng)上自己查閱,其實(shí)用不用都沒啥景馁。

2. 定義一個(gè)點(diǎn)擊事件的方法板壮,因?yàn)楹竺娴狞c(diǎn)擊操作需要重復(fù)調(diào)用,所以封裝成方法合住,用傳參的方式直接調(diào)用方法绰精,也就有了后面的點(diǎn)擊我的淘寶click_mytaobao方法,點(diǎn)擊之后網(wǎng)頁會(huì)彈出登錄頁面透葛,這里我們采用掃碼登錄的方法笨使,規(guī)避了淘寶滑動(dòng)驗(yàn)證碼的坑,然后就是點(diǎn)擊已買到的寶貝click_bought方法

3.? 上面第2的步驟已經(jīng)讓頁面進(jìn)入了訂單的頁面僚害,就可以開始通過selenium的browser.page_source獲取網(wǎng)頁源代碼硫椰,然后通過lxml對(duì)源碼進(jìn)行解析,lxml的xpath解析我就不多講了萨蚕,講太細(xì)文章太長(zhǎng)了靶草。

4.? 解析好的代碼出來的文本對(duì)象就可以通過列表的append方法進(jìn)行添加上去,因?yàn)樯厦嫖覀兲岬搅宋覀兊牧斜硎穷悓傩栽酪#允枪驳馁Y源奕翔,一個(gè)方法添加之后,列表已經(jīng)緩存在內(nèi)存中浩蓉,后面的保存時(shí)候直接調(diào)這個(gè)列表就可以獲取到數(shù)據(jù)

5. 獲取需要抓取的信息的xpath方法派继,這里教大家一個(gè)簡(jiǎn)單的方法帮坚,相信f12大家都會(huì)用,打開開發(fā)者工具互艾,然后點(diǎn)擊你需要抓取的信息试和,找到代碼,然后右鍵纫普,仔細(xì)看有個(gè)copyxpath阅悍,點(diǎn)擊就好了

6.? 解析好了之后,剩下的就是翻頁的循環(huán)抓取了昨稼,這里也比較簡(jiǎn)單节视,就是獲取到下一頁這個(gè)地方的xpath,然后調(diào)用點(diǎn)擊事件的方法假栓,就可以自動(dòng)點(diǎn)擊下一頁的寻行,再循環(huán)第5的步驟,進(jìn)行解析匾荆。

7.? 最后就是保存了拌蜘,因?yàn)槲乙4娴絜xcel中,這里我習(xí)慣使用pandas牙丽,有其他的方法也可以简卧,最后做出來就好。詳細(xì)的大家可以看我的源碼烤芦,都是比較簡(jiǎn)單基礎(chǔ)的举娩。

8.? python之禪,一定要講究代碼的美觀性构罗,我剛開始實(shí)現(xiàn)的時(shí)候铜涉,也是胡亂寫得,然后測(cè)試運(yùn)行成功之后遂唧,在進(jìn)行封裝成類芙代,大家也可以按照我的這個(gè)方法來,先寫main函數(shù)蠢箩,然后在類里面寫一個(gè)run方法,main函數(shù)里面就直接調(diào)用類的run方法就好谬泌。

哈哈哈,這就成功幫秘書妹紙做好了逻谦,最后我還用pyinstaller進(jìn)行了打包成exe可執(zhí)行文件掌实,妹紙拿到后,點(diǎn)擊運(yùn)行邦马,嘖嘖嘖贱鼻,那炫酷的代碼跑起來宴卖,不多說,懂得邻悬。最下面有代碼症昏,隨便復(fù)制使用,反正我都測(cè)試很多回了父丰。

from seleniumimport webdriver

from selenium.webdriver.chrome.optionsimport Options

from selenium.webdriver.common.byimport By

from selenium.webdriver.supportimport expected_conditionsas EC

from selenium.webdriver.support.waitimport WebDriverWait

from lxmlimport etree

import pandasas pd

import time

class AlibabaBought:

? ? '''

抓取個(gè)人淘寶訂單的已購(gòu)買的訂單

'''

? ? url= 'https://www.taobao.com'

? ? mytaobao_xpath= '//*[@id="J_SiteNavMytaobao"]/div[@class="site-nav-menu-hd"]/a'

? ? bought_xpath= '//*[@id="bought"]'

? ? page_xpath= '//*[@id="tp-bought-root"]/div[19]/div[2]/ul/li[@class="pagination-next"]'

? ? date_list= []

order_list= []

title_list= []

shop_list= []

num_list= []

price_list= []

statecode_list= []

unit_price_list= []

def __init__(self):

? ? ? ? '''

實(shí)例化的時(shí)候自動(dòng)設(shè)置瀏覽器的參數(shù)

'''

? ? ? ? chrome_options= Options()

chrome_options.add_argument('--window-size=1500,1366')

self.browser= webdriver.Chrome(chrome_options=chrome_options)

def click_case(self,my_xpath):

? ? ? ? '''

點(diǎn)擊事件

'''

? ? ? ? button= WebDriverWait(self.browser,20).until(

EC.element_to_be_clickable(

(By.XPATH,my_xpath))

)

button.click()

def click_mytaobao(self):

? ? ? ? '''

打開需要訪問的網(wǎng)站,點(diǎn)擊我的淘寶

'''

? ? ? ? self.browser.get(self.url)

self.click_case(my_xpath=self.mytaobao_xpath)

# 掃碼登錄

? ? def click_bought(self):

? ? ? ? '''

點(diǎn)擊已買到的寶貝

'''

? ? ? ? self.click_case(self.bought_xpath)

def click_next_page(self):

? ? ? ? '''

點(diǎn)擊下一頁

'''

? ? ? ? self.click_case(self.page_xpath)

def analysis_web(self,order_list_xpath,order_list):

? ? ? ? '''解析網(wǎng)頁源代碼'''

? ? ? ? page_taobao_html= self.browser.page_source

my_data= etree.HTML(page_taobao_html).xpath(order_list_xpath)

order_list.append(my_data[0])

print(my_data[0])

print('-' * 100)

def make_data_xpath(self):

? ? ? ? '''構(gòu)造訂單信息的xpath路徑并解析源碼保存到列表中'''

? ? ? ? for iin range(4,19):

? ? ? ? ? ? date_xpath= '//*[@id="tp-bought-root"]/div[%s]/div/table/tbody[1]/tr/td[1]/label/span[2]/text()' % i

order_xpath= '//*[@id="tp-bought-root"]/div[%s]/div/table/tbody[1]/tr/td[1]/span/span[3]/text()' % i

title_path= '//*[@id="tp-bought-root"]/div[%s]/div/table/tbody[2]/tr/td[1]/div/div[2]/p[1]/a/span[2]/text()' % i

shop_path= '//*[@id="tp-bought-root"]/div[%s]/div/table/tbody[1]/tr/td[2]/span/a/text()' % i

num_path= '//*[@id="tp-bought-root"]/div[%s]/div/table/tbody[2]/tr/td[3]/div/p/text()' % i

price_path= '//*[@id="tp-bought-root"]/div[%s]/div/table/tbody[2]/tr/td[5]/div/div[1]/p/strong/span[2]/text()' % i

statecode_path= '//*[@id="tp-bought-root"]/div[%s]/div/table/tbody[2]/tr/td[6]/div/p/span/text()' % i

unit_price_path= '//*[@id="tp-bought-root"]/div[%s]/div/table/tbody[2]/tr/td[2]/div/p/span[2]/text()' % i

self.analysis_web(date_xpath,self.date_list)

self.analysis_web(order_xpath,self.order_list)

self.analysis_web(title_path,self.title_list)

self.analysis_web(shop_path,self.shop_list)

self.analysis_web(num_path,self.num_list)

self.analysis_web(price_path,self.price_list)

self.analysis_web(statecode_path,self.statecode_list)

self.analysis_web(unit_price_path,self.unit_price_list)

def save_date(self):

? ? ? ? '''保存到指定路徑下面為excel'''

? ? ? ? taobao_dic= {'date': self.date_list,'order': self.order_list,'title': self.title_list,'shop': self.shop_list,'num': self.num_list,'unit_price': self.unit_price_list,

'price': self.price_list,'statecode': self.statecode_list}

print(taobao_dic)

df= pd.DataFrame(taobao_dic)

save_path= input('請(qǐng)輸入需要保存的文件路徑:')

if save_path:

? ? ? ? ? ? df.to_excel(save_path+ r'\淘寶購(gòu)買明細(xì).xlsx',index=False)

else:

? ? ? ? ? ? df.to_excel(r'f:\桌面\珊珊\淘寶購(gòu)買明細(xì).xlsx',index=False)

def run(self):

? ? ? ? self.click_mytaobao()

self.click_bought()

while True:

? ? ? ? ? ? self.make_data_xpath()

is_go_on= int(input("繼續(xù)抓取請(qǐng)輸入 1 肝谭;退出請(qǐng)輸入 2:"))

if is_go_on== 1:

? ? ? ? ? ? ? ? self.click_next_page()

time.sleep(3)

elif is_go_on== 2:

? ? ? ? ? ? ? ? self.browser.close()

break

? ? ? ? self.save_date()

def main():

? ? alibaba_bought= AlibabaBought()

alibaba_bought.run()

if __name__== '__main__':

? ? main()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蛾扇,隨后出現(xiàn)的幾起案子攘烛,更是在濱河造成了極大的恐慌,老刑警劉巖镀首,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坟漱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡更哄,警方通過查閱死者的電腦和手機(jī)芋齿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來成翩,“玉大人沟突,你說我怎么就攤上這事〔洞” “怎么了惠拭?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)庸论。 經(jīng)常有香客問我职辅,道長(zhǎng),這世上最難降的妖魔是什么聂示? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任域携,我火速辦了婚禮,結(jié)果婚禮上鱼喉,老公的妹妹穿的比我還像新娘秀鞭。我一直安慰自己,他們只是感情好扛禽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布锋边。 她就那樣靜靜地躺著,像睡著了一般编曼。 火紅的嫁衣襯著肌膚如雪豆巨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天掐场,我揣著相機(jī)與錄音往扔,去河邊找鬼贩猎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛萍膛,可吹牛的內(nèi)容都是我干的吭服。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蝗罗,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼艇棕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绿饵,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤欠肾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后拟赊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刺桃,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年吸祟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瑟慈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡屋匕,死狀恐怖葛碧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情过吻,我是刑警寧澤进泼,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站纤虽,受9級(jí)特大地震影響乳绕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逼纸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一洋措、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杰刽,春花似錦菠发、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涝婉,卻和暖如春哥力,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背墩弯。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工吩跋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人渔工。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓锌钮,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親引矩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子梁丘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容