爬取某东商品数据,没有分页。
""" 采集某东数据 """ 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)