亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

【python】抓取貓眼電影排行

系統(tǒng) 1976 0

抓取貓眼電影上面Top100榜單,抓取的內(nèi)容有電影名稱,主演,上映時(shí)間,圖片,得分等信息。抓取的內(nèi)容以文件形式保存,地址為https://maoyan.com/board/4
1.分析
該榜單頁面如下
【python】抓取貓眼電影排行_第1張圖片
拉到底部點(diǎn)擊下一頁,發(fā)現(xiàn)此時(shí)的URL變化了。
【python】抓取貓眼電影排行_第2張圖片
此時(shí)的URL變?yōu)閔ttps://maoyan.com/board/4?offset=10,比之前的URL多了參數(shù)offset=10,再點(diǎn)擊下一頁的URL為https://maoyan.com/board/4?offset=20,由此我們發(fā)現(xiàn)了規(guī)律,Top100,每頁展示10部電影,這樣100部電影需要請(qǐng)求10次
2.抓取首頁
首先來抓取第一頁的內(nèi)容,我們編寫一個(gè)get_one_page()的方法

            
              import requests

def get_one_page(url):
    response = requests.get(url)
    if response.status_code == 200:
        return response.text
    return None

def main():
    url = 'http://maoyan.com/board/4'
    html = get_one_page(url)
    print(html)

main()

            
          

3.正則提取
網(wǎng)頁在開發(fā)者模式下,network,查看源碼
【python】抓取貓眼電影排行_第3張圖片
排名第一的霸王別姬的源碼如下:

            
              
1 霸王別姬

霸王別姬

主演:張國(guó)榮,張豐毅,鞏俐

上映時(shí)間:1993-01-01

9. 5

可以看到一部電影對(duì)應(yīng)一個(gè) dd 節(jié)點(diǎn),排名信息在 class board-index i 節(jié)點(diǎn)內(nèi),利用非貪婪匹配來提取 i 節(jié)點(diǎn)內(nèi)的信息,正則表達(dá)式為

            
              
.*?board-index.*?>(.*?)

然后提取圖片信息,接下來的 a 節(jié)點(diǎn),里面有兩個(gè) img 節(jié)點(diǎn),經(jīng)過檢查后發(fā)現(xiàn),第二個(gè) img 節(jié)點(diǎn)的 data-src 屬性是圖片的鏈接。于是提取第二個(gè) img 節(jié)點(diǎn)的 data-src 屬性,正則表達(dá)式改寫如下:

                  
                    
.*?board-index.*?>(.*?).*?data-src="(.*?)"

之后,提取電影名稱,在后面的 p 節(jié)點(diǎn)內(nèi), class name ,之后的 a 節(jié)點(diǎn)里

                        
                          
.*?board-index.*?>(.*?).*?data-src="(.*?)".*?name.*?a.*?>(.*?)

主演信息在 p 節(jié)點(diǎn)下 class star ,上映時(shí)間在 p 節(jié)點(diǎn)下 class releasetime ,評(píng)分在‘p’節(jié)點(diǎn)下的’class’為 score ,其中整數(shù)部分對(duì)應(yīng) integer ,小數(shù)部分對(duì)應(yīng)為 fraction 。完整的表達(dá)式為

                              
                                
.*?board-index.*?>(.*?).*?data-src="(.*?)".*?name.*?a.*?>(.*?).*?star.*?>(.*?)

.*?releasetime.*?>(.*?)

.*?integer.*?>(.*?).*?fraction.*?>(.*?).*?

