【python爬虫自学笔记】(实战)----爬取猫眼电影榜单Top100

目的:爬取猫眼电影榜单TOP100的信息并保存在文档中。

查看网站结构,确定思路:

首先请求网页的地址为maoyan.com/board/4,电影信息的内容包含在一个个dd标签之中,分析dd标签中的内容,提取有用信息。

【python爬虫自学笔记】(实战)----爬取猫眼电影榜单Top100_第1张图片
其中每个页面只能显示10个电影,若要爬取前100个,需要不断点击下一页,由url中的offset参数进行控制,如图所示,抓取一页内容后offset参数加10获取下一页内容,最终爬取100个电影的信息内容。

【python爬虫自学笔记】(实战)----爬取猫眼电影榜单Top100_第2张图片

源代码如下:

import requests
import re
import json
from requests.exceptions import RequestException
from multiprocessing import Pool
headers = {
   'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134'
}
#获取一页的内容
def get_one_page(url):
    try:
        response = requests.get(url,headers=headers)
        if response.status_code == 200:
            return response.text
        return None
    except RequestException:
        return None
#解析一页的内容
def parse_one_page(html):
    #定义正则表达式获取电影排名,图片地址,名称,主演,上映日期,评分等信息
    pattern = re.compile('
.*?board-index.*?>(\d+).*?data-src="(.*?)".*?name">(.*?).*?star">(.*?)

.*?releasetime">(.*?)

.*?' +'integer">(.*?).*?fraction">(.*?).*?
',re.S) items = re.findall(pattern,html) print(items) #定义生成器 for item in items: yield { 'index':item[0], 'image':item[1], 'title':item[2], 'star':item[3].strip()[3:], #去掉开头的换行符和内容的'主演:' 'releasetime':item[4].strip()[5:], #去掉换行符和内容的'上映日期:' 'score':item[5]+item[6] #评分的整数部分与小数部分相加 } #写入文件 def write_to_file(content): #确保写入文件中的中文内容能正确显示,使用encoding='utf-8'和ensure_ascii=False参数 with open('result.txt','a',encoding='utf-8') as f: f.write(json.dumps(content,ensure_ascii=False)+'\n') #json.dumps()方法将字典形式的数据转换为字符串类型 f.close() def main(offset): url = 'http://maoyan.com/board/4?offset='+str(offset) html = get_one_page(url) print(html) for item in parse_one_page(html): print(item) write_to_file(item) if __name__ == '__main__': #使用循环的方式进行页面的遍历 # for i in range(10): # main(i*10) #使用多线程进行处理,爬取速度快 pool = Pool() pool.map(main,[i*10 for i in range(10)])

其中html数据信息内容为:

11 乱世佳人

乱世佳人

主演:费雯·丽,克拉克·盖博,奥利维娅·德哈维兰

上映时间:1939-12-15(美国)

9.1

正则表达式解析后得到的结果为:

('21', 'http://p1.meituan.net/movie/d981a12f59d3cc92ff666094404ad8f0211220.jpg@160w_220h_1e_1c', '黑客帝国', '\n                主演:基努·里维斯,凯瑞-安·莫斯,劳伦斯·菲什伯恩\n        ', '上映时间:2000-01-14', '9.', '0'), ('22', 'http://p0.meituan.net/movie/932bdfbef5be3543e6b136246aeb99b8123736.jpg@160w_220h_1e_1c', '指环王3:王者无敌', '\n                主演:伊莱贾·伍德,伊恩·麦克莱恩,丽芙·泰勒\n        ', '上映时间:2004-03-15', '9.', '2'), ('23', 'http://p1.meituan.net/movie/b449893ebc63d5c54eb4a5b60341f334383831.jpg@160w_220h_1e_1c', '加勒比海盗', '\n                主演:约翰尼·德普,凯拉·奈特莉,奥兰多·布鲁姆\n        ', '上映时间:2003-11-21', '8.', '9'), ('24', 'http://p1.meituan.net/movie/aacb9ed2a6601bfe515ef0970add1715623792.jpg@160w_220h_1e_1c', '哈利·波特与魔法石', '\n                主演:丹尼尔·雷德克里夫,鲁伯特·格林特,艾玛·沃森\n        ', '上映时间:2002-01-26', '9.', '1'), ('25', 'http://p0.meituan.net/movie/d12a1c198ad9ffac72b5db57feacb449294699.jpg@160w_220h_1e_1c', '蝙蝠侠:黑暗骑士', '\n                主演:克里斯蒂安·贝尔,希斯·莱杰,艾伦·艾克哈特\n        ', '上映时间:2008-07-18(美国)', '9.', '3'), ('26', 'http://p0.meituan.net/movie/8959888ee0c399b0fe53a714bc8a5a17460048.jpg@160w_220h_1e_1c', '楚门的世界', '\n                主演:金·凯瑞,劳拉·琳妮,诺亚·艾默里奇\n        ', '上映时间:1998-06-01(美国)', '8.', '9'), ('27', 'http://p1.meituan.net/movie/53b6f0b66882a53b08896c92076515a8236400.jpg@160w_220h_1e_1c', '射雕英雄传之东成西就', '\n                主演:张国荣,梁朝伟,张学友\n        ', '上映时间:1993-02-05(中国香港)', '8.', '9'), ('28', 'http://p1.meituan.net/movie/0d93b5b585ce29c6688e43f3989fb41f86421.jpg@160w_220h_1e_1c', '无间道', '\n                主演:刘德华,梁朝伟,黄秋生\n        ', '上映时间:2003-09-05', '9.', '1'), ('29', 'http://p1.meituan.net/movie/7bac8bfa6739c18620065132ce9c64fa85110.jpg@160w_220h_1e_1c', '教父2', '\n                主演:阿尔·帕西诺,罗伯特·德尼罗,黛安·基顿\n        ', '上映时间:1974-12-12(美国)', '9.', '0'), ('30', 'http://p0.meituan.net/movie/5cfa597a98b35ee4ee598695942641ba287922.jpg@160w_220h_1e_1c', '指环王2:双塔奇兵', '\n                主演:伊莱贾·伍德,伊恩·麦克莱恩,丽芙·泰勒\n        ', '上映时间:2003-04-25', '9.', '1')]

