Python爬虫案例:采集青创网批发商品数据(附代码)
开发环境
- Python 3.8
- Pycharm 2021.2
- selenium >>> pip install selenium==3.141.0 (指定版本安装)
- time
- csv
selenium 模拟人的行为去操作浏览器
正常爬虫 >>> requests Python代码模拟浏览器对于服务器发送请求
selenium >>> 用python代码 >>> 浏览器驱动 >>> 浏览器
# 导入模块 from selenium import webdriver from selenium.webdriver.common.keys import Keys # 导入csv模块 import csv # 导入时间模块 import time # 输入你想要搜索的商品关键词: key_word = input('请输入你搜索关键词: ') f = open(f'{key_word}商品.csv', mode='a', encoding='utf-8', newline='') # 快速替换小技巧 选择要替换内容 按住ctrl + R 输入 正则表达式匹配规则 替换 csv_writer = csv.DictWriter(f, fieldnames=[ '标题', '销量', '价格', '货号', '店铺名字', '店铺年份', '地址', '详情页', ]) csv_writer.writeheader() # 写入表头 # 实例化一个浏览器对象 driver = webdriver.Chrome() # 不指定路径 1. 你浏览器驱动文件和代码放在一起的 2. 浏览器驱动文件放在python安装目录下面 # 打开网站 driver.get('https://www.17qcc.com/') # 定位元素标签, 就可以用 css 或者 xpath # 通过css选择器查找元素 driver.find_element_by_css_selector('#keywords').send_keys(key_word) # driver.find_elements_by_css_selector() 取多个标签 driver.find_element_by_css_selector('#keywords').send_keys(Keys.ENTER) # time.sleep(10) 死等 一定要等够10秒才会继续下面代码 def get_shop_info(): driver.implicitly_wait(10) # 隐式等待10s 等他数据加载完成 什么时候加载完 就继续运行下面的代码 # lis返回的是列表, 元素个数只有70个, 71取不到所以报错 # lis[0] 也报错 >>>> 你解析数据没有提取出来, 返回的 空列表 [] # 解析数据 取值报错 1. 解析语法 写的有问题 2. 服务器没有给我们返回想要的数据 (反爬了) lis = driver.find_elements_by_css_selector('#productlist li') for li in lis: title = li.find_element_by_css_selector('.rowtitle a ').text # 标题 sell = li.find_element_by_css_selector('.viewpay').text.replace('已售', '') # 销量 price = li.find_element_by_css_selector('.brprice span').text.replace('¥', '') # 价格 shop_num = li.find_element_by_css_selector('.sizep').text.replace('货号:', '') # 货号 shop_name = li.find_element_by_css_selector('.shop a').text # 店铺名字 shop_year = li.find_element_by_css_selector('.age').text # 店铺年份 address = li.find_element_by_css_selector('.radd').get_attribute('title') # 地址 href = li.find_element_by_css_selector('.rowtitle a').get_attribute('href') # 详情页 # 保存数据 dit = { '标题': title, '销量': sell, '价格': price, '货号': shop_num, '店铺名字': shop_name, '店铺年份': shop_year, '地址': address, '详情页': href, } csv_writer.writerow(dit) print(title, sell, price, shop_num, shop_name, shop_year, address, href) driver.find_element_by_css_selector('.next').click() for page in range(1, 11): print(f'==============================正在爬取第{page}页数据内容==============================') time.sleep(1) get_shop_info() driver.quit()