1. 程式人生 > >Python爬取電影天堂最新發布影片訊息

Python爬取電影天堂最新發布影片訊息

從今天開始我會把我學習python爬蟲的一些心得體會和程式碼釋出在我現在的部落格,好記性不如爛筆頭,以便以後的我進行復習。

雖然我現在的爬蟲還很幼小,希望有一天她能長得非常非常的強大。

--------------------2018.11.22---------------------------------------------------------------------------------------------------------------------------------

OK,廢話少說。今天爬取的是電影天堂網站左邊框的一個container。

環境我準備好了,所以我就開始了。

首先,為了我測試時的速度和不影響人家網站的伺服器,我決定把電影天堂頁面的html下載到本地

程式碼如下:

1 #下載網頁
2 def downloadhtml():
3     url = 'https://www.dytt8.net'
4     headers = {'User-Agent':'Mozilla/5.0'}
5     r = requests.get(url,headers=headers)
6     with open('C:/Code/newhtml1.html','wb') as f:
7         f.write(r.content)
8 downloadhtml()

這裡值得一提的是,抓取下來的HTML格式是二進位制的,所以儲存檔案時要用wb。

儲存好HTML檔案,我就可以盡情地調戲,不對,除錯這個網站了的資料。

第一步:分析資料

開啟網頁的原始碼,我們發現我們需要的資料被裝在一個ul標籤裡。

Ctrl+F在原始碼裡檢視<ul>標籤,發現我們需要的ul標籤是第三個標籤。

這樣我們就知道該爬哪裡了。

第二步:解析資料

剛才下載的網頁現在可以用上了,定義一個函式讓BeautifulSoup能用上這個HTML網頁

如:soup = BeautifulSoup(html,'html.parser')裡面的html引數就可以用htmlhandle這個變數填上。

1 def send_html():
2     path = 'C:/Code/newhtml1.html'
3     htmlfile=open(path,'r')
4     htmlhandle = htmlfile.read()
5     return htmlhandle

開始分析資料,

先貼程式碼吧:

1 def get_pages(html):
2     soup = BeautifulSoup(html,'html.parser')
3     for ul in  soup.find_all('ul')[2]:
4         if isinstance(ul,bs4.Tag):
5             Tag_name=ul.get_text()
6             Tag_href=ul.get('href')
7             if Tag_name!= '':
8                 print('名稱:{},地址:{}'.format(Tag_name,Tag_href))

解釋下程式碼

先用BeautifulSoup的find_all()函式找到所有ul標籤,因為後面加了[2],所以找到是第三個ul標籤。

在這裡我們離我們的目標很近了。

但這裡我們能發現find_all()遍歷返回的值的型別是不同的,我們利用type(ul)就能發現,它其中參雜兩種型別:

<class 'bs4.element.NavigableString'>
<class 'bs4.element.Tag'>
<class 'bs4.element.Tag'>

字串和Tag,測試一下就能知道字串型別是空的,我們需要的Tag型別。

所以用isinstance來判斷是否是Tag型別,如果不是,就不要了。輸出如下:

我們發現,中間還參雜了一些無效的條目,仔細看上面就能發現它返回是有兩個Tag型別的,其中一個是什麼都沒有裝的,是導致這個無效條目的原因。

所以把這條無效的條目給過濾掉吧

if Tag_name!= '':
                print('名稱:{},地址:{}'.format(Tag_name,Tag_href))

到這裡,我們就完成了本次抓取。

下面附上總程式碼:

 1 import requests
 2 import re
 3 from bs4 import BeautifulSoup
 4 import bs4
 5 
 6 def send_html():
 7     path = 'C:/Code/newhtml1.html'
 8     htmlfile=open(path,'r')
 9     htmlhandle = htmlfile.read()
10     return htmlhandle
11 
12 def get_pages(html):
13     soup = BeautifulSoup(html,'html.parser')
14     for ul in  soup.find_all('ul')[2]:
15         #print(type(ul))
16         if isinstance(ul,bs4.Tag):
17             Tag_name=ul.get_text()
18             Tag_href=ul.get('href')
19             if Tag_name!= '':
20                 print('名稱:{},地址:{}'.format(Tag_name,Tag_href))
21 
22 get_pages(send_html())