进行数据提取后得到的结果为;

{'index': '21', 'image': 'http://p1.meituan.net/movie/d981a12f59d3cc92ff666094404ad8f0211220.jpg@160w_220h_1e_1c', 'title': '黑客帝国', 'star': '基努·里维斯,凯瑞-安·莫斯,劳伦斯·菲什伯恩', 'releasetime': '2000-01-14', 'score': '9.0'}
{'index': '22', 'image': 'http://p0.meituan.net/movie/932bdfbef5be3543e6b136246aeb99b8123736.jpg@160w_220h_1e_1c', 'title': '指环王3:王者无敌', 'star': '伊莱贾·伍德,伊恩·麦克莱恩,丽芙·泰勒', 'releasetime': '2004-03-15', 'score': '9.2'}
{'index': '23', 'image': 'http://p1.meituan.net/movie/b449893ebc63d5c54eb4a5b60341f334383831.jpg@160w_220h_1e_1c', 'title': '加勒比海盗', 'star': '约翰尼·德普,凯拉·奈特莉,奥兰多·布鲁姆', 'releasetime': '2003-11-21', 'score': '8.9'}
{'index': '24', 'image': 'http://p1.meituan.net/movie/aacb9ed2a6601bfe515ef0970add1715623792.jpg@160w_220h_1e_1c', 'title': '哈利·波特与魔法石', 'star': '丹尼尔·雷德克里夫,鲁伯特·格林特,艾玛·沃森', 'releasetime': '2002-01-26', 'score': '9.1'}
{'index': '25', 'image': 'http://p0.meituan.net/movie/d12a1c198ad9ffac72b5db57feacb449294699.jpg@160w_220h_1e_1c', 'title': '蝙蝠侠:黑暗骑士', 'star': '克里斯蒂安·贝尔,希斯·莱杰,艾伦·艾克哈特', 'releasetime': '2008-07-18(美国)', 'score': '9.3'}
{'index': '26', 'image': 'http://p0.meituan.net/movie/8959888ee0c399b0fe53a714bc8a5a17460048.jpg@160w_220h_1e_1c', 'title': '楚门的世界', 'star': '金·凯瑞,劳拉·琳妮,诺亚·艾默里奇', 'releasetime': '1998-06-01(美国)', 'score': '8.9'}
{'index': '27', 'image': 'http://p1.meituan.net/movie/53b6f0b66882a53b08896c92076515a8236400.jpg@160w_220h_1e_1c', 'title': '射雕英雄传之东成西就', 'star': '张国荣,梁朝伟,张学友', 'releasetime': '1993-02-05(中国香港)', 'score': '8.9'}
{'index': '28', 'image': 'http://p1.meituan.net/movie/0d93b5b585ce29c6688e43f3989fb41f86421.jpg@160w_220h_1e_1c', 'title': '无间道', 'star': '刘德华,梁朝伟,黄秋生', 'releasetime': '2003-09-05', 'score': '9.1'}
{'index': '29', 'image': 'http://p1.meituan.net/movie/7bac8bfa6739c18620065132ce9c64fa85110.jpg@160w_220h_1e_1c', 'title': '教父2', 'star': '阿尔·帕西诺,罗伯特·德尼罗,黛安·基顿', 'releasetime': '1974-12-12(美国)', 'score': '9.0'}
{'index': '30', 'image': 'http://p0.meituan.net/movie/5cfa597a98b35ee4ee598695942641ba287922.jpg@160w_220h_1e_1c', 'title': '指环王2:双塔奇兵', 'star': '伊莱贾·伍德,伊恩·麦克莱恩,丽芙·泰勒', 'releasetime': '2003-04-25', 'score': '9.1'}

 

你可能感兴趣的:(python)