網(wǎng)絡爬蟲項目實戰(zhàn) 課件7-2 購物Selenium爬蟲實戰(zhàn)(項目實施)_第1頁
網(wǎng)絡爬蟲項目實戰(zhàn) 課件7-2 購物Selenium爬蟲實戰(zhàn)(項目實施)_第2頁
網(wǎng)絡爬蟲項目實戰(zhàn) 課件7-2 購物Selenium爬蟲實戰(zhàn)(項目實施)_第3頁
網(wǎng)絡爬蟲項目實戰(zhàn) 課件7-2 購物Selenium爬蟲實戰(zhàn)(項目實施)_第4頁
網(wǎng)絡爬蟲項目實戰(zhàn) 課件7-2 購物Selenium爬蟲實戰(zhàn)(項目實施)_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

項目7購物Selenium爬蟲項目網(wǎng)絡爬蟲實戰(zhàn)項目式教程《網(wǎng)絡爬蟲項目實戰(zhàn)》高級篇7.2任務分解7.1項目介紹7.3項目實施目錄Content7.4課后練習7.5能力拓展7.3.1項目實施->數(shù)據(jù)采集(1)轉到Tomcat安裝目錄下的bin目錄,運行startup.bat后,打開Chrome,訪問:50001/makeup/index.html,顯示網(wǎng)站首頁,代表Tomcat運行正常。如下圖所示。7.3.1項目實施->數(shù)據(jù)采集(2)打開PyCharm,選擇CreateNewProject,打開NewProject窗口,創(chuàng)建項目makeup,選擇“Existinginterpreter”選項,Interpreter選擇Anaconda安裝目錄下的python.exe。如下圖所示。7.3.1項目實施->數(shù)據(jù)采集(3)創(chuàng)建makeup_spider.py,打開網(wǎng)站首頁后關閉,測試ChromeDriver。(4)運行makeup_spider.py,看到Chrome瀏覽器打開網(wǎng)站首頁,然后關閉瀏覽器。#encoding=utf-8importtimefromseleniumimportwebdriverstart_url=":50001/makeup/index.html"defmain():#打開首頁

browser.get(start_url)#顯示等待2秒鐘

time.sleep(2)if__name__=='__main__':#初始化ChromeDriverbrowser=webdriver.Chrome()main()#退出瀏覽器,并釋放資源

browser.quit()7.3.1項目實施->數(shù)據(jù)采集關閉瀏覽器Selenium關閉瀏覽器有2種方式。(1)close(2)quit不僅關閉瀏覽器,并且退出ChromeDriver,釋放占用的資源。關閉瀏覽器,但是不會退出ChromeDriver。7.3.1項目實施->數(shù)據(jù)采集(5)打開網(wǎng)站首頁,找到搜索輸入框,點擊鼠標右鍵,選擇“檢查”,在右邊“Elements”窗口查找搜索輸入框和搜索按鈕,對照左邊窗口的顯示,找到對應的元素。從下圖看出,搜索按鈕的CSS模式為“button.btn-search”。7.3.1項目實施->數(shù)據(jù)采集(6)在makeup_spider.py的main方法中添加跳轉商品列表首頁的代碼。defmain():#打開首頁,解析總頁碼

browser.get(start_url)time.sleep(2)#根據(jù)關鍵字發(fā)送搜索請求

search_input=browser.find_element_by_css_selector("#q")search_input.send_keys("彩妝")search_button=browser.find_element_by_css_selector("button.btn-search")search_button.click()#最大化瀏覽器后,等待2秒鐘讓頁面完成載入

