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

傳送門:html

最近由於工做的事比較忙,要學的東西也不少,沒有及時更新,下一階段我會盡力一天一更的,一塊學習的朋友跟緊不走丟ヽ(ˋ▽ˊ)ノpython

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

1.處理不一樣格式的數據

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

扯得有點遠 ,咱們言歸正傳,網絡數據採集以前咱們先了解一下怎麼對不一樣格式的數據進行處理...json

1.處理CSV格式數據

1.下載數據

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

下載CSV格式

2.處理數據

顯示數據

經過python處理csv數據

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

3.處理XML格式數據

2.網絡爬蟲

這部分因爲以前寫過,這裏就再也不進行詳細寫了,能夠參考往期文章。網絡

3.小試牛刀

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

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

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

import requests
import pandas
from bs4 import BeautifulSoup

res = 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 UserAgent

ua_list = UserAgent()   # 設置user-agent列表,每次請求時,隨機挑選一個user-agent

my_headers = {
        'user-agent': ua_list.random
    }

# 獲取全部的url
def 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_url


def 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('\n', '')
            info['區域'] = soup1.select('.rcont')[1].text.replace('\n', '').replace('\r', '').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()
複製代碼

後臺運行程序,通過半個小時的戰績,總算把數據爬下來了,這個效率我以爲是時候學一波分佈式爬蟲了... 框架

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

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

相關文章
相關標籤/搜索