用Python網(wǎng)絡(luò)爬蟲來(lái)看看最近電影院都有哪些上映的電影
1 前言
貓眼電影是淘寶聯(lián)合打造電影分類最全的電影的平臺(tái),能夠第一時(shí)間告知用戶,最新的電影上線時(shí)間。今天教大家獲取貓眼電影的即將上映的電影詳情。
2 項(xiàng)目目標(biāo)
獲取貓眼電影的即將上映的電影詳情。
3 項(xiàng)目準(zhǔn)備
軟件:PyCharm
需要的庫(kù):requests、lxml、random、time
插件:Xpath
網(wǎng)站如下:
- https://maoyan.com/films?showType=2&offset={}
點(diǎn)擊下一頁(yè)的按鈕,觀察到網(wǎng)站的變化分別如下:
- https://maoyan.com/films?showType=2&offset=30
- https://maoyan.com/films?showType=2&offset=60
- https://maoyan.com/films?showType=2&offset=90
點(diǎn)擊下一頁(yè)時(shí),頁(yè)面每增加一頁(yè)offset=()每次增加30,所以可以用{}代替變換的變量,再用for循環(huán)遍歷這網(wǎng)址,實(shí)現(xiàn)多個(gè)網(wǎng)址請(qǐng)求。
4 項(xiàng)目實(shí)現(xiàn)
1、定義一個(gè)class類繼承object,定義init方法繼承self,主函數(shù)main繼承self。導(dǎo)入需要的庫(kù)和網(wǎng)址,代碼如下所示。
- import requests
- from lxml import etree
- import time
- import random
- class MaoyanSpider(object):
- def __init__(self):
- self.url = "https://maoyan.com/films?showType=2&offset={}"
- def main(self):
- pass
- if __name__ == '__main__':
- spider = MaoyanSpider()
- spider.main()
2、隨機(jī)產(chǎn)生UserAgent。
- for i in range(1, 50):
- # ua.random,一定要寫在這里,每次請(qǐng)求都會(huì)隨機(jī)選擇。
- self.headers = {
- 'User-Agent': ua.random,
- }
3、發(fā)送請(qǐng)求,獲取頁(yè)面響應(yīng)。
- def get_page(self, url):
- # random.choice一定要寫在這里,每次請(qǐng)求都會(huì)隨機(jī)選擇
- res = requests.get(url, headers=self.headers)
- res.encoding = 'utf-8'
- html = res.text
- self.parse_page(html)
4、xpath解析一級(jí)頁(yè)面數(shù)據(jù),獲取頁(yè)面信息。
1)基準(zhǔn)xpath節(jié)點(diǎn)對(duì)象列表。
- # 創(chuàng)建解析對(duì)象
- parse_html = etree.HTML(html)
- # 基準(zhǔn)xpath節(jié)點(diǎn)對(duì)象列表
- dd_list = parse_html.xpath('//dl[@class="movie-list"]//dd')
2)依次遍歷每個(gè)節(jié)點(diǎn)對(duì)象,提取數(shù)據(jù)。
- for dd in dd_list:
- name = dd.xpath('.//div[@class="movie-hover-title"]//span[@class="name noscore"]/text()')[0].strip()
- star = dd.xpath('.//div[@class="movie-hover-info"]//div[@class="movie-hover-title"][3]/text()')[1].strip()
- type = dd.xpath('.//div[@class="movie-hover-info"]//div[@class="movie-hover-title"][2]/text()')[1].strip()
- dowld=dd.xpath('.//div[@class="movie-item-hover"]/a/@href')[0].strip()
- # print(movie_dict)
- movie = '''【即將上映】
5、定義movie,保存打印數(shù)據(jù)。
- movie = '''【即將上映】
- 電影名字: %s
- 主演:%s
- 類型:%s
- 詳情鏈接:https://maoyan.com%s
- =========================================================
- ''' % (name, star, type,dowld)
- print( movie)
6、random.randint()方法,設(shè)置時(shí)間延時(shí)。
- time.sleep(random.randint(1, 3))
7、調(diào)用方法,實(shí)現(xiàn)功能。
- html = self.get_page(url)
- self.parse_page(html)
5 效果展示
1、點(diǎn)擊綠色小三角運(yùn)行輸入起始頁(yè),終止頁(yè)。
2、運(yùn)行程序后,結(jié)果顯示在控制臺(tái),如下圖所示。
3、點(diǎn)擊藍(lán)色下載鏈接, 網(wǎng)絡(luò)查看詳情。
6 小結(jié)
1、不建議抓取太多數(shù)據(jù),容易對(duì)服務(wù)器造成負(fù)載,淺嘗輒止即可。
2、本文基于Python網(wǎng)絡(luò)爬蟲,利用爬蟲庫(kù),實(shí)現(xiàn)爬取貓眼電影。
3、歡迎大家積極嘗試,有時(shí)候看到別人實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,但是到自己動(dòng)手實(shí)現(xiàn)的時(shí)候,總會(huì)有各種各樣的問題,切勿眼高手低,勤動(dòng)手,才可以理解的更加深刻。
4、貓眼電影代碼鏈接:,https://github.com/cassieeric/python_crawler/tree/master/MaoyanMovie,覺得不錯(cuò),記得給個(gè)star噢。