首先,我們需要下載python3.0以上的版本以及requests和BeautifulSoup這兩個第三方包
第三方包下載連接:
requests-2.5.0.tar.gz 鏈接:http://download.csdn.net/download/ls1160/8242547
beautifulsoup4-4.5.3.tar.gz 鏈接 :鏈接:http://download.csdn.net/download/QQ_37400312/9770777
第三方包安裝方法:
將requests-2.13.0.tar.gz壓縮包解壓后,打開cmd,跳轉至文件路徑,輸入python setup.py install按回車進行安裝
(beautifulsoup4-4.5.3.tar.gz方法相同)
然后,我們轉入正題:
1.獲取網頁源代碼
import requestshtml = requests.get('http://www.360kan.com/dianying/index.html')PRint(html.text)我們可以編譯一下,若獲取成功則會輸出http://www.360kan.com/dianying/index.html網頁上的代碼
2.使用BeautifulSoup解析網頁
from bs4 import BeautifulSoupsoup = BeautifulSoup(html.text,'html.parser')3.獲取全部電影名稱
for news in soup.select('.w-newfigure'): if len(news.select('.s1')) > 0 title = news.select('.s1')[0].text print (title)4.獲取一個年份year = soup.select('.w-newfigure span')[0].textprint (year)5.獲取一個電影名稱
name = soup.select('.w-newfigure span')[1].textprint (name)6.獲取一個評分
name = soup.select('.w-newfigure span')[2].textprint (name)7.獲取全部評分for news in soup.select('.w-newfigure'): if len(news.select('.s2')) > 0:#無評分的直接跳過 comment = news.select('span')[2].text print (comment)8.獲取全部電影年份、名稱和評分for news in soup.select('.w-newfigure'): if len(news.select('.s2')) > 0:# year = news.select('span')[0].text#無年份的直接去掉 name = news.select('span')[1].text#無名稱的直接去掉 comment = news.select('span')[2].text#無評分的直接去掉 print (year,name,comment)9.獲取全部影片介紹頁面
for news in soup.select('.w-newfigure'): if awoidUrl(news.select('a ')[0]['href']): url1 = news.select('a ')[0]['href'] print(url1)10.構造獲取立即播放鏈接函數def getUrl(url): html2 = requests.get('%s'%url) soup2 = BeautifulSoup(html2.text,"html.parser") if len(soup2.select(".top-list-btns a")[0]['href'])>0: url2 = soup2.select(".top-list-btns a")[0]['href'] return url2因為360影視首頁的電影只給了影片介紹頁面的鏈接,影片的播放鏈接在介紹頁面內,所以我們要構造一個函數,再獲取一次鏈接11.構造避免http://v.360kan.com/網址和空網址函數
import redef awoidUrl(url): if len(url) > 0: m = re.search('http://(.*).com',url) newurl = m.group(1)#1獲取括號內的內容 #print (newurl) if newurl == "www.360kan": return 1 else: return 0 else: return 0因為有些網址獲取不到或網址為會員才能觀看,所以我們直接跳過12.獲取全部影片序號,電影名稱,上映年份,評分,立即播放網址i=0for news in soup.select('.w-newfigure'): if awoidUrl(news.select('a ')[0]['href']): url1 = news.select('a ')[0]['href'] try: url2 = getUrl(url1) year = news.select('span')[0].text#無年份的直接去掉 name = news.select('span')[1].text#無名稱的直接去掉 comment = news.select('span')[2].text#無評分的直接去掉 i=i+1 print ("序號:%s/t電影名稱:%s/t/t/t上映年份:%s/t評分:%s/n網址:%s"%(i,name,year,comment,url2)) except: continue13.程序完整代碼,抓取360影視首頁資料并保存至同一目錄下的“保存內容.txt”中#-*- coding: utf-8 -*-import requestshtml = requests.get('http://www.360kan.com/dianying/index.html')from bs4 import BeautifulSoupsoup = BeautifulSoup(html.text,'html.parser')def getUrl(url): html2 = requests.get('%s'%url) soup2 = BeautifulSoup(html2.text,"html.parser") if len(soup2.select(".top-list-btns a")[0]['href'])>0: url2 = soup2.select(".top-list-btns a")[0]['href'] return url2import redef awoidUrl(url): if len(url) > 0: m = re.search('http://(.*).com',url) newurl = m.group(1)#1獲取括號內的內容 #print (newurl) if newurl == "www.360kan": return 1 else: return 0 else: return 0import urllib.requestimport urllib.parsef = open("保存內容.txt",'wb')i=0for news in soup.select('.w-newfigure'): if awoidUrl(news.select('a ')[0]['href']): url1 = news.select('a ')[0]['href'] try: url2 = getUrl(url1) year = news.select('span')[0].text#無年份的直接去掉 name = news.select('span')[1].text#無名稱的直接去掉 comment = news.select('span')[2].text#無評分的直接去掉 str = ("序號:%s/t電影名稱:%s/t/t/t上映年份:%s/t評分:%s/n網址:%s/n/n"%(i,name,year,comment,url2)) fo = open("保存內容.txt", "r+") fo.seek(0, 2) fo.write( str ) i=i+1 print ("%s保存完畢"%i) except: continuefo.close()print("over")14.至此,我們可以通過上述代碼成功抓取360影視首頁上的電影資料,但由于有些影視的鏈接等信息有些特殊,所以本人選擇了直接忽略,例如沒有評分的電影就選擇不進行抓取等,所以抓取結果不全,僅供學習參考,如文章有錯誤或有什么好的意見,歡迎提出,謝謝。
新聞熱點
疑難解答