爬取某东商品数据 - Python

爬取某东商品数据,没有分页。

"""
    采集某东数据
"""
import random
import time
import csv
from selenium import webdriver


# 传入关键词进行搜索
def get_product(keyword):
    driver.find_element_by_css_selector('#key').send_keys(keyword) # 找到输入框并填写关键词
    time.sleep(random.randint(2, 10)) # 休眠,反爬的一种
    driver.find_element_by_css_selector('#search > div > div.form > button').click() # 找到搜索按钮并点击
    driver.maximize_window() #  最大化窗口
    driver.implicitly_wait(10) # 隐式等待,等待页面加载完,是智能等待的一种。


# 操作滚动下拉条,以应对懒加载
def drop_down():
    for i in range(1, 11, 2): # 取的是13579
        j = i / 9 # 每次循环取值
        js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % (j)
        # 运行js代码
        time.sleep(random.randint(2, 10)) # 尽量模拟人
        driver.execute_script(js) #

# 开始解析数据
def parse_data(keyword):
    lis = driver.find_elements_by_css_selector('.gl-item') # 获取商品列表

    f = open(f'某东数据 - {keyword}.csv', mode='a', encoding='utf-8-sig', newline='')
    csvWriter = csv.DictWriter(f, fieldnames=[
        '标题',
        '价格',
        '评论统计',
        '供应商',
    ])
    csvWriter.writeheader() # 写入表头
    # 循环读取列表
    for li in lis:
        name = li.find_element_by_css_selector('.gl-item a em').text # 产品标题
        price = li.find_element_by_css_selector('.p-price strong i').text # 价格
        reviewcount = li.find_element_by_css_selector('div.p-commit strong a').text # 评论统计
        vendor = li.find_element_by_css_selector('.J_im_icon a').get_attribute('title') # 供应商

        dit = {
            '标题':name,
            '价格':price,
            '评论统计':reviewcount,
            '供应商':vendor,
        }
        print(dit)
        csvWriter.writerow(dit)
keyword = input('请输入关键词进行搜索:')


url = 'https://www.某东.com'
driver = webdriver.Chrome()
driver.get(url) # 请求页面

# 调用函数
get_product(keyword)
# 滚动下拉,以应对懒加载
drop_down()
# 开始解析数据
parse_data(keyword)

 

posted @ 2021-11-03 20:23  、一叶孤城  阅读(75)  评论(0编辑  收藏  举报