browser.maximize_window()browser.implicitly_wait(2)time.sleep(2):顯式等待,必須等待2秒,然后執(zhí)行后面的代碼。implicitly_wait(2):隱式等待,5秒鐘內只要找到了元素就開始執(zhí)行,5秒鐘后未找到,就超時。當頁面元素比較多,比如有提示框,頁面加載比較慢是,time_sleep更合適;而implicityly_wait適合頁面元素不是很多的情況,節(jié)約執(zhí)行時間。7.3.1項目實施->數(shù)據(jù)采集(7)運行makeup_spider.py,看到從網(wǎng)站首頁跳轉到商品列表首頁。7.3.1項目實施->數(shù)據(jù)采集CSS選擇器CSS選擇器用于選擇目標元素的樣式的模式。常見模式如下:7.3.1項目實施->數(shù)據(jù)采集(8)在網(wǎng)站首頁單擊“搜索”按鈕,跳轉到商品列表首頁。然后鼠標停留在一個商品后右鍵,選擇“檢查”,在右邊“Elements”窗口查找div元素。對照左邊窗口的顯示,找到商品對應的元素。從下圖看出,商品的CSS模式為“div.ctx-box”。7.3.1項目實施->數(shù)據(jù)采集(9)鼠標停留在左面頁面窗口中第1件商品的名稱,然后點擊鼠標右鍵后,選擇“檢查”,查找商品名稱的CSS路徑。從下圖看出,商品名稱的CSS模式為“a.J_ClickStat”。7.3.1項目實施->數(shù)據(jù)采集(10)鼠標停留在左面頁面窗口中第1件商品的名稱,然后點擊鼠標右鍵后,選擇“檢查”,查找商品價格的CSS路徑。從右圖看出,商品價格的CSS模式為“div>strong”。(11)類似上述步驟,查找商品<div>元素下其他商品屬性,單數(shù)CSS模式為“div.deal-cnt”,經(jīng)銷商CSS模式為a.shopname>span:nth-child(2),貨源CSS模式為“div.location”。7.3.1項目實施->數(shù)據(jù)采集(12)根據(jù)上面查到的商品CSS模式,在makeup_spider.py中添加get_data方法,從商品列表首頁解析商品的名稱、價格、單數(shù)、經(jīng)銷商、貨源。……importcsv……#從當前頁面獲取數(shù)據(jù)defget_data():items=browser.find_elements_by_css_selector('div.ctx-box')foriteminitems:name=item.find_element_by_css_selector('a.J_ClickStat').textprice=item.find_element_by_css_selector('div>strong').textnum_buyers=item.find_element_by_css_selector('div.deal-cnt').textshop=item.find_element_by_css_selector('a.shopname>span:nth-child(2)').textaddress=item.find_element_by_css_selector('div.location').textwithopen('makeup_raw.csv',mode='a',encoding='utf-8',newline='')asf:csv_writer=csv.writer(f,delimiter=',')csv_writer.writerow([name,price,num_buyers,shop,address])defmain():……print("正在爬取首頁")get_data()7.3.1項目實施->數(shù)據(jù)采集(13)運行makeup_spider.py,結果如下圖所示。韓束紅石榴護膚品套裝女巨補水保濕水乳全套化妝品官方旗艦店正品,89.00,800+人付款,韓束領航專賣店,陜西西安za姬芮中樣小樣旅行套裝水乳護膚化妝品試用裝恒潤嬌養(yǎng)透亮大樣,14.90,14人付款,za姬芮美幻專賣店,江蘇徐州熊津化妝品蕊痕bb霜正品官方旗艦店孕婦cc霜晶透精華粉底霜套裝,98.00,100+人付款,美舍雅閣煙臺店,山東煙臺……妖制菠蘿派蛋黃派氣墊皮面透氣粉撲美妝蛋隔離粉底液專用化妝海綿,21.90,8萬+人付款,妖制旗艦店,廣東深圳MSQ/魅絲蔻15支奶咖專業(yè)化妝刷套裝超柔軟毛正品眼影刷子美妝工具,168.00,2000+人付款,魅絲蔻旗艦店,江西南昌爾木萄粉撲粉底液專用美妝蛋氣墊海綿粉餅干濕兩用葡旗艦店爾女萄,16.90,5萬+人付款,鮑鮑1128,江蘇南京7.3.1項目實施->數(shù)據(jù)采集(14)鼠標停留在左面頁面窗口中的“共5頁”,然后點擊鼠標右鍵后,選擇“檢查”,查找頁面元素的對應CSS路徑。從下圖看出,總頁碼的CSS模式為“span.J_Ajax”。7.3.1項目實施->數(shù)據(jù)采集(15)完善makeup_spider.py的main方法,從商品列表首頁解析總頁碼。#encoding=utf-8importredefmain():……#解析總頁碼

page_info=browser.find_element_by_css_selector("span.J_Ajax").textstr_num_pages=re.findall("(\d+)",page_info)[0]num_pages=(int)(str_num_pages)re.findall(pattern,string,flags=0)返回string中所有與pattern匹配的全部字符串,返回形式為數(shù)組。第?個參數(shù):正則表達式。第?個參數(shù):搜索的是那些字符串。第三個參數(shù):匹配的模式,其中re.S使匹配包括換行在內的所有字符。7.3.1項目實施->數(shù)據(jù)采集(16)完善makeup_spider.py的main方法,實現(xiàn)翻頁爬取功能。#encoding=utf-8importcsvimporttimeimportrefromseleniumimportwebdriverstart_url=":50001/makeup/index.html"base_url=":50001/makeup/index{}.html"#從當前頁面獲取數(shù)據(jù)defget_data():

