使用selenium抓取淘宝“已购买的订单”信息


使用selenium抓取已购买订单的信息

   本人是公司的数据分析师一枚,昨天公司的秘书妹纸跟我抱怨说,每天都要登录老板的账号,去等级老板的淘宝购买订单信息,一页页的翻去手动登记,简直是要了老命了呀,这个时候我灵光一现,怎么可以让秘书妹纸受这样的委屈,当即对秘书妹纸讲,这个粗活还是让我来每天登记吧,哈哈哈,我怎么可能一页一页的去登记,于是就想用爬虫的技术直接抓取下来,岂不美哉。说干就干。

    第一次本来想尝试使用requests抓取的,已经找到了订单信息的api,但是淘宝的伪造登陆问题实在是需要很多参数,简单尝试之后就放弃了,果断使用selenium

不是更简单,废话不多说了,直接上码。

    第一步: 配置环境,pip install -i https://pypi.douban.com/simple selenium  这里使用豆瓣源进行安装,下载速度快一大截,可以自己尝试。

    第二步:配置webdriver,下载浏览器对应的webdriver版本,这个可以直接在网上查找搜索 谷歌浏览器对应的driver版本就可以找到了,这里就不赘述。如果不想指定路径的话,就直接把下载好的webdriver复制到你的python安装目录下,本人的python安装目录是 C:\Users\Administrator.PC-20190709LRDQ\AppData\Local\Programs\Python\Python36

        第三步:直接上代码,下面慢慢解释

    第四步:代码讲解

1. 定义一个抓取淘宝已购订单信息的类AlibabaBought, 下面的类属性是后面的类方法里面需要用到的,这里我把它定义成类属性,方便后面的直接调用跟代码的美观性,__init__方法是类实例化的时候直接会调用的,这里用来添加浏览器打开的参数,这里只是简单的设置了一下浏览器的宽高,其他需要的参数可以在网上自己查阅,其实用不用都没啥。

2. 定义一个点击事件的方法,因为后面的点击操作需要重复调用,所以封装成方法,用传参的方式直接调用方法,也就有了后面的点击我的淘宝click_mytaobao方法,点击之后网页会弹出登录页面,这里我们采用扫码登录的方法,规避了淘宝滑动验证码的坑,然后就是点击已买到的宝贝click_bought方法

3.  上面第2的步骤已经让页面进入了订单的页面,就可以开始通过selenium的browser.page_source获取网页源代码,然后通过lxml对源码进行解析,lxml的xpath解析我就不多讲了,讲太细文章太长了。

4.  解析好的代码出来的文本对象就可以通过列表的append方法进行添加上去,因为上面我们提到了我们的列表是类属性,所以是公共的资源,一个方法添加之后,列表已经缓存在内存中,后面的保存时候直接调这个列表就可以获取到数据

5. 获取需要抓取的信息的xpath方法,这里教大家一个简单的方法,相信f12大家都会用,打开开发者工具,然后点击你需要抓取的信息,找到代码,然后右键,仔细看有个copyxpath,点击就好了

6.  解析好了之后,剩下的就是翻页的循环抓取了,这里也比较简单,就是获取到下一页这个地方的xpath,然后调用点击事件的方法,就可以自动点击下一页的,再循环第5的步骤,进行解析。

7.  最后就是保存了,因为我要保存到excel中,这里我习惯使用pandas,有其他的方法也可以,最后做出来就好。详细的大家可以看我的源码,都是比较简单基础的。

8.  python之禅,一定要讲究代码的美观性,我刚开始实现的时候,也是胡乱写得,然后测试运行成功之后,在进行封装成类,大家也可以按照我的这个方法来,先写main函数,然后在类里面写一个run方法,main函数里面就直接调用类的run方法就好。

哈哈哈,这就成功帮秘书妹纸做好了,最后我还用pyinstaller进行了打包成exe可执行文件,妹纸拿到后,点击运行,啧啧啧,那炫酷的代码跑起来,不多说,懂得。最下面有代码,随便复制使用,反正我都测试很多回了。

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:

    '''

抓取个人淘宝订单的已购买的订单

'''

    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):

        '''

实例化的时候自动设置浏览器的参数

'''

        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):

        '''

点击事件

'''

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

EC.element_to_be_clickable(

(By.XPATH,my_xpath))

)

button.click()

def click_mytaobao(self):

        '''

打开需要访问的网站,点击我的淘宝

'''

        self.browser.get(self.url)

self.click_case(my_xpath=self.mytaobao_xpath)

# 扫码登录

    def click_bought(self):

        '''

点击已买到的宝贝

'''

        self.click_case(self.bought_xpath)

def click_next_page(self):

        '''

点击下一页

'''

        self.click_case(self.page_xpath)

def analysis_web(self,order_list_xpath,order_list):

        '''解析网页源代码'''

        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):

        '''构造订单信息的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('请输入需要保存的文件路径:')

if save_path:

            df.to_excel(save_path+ r'\淘宝购买明细.xlsx',index=False)

else:

            df.to_excel(r'f:\桌面\珊珊\淘宝购买明细.xlsx',index=False)

def run(self):

        self.click_mytaobao()

self.click_bought()

while True:

            self.make_data_xpath()

is_go_on= int(input("继续抓取请输入 1 ;退出请输入 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()

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容