一個簡單python爬蟲的實現——爬取電影信息


  最近在學習網絡爬蟲,完成了一個比較簡單的python網絡爬蟲。首先為什么要用爬蟲爬取信息呢,當然是因為要比人去收集更高效。

網絡爬蟲,可以理解為自動幫你在網絡上收集數據的機器人。

  網絡爬蟲簡單可以大致分三個步驟:

    第一步要獲取數據,

    第二步對數據進行處理,

    第三步要儲存數據。

  獲取數據的時候這里我用到了python的urllib標准庫,它是python中非常方便抓取網頁內容的一個模塊。

  具體為:

  這里我要爬取的是電影天堂一個電影頁面的電影名稱,日期等數據。

 1 from urllib import request
 2 def get_data ( ):
 3     url='http://www.dytt8.net/html/gndy/dyzz/list_23_1.html'
 4     headers={'User-Agent': ' Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' }
 5     req=request.Request(url, headers=headers)
 6     response=request.urlopen(req)
 7     # print (type(response)) #響應對象的類型
 8     # print(response.getcode()) #響應狀態碼
 9     # print(response.info())
10     if response.getcode() == 200:
11         data=response.read()#讀取響應的結果
12         data =str(data,encoding='gb2312')
13         #print(data)
14         #將數據寫入文件中
15         with open ('index.html',mode='w',encoding='gb2312') as  f:
16             f.write(data)

    這里的headers是一個參數,就是你的瀏覽器在訪問服務器的時候,會讓服務器知道你的瀏覽器的一些信息,還有操作系統等信息。if 函數來判斷當網站成功響應的時候,會返回一個200.這時候讀取響應的數據結果,就是網頁的代碼。這里我做了一個字符串轉化處理,根據網頁代碼顯示編碼為gb2312,所以這時候只要將encoding設置為gb2312就可以了。

    

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 
3 <html xmlns="http://www.w3.org/1999/xhtml">
4 
5 <head>
6 
7 <META http-equiv=Content-Type content="text/html; charset=gb2312">

根據上面的網頁代碼,charset為gb2312判斷的。  

    當我們存取了網頁數據后,發現它還是html格式的,而且有很多html,css的代碼,但是我們只想要其中的文字信息,這時候怎么辦呢。

    這時候就要用到一個強大的數據處理模塊,beautifusoup4,俗稱美味湯。安裝好這個模塊后。我們就可以對我們的html文件做進一步的處理,提取我們需要的信息。

   

 1 from urllib import request
 2 from bs4 import BeautifulSoup
 3 def get_data ( ):
 4     url='http://www.dytt8.net/html/gndy/dyzz/list_23_1.html'
 5     headers={'User-Agent': ' Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' }
 6     req=request.Request(url, headers=headers)
 7     response=request.urlopen(req)
 8     # print (type(response)) #響應對象的類型
 9     # print(response.getcode()) #響應狀態碼
10     # print(response.info())
11     if response.getcode() == 200:
12         data=response.read()#讀取響應的結果
13         data =str(data,encoding='gb2312')
14         #print(data)
15         #將數據寫入文件中
16         with open ('index.html',mode='w',encoding='gb2312') as  f:
17             f.write(data)
18 def parse_data():
19     with open ('index.html',mode='r',encoding='gb2312') as  f:
20         html = f.read()
21     bs = BeautifulSoup(html,'html.parser')
22     metas = bs.select("[class~=ulink]")
23     date = bs.select("[color=#8F8C89]")
24     i=0
25     while i < 25:
26         print(metas[i].get_text())
27         print(date[i].get_text())
28         i=i+1
29 
30 
31 
32 
33 if __name__ == '__main__':
34     #get_data()
35     parse_data()

  這里我們用到了美味湯中的CSS選擇器功能,就是只把我們想要的信息選擇處來,根據網頁代碼,發現class等於ulink的時候后面跟着的信息是我們需要的。還有color=#8F8C89也是我們需要的。使用select方法,將選中的信息篩選出來。最終結果:

點擊0是因為網站顯示就是0,估計是網站的問題。這樣我們就得到了電影信息以及發布的時間信息。后面還有很多。根據這次簡單爬蟲的實現,我發現web爬蟲除了你要懂python的知識之外,對於html,CSS等前端知識你也要有一定了解。爬蟲是模擬人去收集網站數據的,有些網站以及建立了反爬蟲技術。所以爬蟲的技術也在不斷更新。

 

關注公眾號

免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2023 CODEPRJ.COM