Seleinum-爬取淘宝商品信息

本文分享了一套完整的淘宝商品爬虫实现方案,包括天猫、淘宝和1688店铺的商品ID抓取,以及商品详细信息和SKU信息的爬取逻辑。通过Selenium模拟真人操作,实现了动态加载内容的爬取,覆盖了不同类型的店铺页面结构。

直接上爬取逻辑代码,seleinum的使用可以百度

先爬item_id,再爬item的具体信息以及sku信息

淘宝店铺分天猫、淘宝和极有家,爬虫处理有些许不同
20201203-新增1688

查找url规律

天猫店铺:https://xxx.tmall.com/
淘宝店铺:https://xxx123.taobao.com/
1688店铺:https://xxx.1688.com/

商品详情:https://xxx123.taobao.com/category.htm # 商品详情链接通用
1688商品详情:https://xxx.1688.com/page/offerlist.htm

天猫商品详情sku:https://detail.tmall.com/item.htm?id=123456&skuId=123456
淘宝商品详情sku:https://item.taobao.com/item.htm?id=123456
极有家商品详情sku:https://item.taobao.com/item.htm?id=123456
1688商品详情sku:https://detail.1688.com/offer/123456.html

先爬item_id

以下代码三种店铺通用>.< [终于从三个函数浓缩成一个函数了,哈哈哈]

# 浏览器设置[此处选择的谷歌]
chrom_driver = 'chromedriver存储地址'
browser = webdriver.Chrome(executable_path=chrom_driver, chrome_options=chrome_options)

# 打开商品店铺页面
browser.get(url + 'category.htm')
# 关闭登录窗口
try:
   self.driver.implicitly_wait(5)
   self.driver.find_element_by_id('sufei-dialog-close').click()
   self.driver.implicitly_wait(20)
except:
   pass
# 模拟真人滚动
self.driver.execute_script("window.scrollBy(0,1000)")
random_sleep()

# 等待下一页出现
next_page = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.J_SearchAsync')))
# 总页数
page_all = len(self.driver.find_elements_by_css_selector('.J_SearchAsync'))

item_id = []  # 用于存储爬取的item_id

while True:
   try:
       self.driver.execute_script("window.scrollBy(0,1000)")
       random_sleep()
       # 开始爬取商品基本信息
       selector = Selector(text=self.driver.page_source)
       # 商品item_id
       item_id += selector.css('.item::attr(data-id)').extract()
   except Exception as e:
       continue
   try:
       # 下一页
       next_page_a_tag = self.driver.find_element_by_css_selector('.J_SearchAsync.next')
       next_page_a_tag.click()
   except:
       break  # 下一页无法点击时,即最后一页,跳出循环
return list(set(item_id))
# 爬取结束后将item_id存到数据库GoodsItems中
# 1688
item_id = []
while True:
    try:
        self.driver.execute_script("window.scrollBy(0,1000)")
        random_sleep()
        # 开始爬取商品基本信息
        selector = Selector(text=self.driver.page_source)
        # 商品item_id
        item_id += selector.css('.offer-list-row>li::attr(data-offerid)').extract()
    except Exception as e:
        continue
    try:
        # 下一页
        next_page_a_tag = self.driver.find_element_by_css_selector('.pagination>.next')
        random_sleep()
        random_sleep()
        next_page_a_tag.click()
        random_sleep()
        random_sleep()
    except:
        break
return list(set(item_id))

再根据item_id查找商品详细信息及sku信息

因为每种店铺的商品详情页面有很大不同,无法浓缩成一个函数,所以在数据库GoodsItems中应该添加一个店铺来源字段,用于判断商品的来源,从而决定执行哪个函数
天猫

self.driver.get('https://detail.tmall.com/item.htm?id={item_id}'.format(item_id=item_id))
# 关闭登录窗口
try:
    self.driver.implicitly_wait(5)
    self.driver.find_element_by_id('sufei-dialog-close').click()
    self.driver.implicitly_wait(20)
except:
    pass

# 模拟真人浏览滑动
self.driver.execute_script("window.scrollBy(0,1000)")
random_sleep()
self.driver.execute_script("window.scrollBy(0,-1000)")
random_sleep()

try:
    # 等待价格出现
    price = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.tm-price')))
    # 等待轮播图出现
    banner_images = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#J_ImgBooth')))
except:
    self.driver.get('https://detail.tmall.com/item.htm?id={item_id}'.format(item_id=item_id))

html = self.driver.page_source
selector = Selector(text=html)

try:
    down_text = self.driver.find_element_by_xpath('//div[@class="sold-out-left"]/strong')
    if down_text:
        print('此商品已下架'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值