阅读 1369

【Python】手把手教你用selenium爬取某东月饼数据

我正在参加中秋创意投稿大赛,详情请看:中秋创意投稿大赛

前言

工欲善其事,必先利其器

本期我们使用Pycharm+python3.7.9+selenium实现对京东月饼等信息的爬取,爬取信息不限于月饼,可以是京东上所有在销商品

selenium(WEB自动化测试工具)

Selenium [1]  是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla FirefoxSafariGoogle ChromeOpera,Edge等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .NetJavaPerl等不同语言的测试脚本。

selenium安装

selenium下载地址

选择和电脑对应的版本下载即可

image.png

安装selenium

解压到python安装根目录下

image.png

正文

实例化一个浏览器对象

driver = webdriver.Chrome()
driver.get('https://www.jd.com')
复制代码

定义搜索的关键字

打开浏览器会发现URL的格式

image.png

搜索功能

def get_product(key):
    # 定位到搜索框
    driver.find_element_by_css_selector('#key').send_keys(keyword)
    # 定位到搜索按钮
    driver.find_element_by_css_selector('.button').click()
    # 防止超时,等待加载,设置为10S
    driver.implicitly_wait(10)
    # 最大化浏览器效果
复制代码

解决图片懒加载

# 解决懒加载
def drop_down():
    for x in range(1,11,2):
        time.sleep(0.5)
        # 控制翻页
        j = x / 10
        js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j
        driver.execute_script(js)
复制代码

解析商品数据

image.png 通过定位发现,商品都有gl-item属性

拿到商品集合

# 解析商品数据
def parse_product():
    # 拿到商品集合
    lis = driver.find_elements_by_css_selector('.gl-item')
复制代码

解析商品名称

image.png 通过定位发现,商品名称在p-name下的em标签中

# 解析商品数据
def parse_product():
    # 拿到商品集合
    lis = driver.find_elements_by_css_selector('.gl-item')

    for li in lis:
      try:
        # 商品名称
        product_name = li.find_element_by_css_selector('div.p-name a em').text
复制代码

解析商品价格

image.png 通过定位发现,商品价格在p-price下的i标签中

# 解析商品数据
def parse_product():
    # 拿到商品集合
    lis = driver.find_elements_by_css_selector('.gl-item')

    for li in lis:
      try:
        # 商品名称
        product_name = li.find_element_by_css_selector('div.p-name a em').text
        # 商品价格
        product_price = li.find_element_by_css_selector('div.p-price strong i').text + '元'
复制代码

解析商品评价数量

image.png 通过定位发现,商品价格在p-commit下的a标签中

# 解析商品数据
def parse_product():
    # 拿到商品集合
    lis = driver.find_elements_by_css_selector('.gl-item')

    for li in lis:
      try:
        # 商品名称
        product_name = li.find_element_by_css_selector('div.p-name a em').text
        # 商品价格
        product_price = li.find_element_by_css_selector('div.p-price strong i').text + '元'
        # 商品评价数量
        product_comment =  li.find_element_by_css_selector('div.p-commit strong a').text
复制代码

解析店铺名称

image.png 通过定位发现,商品价格在span下的a标签中

# 解析商品数据
def parse_product():
    # 拿到商品集合
    lis = driver.find_elements_by_css_selector('.gl-item')

    for li in lis:
      try:
        # 商品名称
        product_name = li.find_element_by_css_selector('div.p-name a em').text
        # 商品价格
        product_price = li.find_element_by_css_selector('div.p-price strong i').text + '元'
        # 商品评价
        product_comment =  li.find_element_by_css_selector('div.p-commit strong a').text
        # 店铺名称
        product_shop_name = li.find_element_by_css_selector('span.J_im_icon a').text

       #打印数据 
       print(product_shop_name,product_price,product_comment,product_shop_name)
复制代码

解析数据保存到csv文件

  with open('data_jd.csv',mode='a',encoding='utf-8',newline='') as f:
      csv_write = csv.writer(f)
      csv_write.writerow([product_name,product_price,product_name,product_shop_name])
except Exception as e:
 print(e)
复制代码

总结

到最后,本期教程完成了爬取京东月饼销售数据的操作,并保存到csv文件,搜索不仅限于月饼,也可用于其他商品。 image.png

PS:本文所爬取的数据无任何敏感数据,此教程仅供学习使用,严谨从事非法活动,法网恢恢疏而不漏。

文章分类
后端
文章标签