疫情期间
个人防护有哪些需要注意的事项?
专家提醒
日常要继续保持良好的
个人卫生防护习惯
坚持防疫的“三件套”和“五还要”
“三件套”:佩戴口罩、保持社交距离、注意个人卫生。
“五还要”:口罩还要戴、社交距离还要留、咳嗽喷嚏还要遮、双手还要经常洗、窗户还要尽量开。
这篇文章主要介绍了python selenium爬取京东6000多款口罩信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Selenium安装
在此之前我们首先要准备好selenium的配置和安装,如下:
selenium可以直接可以用pip安装。
pip install selenium
chromedriver安装
要注意的是chromedriver的版本一定要与Chrome的版本一致,不然就不起作用。
有两个下载地址分别如下:
1、http://chromedriver.storage.googleapis.com/index.html
2、https://npm.taobao.org/mirrors/chromedriver/
当然,你首先需要查看你的Chrome版本,在浏览器中输入
chrome://version 即可查看浏览器版本信息
目标确定
我们今天的任务就是爬取京东口罩
导入所需模块
以下为我们此次爬取jd所需的python库
importrandom
fromseleniumimportwebdriver
fromicecreamimportic
importtime
importcsv
目标网址
我们要获取的jd链接如下,我们要获取的内容包含口罩的标题、价格、评论数量、店铺名称、口罩详情和口罩标签等信息
https://search.jd.com/
打开浏览器并且加载网页内容
执行如下代码之后会自动跳转到我们所要爬取的jd页面
# 驱动加载
driver = webdriver.Chrome()
# 打开网站
driver.get('https://www.jd.com/')
# 等待网页加载完成,不是死等;加载完成即可
driver.implicitly_wait(10)
# 定位输入框并且输入搜索关键字
driver.find_element_by_css_selector('#key').send_keys('口罩')
driver.find_element_by_css_selector('#key').send_keys(Keys.ENTER)
我们要获取评论内容必须要拉到网页最底部才可以完全加载出li标签,这段逻辑我们交由js函数来实现
# 页面滑动函数
defdrop_down():
forpageinrange(1,12,2):
time.sleep(1)
j = page/9
js ='document.documentElement.scrollTop = document.documentElement.scrollHeight * %f'%j
driver.execute_script(js)
driver.find_element_by_css_selector('#key').send_keys(Keys.ENTER)
获取网页信息
如上分析,所有评论信息都存在网页对应的li标签之中
所以接下来我们的思路就很清晰;进入到ul标签去提取内部我们所需要的信息
# 获取所有的li标签
lis = driver.find_elements_by_css_selector('.gl-item')
print(len(lis))
'''
60
'''
提取网页信息
接下来我们就在li标签中提取我们所需要的信息
咱们再提取的时候如果你会一点点js的话就可以使用id(#),class(.)的方法,
如果你不懂的话直接右键copy xpat或者selector都是可以实现的
# 标题
title = li.find_element_by_css_selector('.p-name em').text.replace('\n','')
# 价格
price = li.find_element_by_css_selector('.p-price strong i').text
# 评论数量
cmts_num = li.find_element_by_css_selector('.p-commit strong a').text
#店铺名称
shop_name = li.find_element_by_css_selector('.p-shop span a').text
#口罩详情
details = li.find_element_by_css_selector('.p-img a').get_attribute('href')
# 店铺标签
icons = li.find_elements_by_css_selector('.p-icons i')
icon =','.join([x.textforxinicons])
ic(title, price, cmts_num, shop_name, details, icon)
'''
ic| title: '爱康尼(AIKANGNI)口罩自营3d立体黑色成人一次性口罩独立包装冬季保暖薄款透气V型显脸小男女款防尘30枚'
price: '27.00'
cmts_num: '1万+'
shop_name: '爱康尼(AIKANGNI)京东自营旗舰店'
details: 'https://item.jd.com/100011649767.html'
icon: '自营,放心购,秒杀,券39-5,满29-3'
ic| title: 'Dr.Chu初医生 医用隔离面罩一次性3D立体黑色白色防护防尘透气男女网红儿童口罩 【成人黑色】M码(50只装)'
price: '34.00'
cmts_num: '10万+'
shop_name: '初医生昂王专卖店'
details: 'https://item.jd.com/10028619571038.html'
icon: '秒杀,免邮,券29-3,每满200-30'
'''
数据保存
数据成功提取接下来我们将数据保存在csv中便于后续可视化展示
# 数据存储
f = open('jd口罩1.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
'标题',
'价格',
'评论数量',
'店铺名称',
'详情',
'标签'
])
# 写入表头
csv_writer.writeheader()
dit = {
'标题': title,
'价格': price,
'评论数量': cmts_num,
'店铺名称': shop_name,
'详情': details,
'标签': icon
}
csv_writer.writerow(dit)
多页获取
我们定个小目标,先获取300页数据
forpageinrange(1,300+1):
print(f'-------------正在抓取第{page}页-------------')
time.sleep(random.random() *3)# 延时防止被反爬
spider_page()
# 点击翻页
driver.find_element_by_css_selector('.pn-next').click()
总共获取了6000条测试数据,如果你有时间和兴趣可以获取更多哈
数据处理
接下来就是对数据去重和去空处理了,然后随机抽取五条数据展示如下:
# 读取数据
rcv_data = pd.read_csv('./jd口罩.csv')
# 删除重复记录
rcv_data = rcv_data.drop_duplicates()
# 删除缺失值
rcv_data = rcv_data.dropna()
# 抽样展示5条数据
print(rcv_data.sample(5))
'''
标题 价格 评论数量 店铺名称 详情 标签
87 n95口罩女夏季薄款一次性黑白色男潮款kn95kf94防尘不勒耳3d立体级别 成人款白色【2... 19.9 1万+ 德清元医疗器械专营店 https://item.jd.com/10035533519450.html 免邮,2件9折
190 恒助儿童医用外科口罩3层95%过滤熔喷布助力开学小孩4-12岁一次性医用口罩 儿童蓝色/100片装 19.9 2万+ 新世家族旗舰店 https://item.jd.com/71225626103.html 免邮
53 劲度 一次性医用外科口罩独立包装灭菌级成人口罩医用防细菌飞沫防护 50只装 38.9 20万+ 劲度(JINDU)京东自营旗舰店 https://item.jd.com/100017620290.html 自营
0 戴思一次性医用口罩透气轻薄成人3层医用口罩50只 独立包装 29.9 50万+ 戴思(DAISI)京东自营旗舰店 https://item.jd.com/100009140187.html 自营
142 超亚哆啦A梦联名款一次性成人医用外科口罩医疗防护三层透气 6.9 5万+ 超亚京东自营旗舰店 https://item.jd.com/100016314984.html 自营,放心购
'''
词云展示
标签词云展示图
好了今天的分析到此结束啦,有问题我们评论区见~~