python(27) 抓取淘寶買家秀


selenium 是Web應用測試工具,可以利用selenium和python,以及chromedriver等工具實現一些動態加密網站的抓取。本文利用這些工具抓取淘寶內衣評價買家秀圖片。

准備工作

下面先安裝selenium,在命令行輸入python,然后輸入安裝命令

1
pip install selenium

 

安裝chromedriver和chrome,二者版本需要對應
1.jpg
各版本下載地址
下載完成后解壓,將exe放到你的python安裝目錄下的scripts目錄下即可。
接下來分析網站,並且模擬登陸爬取數據,登陸淘寶,F12檢測瀏覽器請求,F5刷新下,在network欄找到可以分析的幾個網絡請求,找到cookie
2.jpg

分析和編碼

先根據cookie登陸淘寶
3.jpg
這段代碼初始化了ChromeDriver的參數,然后根據cookie設置chrome選項,成功后刷新下頁面,並且初始化reuests session,用於維持會話
初始化cookie代碼
4.jpg
初始化session代碼
5.jpg
這樣利用cookie就能成功登陸淘寶了
6.png
利用chromedriver打開了一個新窗口,然后訪問指定的商品頁面,接下來要做的都是點擊累計評價,然后點擊圖片評價選擇框。
7.png
累計評價的標簽元素xpath在network中找到,可以通過find_element_by_xpath函數訪問該標簽,然后調用click函數就完成了點擊,當然也可以通過presence_of_element_located超時等待查詢,查不到指定標簽就返回超時異常。相關接口調用比較簡單,可以看看selenium基礎查詢和操作
python selenium api
代碼功能是先點擊評論,然后滾動1000像素位置,抓取找到評論區元素,根據評論區的圖片元素找到資源地址,同時代碼實現了自動點擊下一頁和判斷末頁功能。
9.png
代碼找到了評論列表,然后將評論列表傳給getPhoto函數,抓取每個評論圖片,下面是抓取圖片的核心代碼。

def getPhoto(self,*comentlist):
        try:
            for comments in comentlist:
                #print(len(comentlist))
                #print(type(comments))
                desc=comments.find_element_by_class_name('tm-rate-fulltxt').text
                if len(desc) == 0:
                    desc='abcdef'
                dirfix=desc[0:6]
                dirname=os.path.join(self.path,dirfix)
                if os.path.exists(dirname) == False:
                    os.makedirs(dirname)
                txtname=os.path.join(dirname,desc[0:6]+'.txt')
                if os.path.exists(txtname) == False:
                    with open (txtname,'w',encoding='utf-8') as file:
                        file.write(desc)
                photos=comments.find_element_by_class_name('tm-m-photos')
                photos=photos.find_element_by_class_name('tm-m-photos-thumb')
                photos=photos.find_elements_by_tag_name('li')
                for ph in photos:
                    phaddr=ph.get_attribute('data-src')
                    print(phaddr)
                    bigph=phaddr.split('_4')[0]
                    print(bigph)
                    imgname= os.path.join(dirname ,bigph.split('/')[-1])
                    if os.path.exists(imgname) :
                        continue
                    img=self.session_.get('http:'+bigph,headers=self.headers_,cookies=self.cookiejar_).content
                    print('正在爬取%s' %(bigph))
                    with open (imgname,'wb') as imgfile:
                        imgfile.write(img)
                    print('爬取成功%s' %(bigph))
                    time.sleep(2)
        except NoSuchElementException:
            print('No Element')
        except TimeoutException :
            print('TimeoutException')
        except:
            print('getPhoto exception')    
            pass

 


效果展示 

10.png
11.jpg
12.jpg
源碼下載地址
https://github.com/secondtonone1/python-
我的公眾號
wxgzh.jpg


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM