• Python爬取某宝商品数据案例:100页的价格、购买人数等数据


    前言

    随着互联网时代的到来,人们更加倾向于互联网购物,某宝又是电商行业的巨头,在某宝平台中有很多商家数据,今天带大家使用python+selenium工具获取这些公开的。
    在这里插入图片描述

    本篇文章适合Python零基础、对爬虫数据采集感兴趣的同学!

    环境介绍:

    python 3.6
    pycharm
    selenium
    time

    selenium简介

    自动化测试工具,驱动浏览器帮助我们获取到渲染之后的数据

    模仿人的行为操作浏览器(用户行为加上代码逻辑的结合)

    安装模块

    pip install selenium

    步骤

    安装Webdriver

    打开Google浏览器,点击进入设置界面
    在这里插入图片描述
    进入界面后点击关于Chrome,然后找到你Google浏览器的版本,安装Webdriver要对应浏览器的版本
    在这里插入图片描述
    在这里插入图片描述

    导入模块
    import time
    import re
    import csv
    
    from selenium import webdriver
    from selenium.webdriver import ActionChains
    
    from 淘宝爬虫 import constans
    入口测试代码
    def search_product(key):
        """模拟搜索商品,登陆账户,获取最大页数"""
        driver.get('http://www.taobao.com')
        driver.find_element_by_id('q').send_keys(key)  # 输入框输入商品关键字
        driver.find_element_by_class_name('btn-search').click()  # 点击搜索按钮
        driver.implicitly_wait(10)  # 隐式等待
        driver.maximize_window()  # 最大化浏览器
    
    def main()
       search_product(keyword)
        
    if __name__ == '__main__':
        keyword = input('请输入你要查询的商品数据:')
        driver = webdriver.Chrome()
        main()

    在这里插入图片描述

    解决登陆和解决滑块验证
        driver.find_element_by_xpath('//*[@id="fm-login-id"]').send_keys(constans.USERNAME)  # 找到用户名输入账号
        time.sleep(1)
        driver.find_element_by_xpath('//*[@id="fm-login-password"]').send_keys(constans.PASSWORD)  # 找到密码框输入密码
        time.sleep(2)
        
        login = driver.find_element_by_xpath("//span[contains(@class, 'btn_slide')]")  # 找到滑动验证码滑块  手写
        action = ActionChains(driver)  # 创建动作连对象
        action.click_and_hold(on_element=login)  # 点击滑块维持动作
        action.move_by_offset(xoffset=258, yoffset=0) # 设置动作链坐标长度
        action.pause(0.5).release().perform()  # 设置动作链执行时间  释放鼠标  执行动作链
        driver.find_element_by_xpath('//*[@id="login-form"]/div[4]/button').click()  # 找到登陆按钮点击
        driver.implicitly_wait(10)  # 隐式等待

    在这里插入图片描述

    解析数据
    def get_product(): 
      
        for div in divs:
            info = div.find_element_by_xpath('.//div[@class="row row-2 title"]/a').text  # 商品名称
            price = div.find_element_by_xpath('.//strong').text + ''  # 商品价格
            deal = div.find_element_by_xpath('.//div[@class="deal-cnt"]').text  # 付款人数
            name = div.find_element_by_xpath('.//div[@class="shop"]/a').text  # 店铺名称
            print(info, price, deal, name, sep='|')  # 分隔符
            with open('data2.csv', 'a', newline='') as csvfile:  # newline=''  指定一行一行写入
                csvwriter = csv.writer(csvfile, delimiter=',')  # delimiter=','  csv数据的分隔符
                csvwriter.writerow([info, price, deal, name])

    运行代码,效果如下图:
    在这里插入图片描述
    这样就可以获取第一页的数据了

    运行代码,效果如下图:
    在这里插入图片描述

    解析页码
     page = driver.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/div[1]').text  # 找到页码标签
        page = re.findall('(d+)', page)[0]
        # print('商品页数:', page)
        return int(page)
    
    def main():
        """程序的入口"""
        print('正在爬取第1页的数据')
        page = search_product(keyword)
        get_product()
    
        page_num = 1
        while page_num != page:
            print('*' * 100)
            print('正在爬取第{}页的数据'.format(page_num + 1))
            print('*' * 100)
            driver.get('https://s.taobao.com/search?q={}&s={}'.format(keyword, 44 * page_num))  # 拼接产品url地址
            driver.implicitly_wait(10)  # 浏览器等待方法
            get_product()
            page_num += 1
    
        driver.quit()

    最后运行代码,就可以爬取100页的数据了
    在这里插入图片描述

  • 相关阅读:
    How to Enable Trace or Debug for APIs executed as SQL Script Outside of the Applications ?
    Android中MVC、MVP、MVVM具体解释
    破坏性创新第一原则
    Android学习笔记(八)——显示运行进度对话框
    Hadoop知识汇总
    mybatis collection和association使用区别
    mybatis $和#
    IDEA新建一个多maven模块工程(有图)
    可输入的下拉框
    springboot 使用i18n进行国际化
  • 原文地址:https://www.cnblogs.com/hhh188764/p/13178656.html
Copyright © 2020-2023  润新知