恢復內容開始 python爬蟲學習從0開始 第一次學習了python語法,迫不及待的來開始python的項目。首先接觸了爬蟲,是一個簡單爬蟲。個人感覺python非常簡潔,相比起java或其他面向對象的編程語言,動態語言不需要聲明函數或變數類型。python有20年的發展歷史,以簡潔高效聞名,pyt ...
---恢復內容開始---
python爬蟲學習從0開始
第一次學習了python語法,迫不及待的來開始python的項目。首先接觸了爬蟲,是一個簡單爬蟲。個人感覺python非常簡潔,相比起java或其他面向對象的編程語言,動態語言不需要聲明函數或變數類型。python有20年的發展歷史,以簡潔高效聞名,python最初只是一個馬戲團的名字,它的哲學是‘用一種方法完成一件事情’。我第一次使用python時就被它的簡潔高效迷住了,相比起c++和java,他簡直太棒了。而且現階段的大數據和人工智慧領域,python都有著絕對無可替代的地位。
一、爬蟲是什麼?
大數據時代,海量的數據以兆億級的規模出現,而且每時每刻都在不停的變化,怎樣從這麼多數據中提取我們所需要的數據,就變得十分的重要,尤其對於一些大企業,數據就是公司發展的命脈。網路爬蟲(又被稱為網頁蜘蛛,網路機器人,在FOAF社區中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動地抓取萬維網信息的程式或者腳本。就是爬蟲程式會自動沿著制定的URL去爬取有用的數據,搜索引擎就是建立在爬蟲基礎上的。但是搜索引擎有自身的局限性,只能夠通過關鍵字進行檢索,我們需要手動進入相關網頁進行篩選。這個時候如果利用爬蟲,就能夠實現簡單的定向抓取。
二、爬蟲涉及到的python知識?
爬蟲經歷三個步驟:首先向目標網頁發出請求,經伺服器返回一個響應html的源碼;然後通過beatifulsoup庫或者Xpath表達式來對源碼進行解析,提取有用信息;最後通過文件保存相關信息,進行數據清洗或分析。
我們所需要的環境:IDE的話pycharm就好,個人認為這個是最好的pythonIDE,支持windows以及mac系統。當然你必須先在自己的電腦安裝python,具體安裝方法百度即可,在這個地方說明的是,python2.7是預設在mac上,不過用就用最新版的吧,python3和python2有區別的。直接用vim寫也可以。這裡需要使用谷歌瀏覽器分析源網頁html代碼。
三、爬取豆瓣網的top250:
開始之前需要瞭解谷歌瀏覽器的操作:
直接在 更多 選擇工具的開發者工具,這裡可能需要用到html的知識,其實就是一些標簽,如<div>、<a>、<span>等等。(具體學習一下html吧!)然後,單擊右鍵選擇標題如《肖申克的救贖》,使用檢查命令。可以在右側Elements裡面看到<span class="title">這個標簽,中間的中文就是我們需要爬取的電影名字。同樣我們還需要爬取的是評分,可以找到<span class="rating_num">這樣的標簽,當然你也可以爬取一句話評語。
我用到requests庫,當然還有urllib這個庫也可以,這個比較繁瑣。pycharm中可以直接安裝,bash中使用pip3的指令。
首先,我們需要向目標網頁發送下載請求:
url='https://movie.douban.com/top250'
res=requests.get(url)
print(res.status_code)
這裡可能會有亂碼。因為你沒有定義下載的html代碼的編碼格式,在res後面附加一句:res.encoding='UTF-8',即可。同樣網站會有反爬措施,諸如過頻繁請求,或者限制,這是需要使用一個user-agent:就在network這個卡的最下麵,不過一般使用Mozilla/5.0就可以。定義一個頭文件:(複製粘貼就可以)
headers={
'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36',
'Host':'movie.douban.com'
}
替換:res=requests.get(url,headers=headers)
這個時候你的status_code就會是200,200表示正常反饋。400就是不正常。(反爬手段)
當然你可以下載html代碼自己看看,不過挺雜亂。直接 print(res.text) 就行了。
好了,已經獲得了網頁源碼,這個時候就該解析相關數據了:beatifulsoup實例化。
soup=BeatifulSoup(res.text,'html.parser') #建立soup對象。
div_list=soup.find_all('div',class_='hd') #這裡的div標簽在<li>標簽下麵,每一個<li>標簽都表示一部電影的信息。我們所需要的信息都存在<div class='hd'>里。
for each in div_list:
movie=each.find('a').find('span').text.strip()
movie_list.append(movie)
movie_list是一個空列表,專門存放電影名字。strip()函數是去除字元串兩端的字元,這裡是去除空格。但是我們發現,網頁貌似有10頁面,我們這裡利用for迴圈遍歷url。
url變化的只是最後一部分的:
movie_list=[]
for i in range(0,10):
url='http://movie.douban.com/top250?start='+str(i*25)
res=......
soup=BeatifulSoup(res.text,'html.parser')
div_list=soup.find_all('div',class_='hd')
for each in div_list:
movie=each.find('a').find('span').text.strip()
movie_list.append(movie)
return movie_list
這樣就可以了。簡單的爬蟲就完成了。
最後我們需要將取得的數據存儲。你也可以選擇存進mysql,具體涉及pymysql。
file='desktop/douban.csv'
with open(file,'w+') as f:
f.write(movie_list)
f.close()
csv用文本編輯器打開。也可用excle打開具體百度。