300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 【python爬虫自学笔记】(实战)----爬取猫眼电影榜单Top100

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

时间:2019-04-06 16:42:35

相关推荐

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

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

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

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

其中每个页面只能显示10个电影,若要爬取前100个,需要不断点击下一页,由url中的offset参数进行控制,如图所示,抓取一页内容后offset参数加10获取下一页内容,最终爬取100个电影的信息内容。

源代码如下:

import requestsimport reimport jsonfrom requests.exceptions import RequestExceptionfrom multiprocessing import Poolheaders = {'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.textreturn Noneexcept RequestException:return None#解析一页的内容def parse_one_page(html):#定义正则表达式获取电影排名,图片地址,名称,主演,上映日期,评分等信息pattern = pile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'+'.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>.*?'+'integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',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 = '/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数据信息内容为:

<dd><i class="board-index board-index-11">11</i><a href="/films/7431" title="乱世佳人" class="image-link" data-act="boarditem-click" data-val="{movieId:7431}"><img src="///mywww/image/loading_2.e3d934bf.png" alt="" class="poster-default" /><img data-src="/movie/230e71d398e0c54730d58dc4bb6e4cca51662.jpg@160w_220h_1e_1c" alt="乱世佳人" class="board-img" /></a><div class="board-item-main"><div class="board-item-content"><div class="movie-item-info"><p class="name"><a href="/films/7431" title="乱世佳人" data-act="boarditem-click" data-val="{movieId:7431}">乱世佳人</a></p><p class="star">主演:费雯·丽,克拉克·盖博,奥利维娅·德哈维兰</p><p class="releasetime">上映时间:1939-12-15(美国)</p> </div><div class="movie-item-number score-num"><p class="score"><i class="integer">9.</i><i class="fraction">1</i></p> </div></div></div></dd>

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

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

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。