疫情期間
個人防護有哪些需要注意的事項?
專家提醒
日常要繼續保持良好的
個人衛生防護習慣
堅持防疫的“三件套”和“五還要”
“三件套”:佩戴口罩、保持社交距離、注意個人衛生。
“五還要”:口罩還要戴、社交距離還要留、咳嗽噴嚏還要遮、雙手還要經常洗、窗戶還要盡量開。
這篇文章主要介紹了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???自營,放心購
'''
詞云展示
標簽詞云展示圖
好了今天的分析到此結束啦,有問題我們評論區見~~