……defmain():

……#解析總頁碼

page_info=browser.find_element_by_css_selector("span.J_Ajax").textstr_num_pages=re.findall("(\d+)",page_info)[0]num_pages=(int)(str_num_pages)

#從第2頁開始,讀取每件商品

forpage_noinrange(2,num_pages+1):print("正在爬取第{}頁".format(page_no))browser.get(base_url.format(page_no))browser.implicitly_wait(2)get_data()print("數(shù)據(jù)爬取完畢!")if__name__=='__main__':#初始化ChromeDriverbrowser=webdriver.Chrome()main()#退出瀏覽器,并釋放資源

browser.quit()7.3.1項目實施->數(shù)據(jù)采集(17)運行makeup_spider.py,結果如下圖所示。韓束紅石榴護膚品套裝女巨補水保濕水乳全套化妝品官方旗艦店正品,89.00,800+人付款,韓束領航專賣店,陜西西安za姬芮中樣小樣旅行套裝水乳護膚化妝品試用裝恒潤嬌養(yǎng)透亮大樣,14.90,14人付款,za姬芮美幻專賣店,江蘇徐州……韓束紅石榴護膚品套裝女巨補水保濕水乳全套化妝品官方旗艦店正品,89.00,800+人付款,韓束領航專賣店,陜西西安za姬芮中樣小樣旅行套裝水乳護膚化妝品試用裝恒潤嬌養(yǎng)透亮大樣,14.90,14人付款,za姬芮美幻專賣店,江蘇徐州……粉撲美妝蛋不吃粉超軟氣墊海綿粉底液粉底液粉撲美妝工具底妝粉撲,11.90,100+人付款,annnoah旗艦店,上海李佳埼同款270遮瑕刷子圓頭化妝工具粉底遮暇美妝指腹黑眼圈淚溝,7.80,0人付款,晗源素旗艦店,廣東廣州7.3.2項目實施->數(shù)據(jù)清洗(1)創(chuàng)建data_clean.py,讀入makeup_raw.csv到DataFrame類型。#encoding=utf-8importpandasaspd#顯示所有列pd.set_option('display.max_columns',None)#顯示寬度pd.set_option('display.width',200)#列名和數(shù)據(jù)對齊pd.set_option('display.unicode.east_asian_width',True)#讀入CSV文件到DataFramelabels=["商品名稱","價格","單數(shù)","經(jīng)銷商","貨源"]df=pd.read_csv('makeup_raw.csv',encoding="utf-8",names=labels)print(df.head())7.3.2項目實施->數(shù)據(jù)清洗pandas.set_option默認情況下,表格格式并不是很友好。如果我們通過pandas.set_option設置幾個常用的option,就可以幫助我們解決格式友好問題。pd.set_option('display.max_columns',None)display.max_columns控制著可顯示的列數(shù),默認值為20,None表示顯示全部列。pd.set_option('display.max_colwidth',500)pandas對列中顯示的字符數(shù)有限制,默認值為50字符。如果想全部顯示,設置display.max_colwidth到大數(shù)(比如500)。pd.set_option('display.unicode.east_asian_width)是否使?“Unicode-東亞寬度”來計算顯??本寬度,默認是False。常被用來對齊列名和下?內容對齊。7.3.2項目實施->數(shù)據(jù)清洗(2)刪除重復記錄。(3)從“單位”列抽取城市。#去重print("去重前:",df.shape)df.drop_duplicates(subset=["商品名稱","價格"],inplace=True)print("去重后:",df.shape)#轉換貨源到城市defconvert_location(x):parts=x["貨源"].split('')if(len(parts)>1):returnparts[1]else:returnparts[0]df["貨源"]=df.apply(convert_location,axis=1)print(df.head())7.3.2項目實施->數(shù)據(jù)清洗(4)保存清洗后的數(shù)據(jù)。打開makeup_clean.csv,結果如下圖。7.3.3項目實施->數(shù)據(jù)分析(1)創(chuàng)建data_analysis.py,讀入makeup_clean.csv到DataFrame類型。#encoding=utf-8importpandasaspd#顯示所有列pd.set_option('display.max_columns',None)#顯示寬度pd.set_option('display.width',200)#列名和數(shù)據(jù)對齊pd.set_option('display.unicode.east_asian_width',True)#讀入csv文件labels=["商品名稱","價格","單數(shù)","經(jīng)銷商","貨源"]df=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論