Python數據科學(五)- 數據處理和數據採集

傳送門:

Python數據科學(一)- python與數據科學應用(Ⅰ)

Python數據科學(二)- python與數據科學應用(Ⅱ)

Python數據科學(三)- python與數據科學應用(Ⅲ)

Python數據科學(四)- 數據收集系列

Python數據科學(五)- 數據處理和數據採集

Python數據科學(六)- 資料清理(Ⅰ)

Python數據科學(七)- 資料清理(Ⅱ)

最近因為工作的事比較忙,要學的東西也很多,沒有及時更新,下一階段我會儘力一天一更的,一塊學習的朋友跟緊不走丟ヽ(ˋ▽ˊ)ノ

每時每刻,搜索引擎和網站都在採集大量信息,非原創即採集。採集信息用的程序一般被稱為網路爬蟲(Web crawler)、網路蜘蛛(Web spider),其行為一般是先「爬」到對應的網頁上,再把需要的信息「鏟」下來。說的通俗易懂一點網路數據採集程序也像是一隻辛勤采蜜的小蜜蜂,它飛到花(目標網頁)上,採集花粉(需要的信息),經過處理(數據清洗、存儲)變成蜂蜜(可用的數據)。

1.處理不同格式的數據

網路數據採集大有所為。在大數據深入人心的時代,網路數據採集作為網路、資料庫與機器學習等領域的交匯點,已經成為滿足個性化網路數據需求的最佳實踐。搜索引擎可以滿足人們對數據的共性需求,即「所見即所得」,而網路數據採集技術可以進一步精鍊數據,把網路中雜亂無章的數據聚合成合理規範的形式,方便分析與挖掘,真正實現「通過數據進行分析」。工作中,你可能經常為找數據而煩惱,或者眼睜睜看著眼前的幾百頁數據卻只能長恨咫尺天涯,又或者數據雜亂無章的網站中滿是帶有陷阱的表單和坑爹的驗證碼,甚至需要的數據都在網頁版的 PDF 和網路圖片中。而作為一名反爬蟲工程師,你也需要了解常用的網路數據採集手段,以及常用的網路表單安全措施,以提高網站訪問的安全性,所謂道高一尺,魔高一丈...(所以對於爬蟲工程師來說每天都是不停地和對方的反爬工程師鬥智斗勇,這個改天再嘮...)

扯得有點遠 ,我們言歸正傳,網路數據採集之前我們先了解一下怎麼對不同格式的數據進行處理...

1.處理CSV格式數據

1.下載數據

數據來源:http://data.stats.gov.cn/easyquery.htm?cn=C01

下載CSV格式

2.處理數據

顯示數據

通過python處理csv數據

注意:處理Excel格式、Json格式數據數據也類似,分別使用Pandas中的read_excel()方法和read_json()方法。

3.處理XML格式數據

2.網路爬蟲

這部分由於之前寫過,這裡就不再進行詳細寫了,可以參考往期文章。

  • Python網路爬蟲(一)- 入門基礎
  • Python網路爬蟲(二)- urllib爬蟲案例
  • Python網路爬蟲(三)- 爬蟲進階
  • Python網路爬蟲(四)- XPath
  • Python網路爬蟲(五)- Requests和Beautiful Soup
  • Python網路爬蟲(六)- Scrapy框架
  • Python網路爬蟲(七)- 深度爬蟲CrawlSpider
  • Python網路爬蟲(八) - 利用有道詞典實現一個簡單翻譯程序
  • 利用簡書首頁文章標題數據生成詞雲
  • Spider與OpenPyXL的結合
  • 爬取拉勾網招聘信息並使用xlwt存入Excel
  • Python可以做哪些好玩的事之自動刷票
  • Selenium與PhantomJS
  • 使用Selenium抓取QQ空間好友說說
  • Selenium 的使用

3.小試牛刀

說了那麼多理論性的東西,接下來就開始步入正軌了。

chrome右鍵檢查查看network這些套路我就不說了,直接放圖開始分析。

1.獲取騰訊新聞首頁新聞標題及鏈接,並以Excel形式存儲

import requestsimport pandasfrom 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) # 創建一個DataFramenewsdf.to_excel(news.xlsx) # 輸出到excel表格print(newsary[0])

2.抓取房天下房價信息並存儲

獲取房子對應的鏈接

通過獲取的鏈接進去房子詳情頁面

import requestsimport pandas as pdfrom bs4 import BeautifulSoupfrom fake_useragent import UserAgentua_list = UserAgent() # 設置user-agent列表,每次請求時,隨機挑選一個user-agentmy_headers = { user-agent: ua_list.random }# 獲取所有的urldef get_url(): num = 1 sum_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+=1 soup = 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].text info[戶型] = soup1.select(.tt)[0].text.strip() info[建築面積] = soup1.select(.tt)[1].text info[單價] = soup1.select(.tt)[2].text info[朝向] = soup1.select(.tt)[3].text info[樓層] = soup1.select(.tt)[4].text info[裝修] = soup1.select(.tt)[5].text info[小區] = soup1.select(.rcont)[0].text.strip().replace(
, ) info[區域] = soup1.select(.rcont)[1].text.replace(
, ).replace(
, ).replace( , ) info[經紀人] = soup1.select(.pn)[0].text info[聯繫電話] = soup1.select(.pnum)[0].text houseary.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()

後台運行程序,經過半個小時的戰績,總算把數據爬下來了,這個效率我覺得是時候學一波分散式爬蟲了...

看了數據,上海的房價無力吐槽...

拿到了數據,我們就該做數據的清理了,下一階段數據的清理、資料探索與資料視覺化...

作者:許勝利 Python愛好者社區專欄作者,請勿轉載,謝謝。

博客專欄:許勝利的博客專欄

配套視頻教程:Python3爬蟲三大案例實戰分享 公眾號:Python愛好者社區(微信ID:python_shequ),關注,查看更多連載內容。

推薦閱讀:

TAG:數據採集 | 數據處理 | Python |