京东淘宝商品信息爬虫(python和selenium库)
(一)网站HTML元素分析
京东网的搜索不需要登录,淘宝网需要,本实验代码选择京东网,搜索“肉”后搜索结果中一个商品的源代码如下

目标数据在class=gl-item下
(二)使用浏览器实例登录并爬取商品数据
使用Selenium和WebDriver驱动程序自动登录京东商城,搜索指定的商品,并将商品的标题、价格、链接和评论量保存
导入库
import csv
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
创建WebDriver实例,选择适合的浏览器驱动程序,例如webdriver.Edge()用于Edge浏览器。
driver = webdriver.Edge()# 设置引擎为Edge,真实地打开一个Edge浏览器
打开京东商城网址,并使用driver.find_element()方法定位到搜索框,并输入待搜索的商品名称,这回选择“书包“,如果是淘宝网这一步回车后需要扫码登录
url = 'https://www.jd.com/'
driver.get(url)
want = input('请输入需要查询的商品\n')
input_search = driver.find_element(By.ID,'key')# 通过id=key定位到搜索框
# 在输入框中输入“书包”
input_search.send_keys(want)
# 模拟键盘回车Enter操作进行搜索,
input_search.send_keys(Keys.ENTER)
使用time.sleep()进行强制等待,确保页面内容加载完全。
sleep(3)
使用driver.find_elements()方法定位到商品列表,并依次提取商品的链接、标题名称、价格和评价数量,保存到字典中。
data=[]
goods = driver.find_elements(By.CLASS_NAME,'gl-item')
for good in goods:
# 获取商品链接
link = good.find_element(By.TAG_NAME,'a').get_attribute('href')
# 获取商品标题名称
title = good.find_element(By.CSS_SELECTOR,'.p-name em').text.replace('\n', '')
# 获取商品价格
price = good.find_element(By.CSS_SELECTOR,'.p-price strong').text.replace('\n', '')
# 获取商品评价数量
commit = good.find_element(By.CSS_SELECTOR,'.p-commit a').text
good_data = {
'商品标题':title,
'商品价格':price,
'商品链接':link,
'评论量':commit
}
data.append(good_data)
(三)数据保存为文件
创建CSV文件,实现数据的持久化。
file = path.join('good.csv')
# 以追加写入的方式将商品数据保存到文件中
header = ['商品标题', '商品价格', '商品链接', '评论量']
with open(file, 'a+', encoding='utf-8', newline='') as wf:
f_csv = csv.DictWriter(wf, header)
f_csv.writeheader()
f_csv.writerows(data)
使用driver.quit()方法关闭浏览器。
driver.quit()
实验结果(csv文件截图):

完整代码如下:
import csv
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from os import path
# 京东商城网址
url = 'https://www.jd.com/'
want = input('请输入需要查询的商品\n')
driver = webdriver.Edge()# 设置引擎为Chrome,真实地打开一个Chrome浏览器
driver.get(url)
driver.implicitly_wait(3)# 隐式等待,确保动态内容节点被完全加载出来——时间感受不到
#driver.maximize_window()# 最大化浏览器窗口,主要是防止内容被遮挡
input_search = driver.find_element(By.ID,'key')# 通过id=key定位到搜索框
# 在输入框中输入“口罩”
input_search.send_keys(want)
# 模拟键盘回车Enter操作进行搜索
input_search.send_keys(Keys.ENTER)
# 强制等待3秒
sleep(3)
data=[]
goods = driver.find_elements(By.CLASS_NAME,'gl-item')
for good in goods:
# 获取商品链接
link = good.find_element(By.TAG_NAME,'a').get_attribute('href')
# 获取商品标题名称
title = good.find_element(By.CSS_SELECTOR,'.p-name em').text.replace('\n', '')
# 获取商品价格
price = good.find_element(By.CSS_SELECTOR,'.p-price strong').text.replace('\n', '')
# 获取商品评价数量
commit = good.find_element(By.CSS_SELECTOR,'.p-commit a').text
good_data = {
'商品标题':title,
'商品价格':price,
'商品链接':link,
'评论量':commit
}
data.append(good_data)
file = path.join('good.csv')
# 以追加写入的方式将商品数据保存到文件中
header = ['商品标题', '商品价格', '商品链接', '评论量']
with open(file, 'a+', encoding='utf-8', newline='') as wf:
f_csv = csv.DictWriter(wf, header)
f_csv.writeheader()
f_csv.writerows(data)
driver.quit()
如果要爬取淘宝网则需重新分析网页,请参照上述代码补全,示例如下:
import requests
from bs4 import BeautifulSoup
import time
import re
from selenium import webdriver
from selenium.webdriver.common.by import By
# 京东商城网址
url = 'https://www.jd.com/'
want = input('请输入需要查询的商品\n')
driver = webdriver.Edge()
# 设置引擎为Chrome,真实地打开一个Chrome浏览器
driver.get('https://www.taobao.com/')
# 隐式等待,确保动态内容节点被完全加载出来——时间感受不到
driver.implicitly_wait(3)
# 最大化浏览器窗口,主要是防止内容被遮挡
driver.maximize_window()
time.sleep(2)
# 等待网页加载
driver.find_element(By.ID,'q').send_keys(want)
#找到搜索框标签,传入需要查询的内容
driver.find_element(By.CLASS_NAME,'tb-bg').click()
#点击搜索按钮