前言
工欲善其事,必先利其器
本期我们使用Pycharm+python3.7.9+selenium实现对京东月饼等信息的爬取,爬取信息不限于月饼,可以是京东上所有在销商品
selenium(WEB自动化测试工具)
Selenium 1() 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。
# selenium安装
selenium下载地址
## 选择和电脑对应的版本下载即可
## 安装selenium
解压到python安装根目录下
# 正文
实例化一个浏览器对象
driver = webdriver.Chrome()
driver.get('https://www.jd.com')
定义搜索的关键字
打开浏览器会发现URL的格式
搜索功能
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)
解析商品数据
通过定位发现,商品都有gl-item属性
拿到商品集合
# 解析商品数据
def parse_product():
# 拿到商品集合
lis = driver.find_elements_by_css_selector('.gl-item')
解析商品名称
通过定位发现,商品名称在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
解析商品价格
通过定位发现,商品价格在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 + '元'
解析商品评价数量
通过定位发现,商品价格在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
解析店铺名称
通过定位发现,商品价格在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文件,搜索不仅限于月饼,也可用于其他商品。
PS:本文所爬取的数据无任何敏感数据,此教程仅供学习使用,严谨从事非法活动,法网恢恢疏而不漏。