程序员怎样买东西呢---selenium爬取淘宝数据

*代有才人出,各领风骚数百 ——清·赵翼 《论诗五首·其二》
长江后浪推前浪,浮事新人换旧人 ——宋·刘斧《青琐高议》

东西用时间长了就该换新的了,特别是手机,这几年发展太快,APP是越来越大,内存是越来越不够用了,想要换新的手机,但不知道换什么,那今天就爬一下淘宝,看一下淘宝手机的数据,参考一下

我的开发环境:python3.8
计算机系统:Windows10
开发工具:pycharm
要用的包:selenium、csv、time
网址:https://www.taobao.com/
今天用的是自动化测试工具selenium,没有这个包的同学可以用pip install selenium 来安装
安装完之后还需要安装个浏览器驱动,我用的是谷歌浏览器

http://chromedriver.storage.googleapis.com/index.html
打开这个链接,找到你浏览器版本所对应的驱动,这是我的浏览器版本
程序员怎样买东西呢---selenium爬取淘宝数据

可以看到我的版本是94.0.4606.81 没有找到一样的就找低一个版本的

程序员怎样买东西呢---selenium爬取淘宝数据

选择对应的系统,我的是win系统

程序员怎样买东西呢---selenium爬取淘宝数据

把下载的压缩文件解压后,放到python解释器的当前文件夹下

程序员怎样买东西呢---selenium爬取淘宝数据

验证一下

from selenium.webdriver import Chrome

web = Chrome()
web.get('https://www.baidu.com')

如果正常出现网页就成功了,注意,一定要和你的版本相匹配,不然就会出现这样

程序员怎样买东西呢---selenium爬取淘宝数据

这个是我把浏览器更新之后驱动版本太低不支持了

至于其他浏览器在这里就不做太多的叙述了,流程大体相同,至于网站可以在网上找一下,下面进入正题

selenium是模拟人正常在浏览器上的操作,正常我们打开网页在搜索框输入内容点击搜索

import time
import csv
from selenium.webdriver import Chrome


def main():
    win.get('https://www.taobao.com/')
    win.find_element_by_xpath('//*[@id="q"]').send_keys(commodity)      # 点击搜索框,输入前面想要搜索的内容
    win.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button').click()     # 点击搜索按钮
    win.maximize_window()       # 将网页放大方便我们扫码登录
    time.sleep(15)              # 等待15秒 让我们有时间扫码


if __name__ == '__main__':
    commodity = input('想要查询的商品:')
    win = Chrome()
    main()

这里需要我们扫码登录才让我们搜索

我们在分析一下搜索界面,发现所有的商品数据都放在div标签里,可以看到不是所有的div里都有商品数据,是从第四个div开始有数据,这些div都有共同的特征,那就是属性都是一样的,可以用xpath通过class定位进行晒选

程序员怎样买东西呢---selenium爬取淘宝数据
程序员怎样买东西呢---selenium爬取淘宝数据

items = win.find_elements_by_xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq  "]')

这里需要注意一点因为我们选取了许多个div,所以find_elements_by_xpath里的element一定要加s,这样才返回列表,前面选取搜索框和搜索按钮的时候是不加s的

将获取的div遍历取出我们想要数据

    for item in items:
        # 旗舰店
        store = item.find_element_by_xpath('.//div[@class="shop"]/a').text
        # 商品简述
        desc = item.find_element_by_xpath('./div[2]/div[2]/a').text
        # 价格
        price = item.find_element_by_xpath('./div[2]/div/div/strong').text
        # 人数
        num = item.find_element_by_xpath('.//div[@class="deal-cnt"]').text
        # 地址
        address = item.find_element_by_xpath('.//div[@class="location"]').text

再将获取的数据存储到以搜索名称命名的csv文件中

        with open(f'{commodity}.csv', mode='a', newline='', encoding='utf-8-sig')as f:
            csv_writ = csv.writer(f, delimiter=',')
            csv_writ.writerow([store, desc, price, num, address])

附上结果

程序员怎样买东西呢---selenium爬取淘宝数据

这次先这样下次再将获取到的数据进行可视化生成柱状图、饼状图及地图分布

全部代码如下

import time
import csv
from selenium.webdriver import Chrome


def get_data():
    items = win.find_elements_by_xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq  "]')
    for item in items:
        # 旗舰店
        store = item.find_element_by_xpath('.//div[@class="shop"]/a').text
        # 商品简述
        desc = item.find_element_by_xpath('./div[2]/div[2]/a').text
        # 价格
        price = item.find_element_by_xpath('./div[2]/div/div/strong').text
        # 人数
        num = item.find_element_by_xpath('.//div[@class="deal-cnt"]').text
        # 地址
        address = item.find_element_by_xpath('.//div[@class="location"]').text
        with open(f'{commodity}.csv', mode='a', newline='', encoding='utf-8-sig')as f:
            csv_writ = csv.writer(f, delimiter=',')
            csv_writ.writerow([store, desc, price, num, address])


def main():
    win.get('https://www.taobao.com/')
    win.find_element_by_xpath('//*[@id="q"]').send_keys(commodity)      # 点击搜索框,输入前面想要搜索的内容
    win.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button').click()     # 点击搜索按钮
    win.maximize_window()       # 将网页放大方便我们扫码登录
    time.sleep(15)              # 等待15秒 让我们有时间扫码
    get_data()


if __name__ == '__main__':
    commodity = input('想要查询的商品:')
    win = Chrome()
    main()
上一篇:python 解析网页html,提取需要的页面信息


下一篇:python+selenium 破解滑动验证案列