数据采集和数据预处理
每時每刻,搜索引擎和網站都在采集大量信息,非原創即采集。采集信息用的程序一般被稱為網絡爬蟲(Web crawler)、網絡蜘蛛(Web spider),其行為一般是先“爬”到對應的網頁上,再把需要的信息“鏟”下來。說的通俗易懂一點網絡數據采集程序也像是一只辛勤采蜜的小蜜蜂,它飛到花(目標網頁)上,采集花粉(需要的信息),經過處理(數據清洗、存儲)變成蜂蜜(可用的數據)。
1.處理不同格式的數據
網絡數據采集大有所為。在大數據深入人心的時代,網絡數據采集作為網絡、數據庫與機器學習等領域的交匯點,已經成為滿足個性化網絡數據需求的最佳實踐。搜索引擎可以滿足人們對數據的共性需求,即“所見即所得”,而網絡數據采集技術可以進一步精煉數據,把網絡中雜亂無章的數據聚合成合理規范的形式,方便分析與挖掘,真正實現“通過數據進行分析”。工作中,你可能經常為找數據而煩惱,或者眼睜睜看著眼前的幾百頁數據卻只能長恨咫尺天涯,又或者數據雜亂無章的網站中滿是帶有陷阱的表單和坑爹的驗證碼,甚至需要的數據都在網頁版的 PDF 和網絡圖片中。而作為一名反爬蟲工程師,你也需要了解常用的網絡數據采集手段,以及常用的網絡表單安全措施,以提高網站訪問的安全性,所謂道高一尺,魔高一丈…(所以對于爬蟲工程師來說每天都是不停地和對方的反爬工程師斗智斗勇,這個改天再嘮…)
扯得有點遠 ,我們言歸正傳,網絡數據采集之前我們先了解一下怎么對不同格式的數據進行處理…
1.處理CSV格式數據
1.下載數據
數據來源:http://data.stats.gov.cn/easyquery.htm?cn=C01
2.處理數據
顯示數據通過python處理csv數據注意:處理Excel格式、Json格式數據數據也類似,分別使用Pandas中的read_excel()方法和read_json()方法。
3.處理XML格式數據
2.網絡爬蟲
說了那么多理論性的東西,接下來就開始步入正軌了。
1.獲取騰訊新聞首頁新聞標題及鏈接,并以Excel形式存儲
import?requests import?pandas from?bs4?import?BeautifulSoupres?=?requests.get('https://news.qq.com/')??#?數據采集目標地址 soup?=?BeautifulSoup(res.text,?'html.parser')?#?解析網頁newsary?=?[]???#?定義空列表 for?news?in?soup.select('.Q-tpWrap?.text'):newsary.append({'title':?news.select('a')[0].text,'url':news.select('a')[0]['href']})?#?分別獲取超鏈接中文本信息和href屬性,即地址newdf?=?pandas.DataFrame(newsary)?#?創建一個DataFrame newsdf.to_excel('news.xlsx')???#?輸出到excel表格 print(newsary[0])?2.抓取房天下房價信息并存儲
獲取房子對應的鏈接通過獲取的鏈接進去房子詳情頁面import?requests import?pandas?as?pd from?bs4?import?BeautifulSoup from?fake_useragent?import?UserAgentua_list?=?UserAgent()???#?設置user-agent列表,每次請求時,隨機挑選一個user-agentmy_headers?=?{'user-agent':?ua_list.random}#?獲取所有的url def?get_url():num?=?1sum_url?=?[]while?num?<?101:usual_url?=?'http://esf.sh.fang.com/house/i3'home_url?=?usual_url?+?str(num)print(home_url)res?=?requests.get(url=home_url,?headers=my_headers)num+=1soup?=?BeautifulSoup(res.text,?'html.parser')domain?=?'http://esf.sh.fang.com'for?house?in?soup.select('.houseList?dl'):try:#?title?=?house.select('.title')[0].text.strip()??#?清除多余的換行url1?=?domain?+?house.select('.title?a')[0]['href']sum_url.append(url1)except?Exception?as?e:print(e)print(len(sum_url))return?sum_urldef?houseary():houseary_url?=?get_url()houseary?=?[]for?url?in?houseary_url:print(url)content?=?requests.get(url=url,?headers=my_headers)soup1?=?BeautifulSoup(content.text,?'html.parser')try:info?=?{}info['標題']?=?soup1.select('.title')[0].text.strip()info['總價']?=?soup1.select('.trl-item')[0].textinfo['戶型']?=?soup1.select('.tt')[0].text.strip()info['建筑面積']?=?soup1.select('.tt')[1].textinfo['單價']?=?soup1.select('.tt')[2].textinfo['朝向']?=?soup1.select('.tt')[3].textinfo['樓層']?=?soup1.select('.tt')[4].textinfo['裝修']?=?soup1.select('.tt')[5].textinfo['小區']?=?soup1.select('.rcont')[0].text.strip().replace('\n',?'')info['區域']?=?soup1.select('.rcont')[1].text.replace('\n',?'').replace('\r',?'').replace('?',?'')info['經紀人']?=?soup1.select('.pn')[0].textinfo['聯系電話']?=?soup1.select('.pnum')[0].texthouseary.append(info)except?Exception?as?e:print(e)print(houseary)print(len(houseary))df?=?pd.DataFrame(houseary)df.to_excel('house.xlsx')if?__name__?==?'__main__':houseary()后臺運行程序,經過半個小時的戰績,總算把數據爬下來了,這個效率我覺得是時候學一波分布式爬蟲了…
拿到了數據,我們就該做數據的清理了,下篇文章寫數據的清理、資料探索與資料視覺化…
總結
以上是生活随笔為你收集整理的数据采集和数据预处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 请对比html与css的异同,css3与
- 下一篇: 电脑无法打开特定网页_监理检测网校电脑微