這樣就可以將一頁中10部電影的信息提取出來
定義解析頁面的方法為 parse_one_page() ,主要通過正則表達(dá)式提取想要的內(nèi)容

                              
                                def parse_one_page(html):
	pattern = re.compile( '
                                
.*?board-index.*?>(.*?).*?data-src="(.*?)".*?name.*?a.*?>(.*?).*?star.*?>(.*?)

.*?releasetime.*?>(.*?)

.*?integer.*?>(.*?).*?fraction.*?>(.*?).*?
', re.S) items = re.findall(pattern,html) print(items)

提取出來的結(jié)果如下:

                              
                                [('1', 'https://p1.meituan.net/movie/20803f59291c47e1e116c11963ce019e68711.jpg@160w_220h_1e_1c', '霸王別姬', '\n                主演:張國(guó)榮,張豐毅,鞏俐\n        ', '上映時(shí)間:1993-01-01', '9.', '5'), ('2', 'https://p0.meituan.net/movie/283292171619cdfd5b240c8fd093f1eb255670.jpg@160w_220h_1e_1c', '肖申克的救贖', '\n                主演:蒂姆·羅賓斯,摩根·弗里曼,鮑勃·岡頓\n        ', '上映時(shí)間:1994-09-10(加拿大)', '9.', '5'), ('3', 'https://p0.meituan.net/movie/289f98ceaa8a0ae737d3dc01cd05ab052213631.jpg@160w_220h_1e_1c', '羅馬假日', '\n                主演:格利高里·派克,奧黛麗·赫本,埃迪·艾伯特\n        ', '上映時(shí)間:1953-09-02(美國(guó))', '9.', '1'), ('4', 'https://p1.meituan.net/movie/6bea9af4524dfbd0b668eaa7e187c3df767253.jpg@160w_220h_1e_1c', '這個(gè)殺手不太冷', '\n                主演:讓·雷諾,加里·奧德曼,娜塔莉·波特曼\n        ', '上映時(shí)間:1994-09-14(法國(guó))', '9.', '5'), ('5', 'https://p1.meituan.net/movie/b607fba7513e7f15eab170aac1e1400d878112.jpg@160w_220h_1e_1c', '泰坦尼克號(hào)', '\n                主演:萊昂納多·迪卡普里奧,凱特·溫絲萊特,比利·贊恩\n        ', '上映時(shí)間:1998-04-03', '9.', '5'), ('6', 'https://p0.meituan.net/movie/da64660f82b98cdc1b8a3804e69609e041108.jpg@160w_220h_1e_1c', '唐伯虎點(diǎn)秋香', '\n                主演:周星馳,鞏俐,鄭佩佩\n        ', '上映時(shí)間:1993-07-01(中國(guó)香港)', '9.', '1'), ('7', 'https://p0.meituan.net/movie/46c29a8b8d8424bdda7715e6fd779c66235684.jpg@160w_220h_1e_1c', '魂斷藍(lán)橋', '\n                主演:費(fèi)雯·麗,羅伯特·泰勒,露塞爾·沃特森\n        ', '上映時(shí)間:1940-05-17(美國(guó))', '9.', '2'), ('8', 'https://p0.meituan.net/movie/223c3e186db3ab4ea3bb14508c709400427933.jpg@160w_220h_1e_1c', '亂世佳人', '\n                主演:費(fèi)雯·麗,克拉克·蓋博,奧利維婭·德哈維蘭\n        ', '上映時(shí)間:1939-12-15(美國(guó))', '9.', '1'), ('9', 'https://p1.meituan.net/movie/ba1ed511668402605ed369350ab779d6319397.jpg@160w_220h_1e_1c', '天空之城', '\n                主演:寺田農(nóng),鷲尾真知子,龜山助清\n        ', '上映時(shí)間:1992', '9.', '1'), ('10', 'https://p0.meituan.net/movie/b0d986a8bf89278afbb19f6abaef70f31206570.jpg@160w_220h_1e_1c', '辛德勒的名單', '\n                主演:連姆·尼森,拉爾夫·費(fèi)因斯,本·金斯利\n        ', '上映時(shí)間:1993-12-15(美國(guó))', '9.', '2')]

                              
                            

我們處理一下結(jié)果,讓它以字典的形式呈現(xiàn):

                              
                                def parse_one_page(html):
	pattern = re.compile( '
                                
.*?board-index.*?>(.*?).*?data-src="(.*?)".*?name.*?a.*?>(.*?).*?star.*?>(.*?)

.*?releasetime.*?>(.*?)

.*?integer.*?>(.*?).*?fraction.*?>(.*?).*?
', re.S) items = re.findall(pattern,html) for item in items: yield{ '排名':item[0], '圖片':item[1], '電影名稱':item[2], '演員':item[3].strip()[3:], '上映時(shí)間':item[4].strip()[5:], '評(píng)分':item[5]+item[6]}

運(yùn)行結(jié)果如下:

                              
                                {'排名': '1', '圖片': 'https://p1.meituan.net/movie/20803f59291c47e1e116c11963ce019e68711.jpg@160w_220h_1e_1c', '電影名稱': '霸王別姬', '演員': '張國(guó)榮,張豐毅,鞏俐', '上映時(shí)間': '1993-01-01', '評(píng)分': '9.5'}
{'排名': '2', '圖片': 'https://p0.meituan.net/movie/283292171619cdfd5b240c8fd093f1eb255670.jpg@160w_220h_1e_1c', '電影名稱': '肖申克的救贖', '演員': '蒂姆·羅賓斯,摩根·弗里曼,鮑勃·岡頓', '上映時(shí)間': '1994-09-10(加拿大)', '評(píng)分': '9.5'}
{'排名': '3', '圖片': 'https://p0.meituan.net/movie/289f98ceaa8a0ae737d3dc01cd05ab052213631.jpg@160w_220h_1e_1c', '電影名稱': '羅馬假日', '演員': '格利高里·派克,奧黛麗·赫本,埃迪·艾伯特', '上映時(shí)間': '1953-09-02(美國(guó))', '評(píng)分': '9.1'}
{'排名': '4', '圖片': 'https://p1.meituan.net/movie/6bea9af4524dfbd0b668eaa7e187c3df767253.jpg@160w_220h_1e_1c', '電影名稱': '這個(gè)殺手不太冷', '演員': '讓·雷諾,加里·奧德曼,娜塔莉·波特曼', '上映時(shí)間': '1994-09-14(法國(guó))', '評(píng)分': '9.5'}
{'排名': '5', '圖片': 'https://p1.meituan.net/movie/b607fba7513e7f15eab170aac1e1400d878112.jpg@160w_220h_1e_1c', '電影名稱': '泰坦尼克號(hào)', '演員': '萊昂納多·迪卡普里奧,凱特·溫絲萊特,比利·贊恩', '上映時(shí)間': '1998-04-03', '評(píng)分': '9.5'}
{'排名': '6', '圖片': 'https://p0.meituan.net/movie/da64660f82b98cdc1b8a3804e69609e041108.jpg@160w_220h_1e_1c', '電影名稱': '唐伯虎點(diǎn)秋香', '演員': '周星馳,鞏俐,鄭佩佩', '上映時(shí)間': '1993-07-01(中國(guó)香港)', '評(píng)分': '9.1'}
{'排名': '7', '圖片': 'https://p0.meituan.net/movie/46c29a8b8d8424bdda7715e6fd779c66235684.jpg@160w_220h_1e_1c', '電影名稱': '魂斷藍(lán)橋', '演員': '費(fèi)雯·麗,羅伯特·泰勒,露塞爾·沃特森', '上映時(shí)間': '1940-05-17(美國(guó))', '評(píng)分': '9.2'}
{'排名': '8', '圖片': 'https://p0.meituan.net/movie/223c3e186db3ab4ea3bb14508c709400427933.jpg@160w_220h_1e_1c', '電影名稱': '亂世佳人', '演員': '費(fèi)雯·麗,克拉克·蓋博,奧利維婭·德哈維蘭', '上映時(shí)間': '1939-12-15(美國(guó))', '評(píng)分': '9.1'}
{'排名': '9', '圖片': 'https://p1.meituan.net/movie/ba1ed511668402605ed369350ab779d6319397.jpg@160w_220h_1e_1c', '電影名稱': '天空之城', '演員': '寺田農(nóng),鷲尾真知子,龜山助清', '上映時(shí)間': '1992', '評(píng)分': '9.1'}
{'排名': '10', '圖片': 'https://p0.meituan.net/movie/b0d986a8bf89278afbb19f6abaef70f31206570.jpg@160w_220h_1e_1c', '電影名稱': '辛德勒的名單', '演員': '連姆·尼森,拉爾夫·費(fèi)因斯,本·金斯利', '上映時(shí)間': '1993-12-15(美國(guó))', '評(píng)分': '9.2'}

                              
                            

4.寫入網(wǎng)頁
我們將提取的結(jié)果寫入文件,這里直接寫入到一個(gè)文本文件中。這里通過 JSON庫(kù) dumps() 方法實(shí)現(xiàn)字典的序列化,并指定 ensure_ascii 參數(shù)為 False ,這樣可以保證輸出結(jié)果是中文形式而不是 Unicode 編碼。代碼如下:

                              
                                def write_to_json(content):
	with open('result.txt','a') as f:
		print(type(json.dumps(content)))
		f.write(json.dumps(content,ensure_ascii=False)+'\n')

                              
                            

content 為提取下來的一部電影的信息

5.整合代碼

                              
                                def main():
	url = 'http://maoyan.com/board/4'
	html = get_one_page(url)
	for item in parse_one_page(html):
		print(item)
		write_to_json(item)

                              
                            

實(shí)現(xiàn)了將第一頁的十部電影爬取下來,保存到本地文件中。
6.分頁爬取
我們想要爬取的是前100部電影,所以還需要遍歷一下,給這個(gè)鏈接傳入offset參數(shù),實(shí)現(xiàn)其他90部電影的爬取

                              
                                if __name__ == '__main__':
    for i in range(10):
        main(offset=i * 10)

                              
                            

那么在定義 main() 時(shí)需要給它一個(gè) offset 參數(shù)

                              
                                def main(offset):
	url = 'http://maoyan.com/board/4?offset=' + str(offset)
	html = get_one_page(url)
	for item in parse_one_page(html):
		print(item)
		write_to_json(item)

                              
                            

完整代碼

                              
                                import requests
import re
import json

def get_one_page(url):
	response = requests.get(url)
	if response.status_code == 200:
		return response.text
	return None	
	
def parse_one_page(html):
	pattern = re.compile( '
                                
.*?board-index.*?>(.*?).*?data-src="(.*?)".*?name.*?a.*?>(.*?).*?star.*?>(.*?)

.*?releasetime.*?>(.*?)

.*?integer.*?>(.*?).*?fraction.*?>(.*?).*?
', re.S) items = re.findall(pattern,html) for item in items: yield{ '排名':item[0], '圖片':item[1], '電影名稱':item[2], '演員':item[3].strip()[3:], '上映時(shí)間':item[4].strip()[5:], '評(píng)分':item[5]+item[6]} def write_to_json(content): with open('result.txt','a') as f: print(type(json.dumps(content))) f.write(json.dumps(content,ensure_ascii=False)+'\n') def main(offset): url = 'http://maoyan.com/board/4?offset=' + str(offset) html = get_one_page(url) for item in parse_one_page(html): print(item) write_to_json(item) if __name__ == '__main__': for i in range(10): main(offset=i * 10)

效果如下:
【python】抓取貓眼電影排行_第4張圖片
文本文件內(nèi)容如下

完成。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 久久www免费人成_看片高清 | 亚洲欧洲精品视频在线观看 | 成人影院在线免费观看 | 亚欧毛片| 国产伊人久久 | 日韩黄色网页 | 婷婷色网站 | 欧美中文字幕在线播放 | 日韩一区二区视频 | 爱爱小视频免费体验区在线观看 | 一区二区三区欧美视频 | 色老板女色狠xx网 | 在线视频综合视频免费观看 | 狠狠狠狠狠狠狠狠狠狠 | cao美女视频网站在线观看 | 免费人成在线观看网站品爱网 | 亚洲qingse中文久久网 | 色老头在线观看精品 | 国产综合欧美日韩视频一区 | 国产成人免费高清视频 | 成熟的女性强烈交性视频 | 午夜不卡影院 | 成熟热自由日本语亚洲人 | 国产在线不卡视频 | 中文字幕日韩女同互慰视频 | 欧美性xxx免费看片 欧美性白人顶级hd 欧美性插视频 | 特级理论片| 国产精品人成在线播放新网站 | 4hu最新| 久久久这里只有精品加勒比 | 九九热视| 婷婷四色| 国产精品久久福利新婚之夜 | 免费观看欧美一级特黄 | 久久99网站 | 伊人影院在线观看视频 | 在线欧美精品国产综合五月 | 国产人成激情视频在线观看 | 国产成人精品三级91在线影院 | 亚洲高清在线观看播放 | 亚洲综合激情九月婷婷 |