selenium爬取淘宝店铺数据

这里爬取的是某宝店铺的商品,获取的是框框里面的信息(百丽的信息)
价格
累计评价
销量
活动
名称
连接
在这里插入图片描述
运行方式:
1。会自动弹出一个浏览器,打开淘宝
2。然后会弹出一个登入界面(手机扫描登入),输入账号会有验证,扫描快一些。.
3.会自动的选择店铺(店铺有时会没点击,没点击的话要返回手动点击店铺输入店铺名称,然后手动点击搜索),输入店铺名字,然后点击搜索,会打开下面界面
在这里插入图片描述

4.然后会自动点击第一个店铺,会在另一个窗口弹出,会自动等待会,然后会自动点击所有宝贝。
在这里插入图片描述
在这里插入图片描述
5.然后会在第三个界面打开下图,又需要加载数据等待会。
在这里插入图片描述
6.等待完了会在第四个窗口打开每个商品的详情,然后自动会爬取里面的数据和第一个图片。
爬取完了会自动关闭第四个窗口,然后跳转到第三个窗口,然后从新打开第四个窗口爬取数据循环。
在这里插入图片描述
7.效果图如下:
在这里插入图片描述
在这里插入图片描述

话不多说,代码如下(只是已百丽为例,其他店铺需要修改下xpath参数就可以)。

import re
import pymysql
import random
from time import sleep
from lxml import etree
from urllib.request import urlretrieve
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


class TaobaoSpider(object):
    ask = []
    # driver_path = r'D:\Python\Python38\Scripts\chromedriver.exe'
    def __init__(self):
        self.url = 'https://www.taobao.com/'
        self.options = webdriver.ChromeOptions()
        self.options.add_argument("--proxy-server=http://171.35.167.32:9999")   ##设置代理IP
        # self.driver = webdriver.Chrome(chrome_options=self.options)
        # self.driver = webdriver.Chrome(executable_path=TaobaoSpider.driver_path)
        self.driver = webdriver.Chrome()
        self.baili_url = 'https://ebelle.tmall.com/search.htm?spm=a1z10.1-b-s.w17839663-14900112884.9.44ac5a3dvUsdOH'
        self.own_baili = 'https://ebelle.tmall.com/search.htm?spm=a1z10.3-b-s.w17839663-14900112884.9.346e3897Pm6zl7'



    def run(self):

        wait = WebDriverWait(driver=self.driver,timeout= 20)
        self.driver.get(self.url)
        wait.until(EC.presence_of_all_elements_located((By.XPATH,'//div[@class="site-nav-menu-hd"]')))##等待所有元素加载出来
        self.driver.find_element_by_xpath('//a[@class="h"]').click()   ##点击登入,让后自己扫描登入
        sleep(10)
        print('已经登入啦')
        wait.until(EC.presence_of_all_elements_located((By.XPATH, '//a[@class="site-nav-login-info-nick "]')))##等待所有元素加载出来
        self.driver.find_element_by_xpath('//*[@class="J_SearchTab shop-search-tab"]').click() ##点击店铺
        print('已经点了店铺')
        sleep(2)
        self.driver.find_element_by_xpath('//*[@id="q"]').send_keys('百丽旗舰店') ##输入百丽旗舰店
        print('输入了店铺')
        sleep(2)
        wait.until(EC.presence_of_all_elements_located((By.XPATH, '//*[@id="J_TSearchForm"]/div[1]/button')))##等待页面加载完
        self.driver.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button').click()   ##点击搜索
        wait.until(EC.presence_of_all_elements_located((By.XPATH, '//*[@id="list-container"]')))  ##等待页面加载完
        self.driver.find_element_by_xpath('//*[@id="list-container"]/li[1]/ul/li[1]/a/img').click() ##点击百丽店,然后会弹出第二个框
        self.driver.switch_to.window(self.driver.window_handles[1])  ###跳转到第二个界面
        wait.until(EC.presence_of_all_elements_located((By.XPATH, '//*[@class="jdb abs a9Odl-P7uf"]')))##等待页面加载完
        self.driver.find_element_by_xpath('//*[@class="jdb abs a9Odl-P7uf"]').click()  ##点击所有宝贝,然后会跳出第三个窗口
        self.driver.switch_to.window(self.driver.window_handles[2])  ###跳转到第三个界面
        sleep(3)
        source = self.driver.page_source
        link = etree.HTML(source)
        sleep(2)
        htmls = link.xpath('//div[@class="item4line1"]//a[@class="J_TGoldData"]/@href')   #获取连接
        sleep(2)
        for html in htmls:          ##详情页面
            TaobaoSpider.ask.append(html)
            self.parse_url(html)
            TaobaoSpider.ask.clear()
            sleep(random.randint(1,4))

    def parse_url(self,url):
        wait =WebDriverWait(driver=self.driver,timeout=1000)
        self.driver.execute_script("window.open('%s')" % url)  #第4个窗口打开
        self.driver.switch_to.window(self.driver.window_handles[3])  ###跳转到第4个界面
        wait.until(EC.presence_of_all_elements_located((By.XPATH,'//*[@id="detail"]')))  ##等待
        source = self.driver.page_source
        self.jiexi_url(source)
        self.driver.close()
        self.driver.switch_to.window(self.driver.window_handles[2])  ##跳转到第三个界面

    def jiexi_url(self,source):
        html = etree.HTML(source)
        self.img_download(html)
        name = html.xpath('//*[@id="J_DetailMeta"]/div[1]/div[1]/div/div[1]/h1/text()')#产品名
        price = html.xpath('//*[@id="J_PromoPrice"]/dd/div/span/text()') #价格
        sale = html.xpath('//*[@id="J_DetailMeta"]/div[1]/div[1]/div/ul/li[1]/div/span[2]/text()')  #月销
        shaky = html.xpath('//*[@id="J_DetailMeta"]/div[1]/div[1]/div/div[2]/dl[3]/div[1]/dd/text()')  ##活动
        assess = html.xpath('//*[@id="J_ItemRates"]/div/span[2]/text()')  ##评价
        content = {
            'url' : TaobaoSpider.ask,
            'name': name,
            'price': price,
            'sale' : sale,
            'shaky': shaky,
            'assess': assess
        }

        print(content)
        sleep(2)
    def img_download(self,url):
        img_url = url.xpath('//div[@class="tb-booth"]//img')  ##img标签
        aa = img_url[0].attrib  ##获取img标签所有属性,这是一个字典的形式
        name = aa['alt']  # 获取标签中alt的值名字
        url = aa['src']  # 获取标签中alt的值网页
        filename = name + '.jpg'
        urlretrieve(url, filename)

if __name__ == '__main__':
    spider = TaobaoSpider()
    spider.run()





  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值