第3天 | 10天搞定Python网络爬虫,爬电影,好简单?

第3天 | 10天搞定Python网络爬虫,爬电影,好简单?

首页休闲益智萌宠流浪记更新时间:2024-05-11

部门新来的美工MM,问我这个周末有没有空,她想请人去看电影?我窃窃偷笑,觉得这个姑娘不但设计能力强,人也长得漂亮,就赶紧回她:有的,有的,我有的是时间。

那你周末去电影帮我看一下,哪些电影正在热映,好不好?我想带我男朋友去看。

顶你个肺,我,我,我.....,一会发给你就是了。于是

3.1 找电影

打开Chrome浏览器,进到正在热映(电影):https://movie.douban.com/cinema/nowplaying/guangzhou/,按下键盘F12,切换到【Network】--【All】,刷新一下页面,选中某个链接,找到User-Agent,把里面的内容拷贝出来。

User-Agent的内容,是你在访问Web系统时,浏览器提交的计算机相关的本地信息。几乎所有系统都会用这个来判断是否是爬虫。如果你不加,那就是告诉系统,你正在爬数据。

3.2 爬电影

在requests的get方法中,有一个headers参数,它正是用来模拟浏览器访问行为的。你改成你自己的就好。想到设计师MM那样对我,我就不用正则表达式过滤数据了,直接将返回的html代码给她了。

import requests headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " "(KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"} url = "https://movie.douban.com/cinema/nowplaying/guangzhou/" # 主方法 def main(): res = requests.get(url, headers=headers) if res.status_code == 200: html = res.text print(html) else: print("服务器没响应") if __name__ == '__main__': main()

输出结果

万万没想到,她竟然跟我说:你既然用Python爬了电影,干嘛不帮我筛选一下数据呀?用BeautifulSoup,好简单的。啪啪啪,我的脸好疼,赶紧用上Python的第3方数据筛选库。

3.3 数据筛选

在命令行窗口,输入pip/pip3 install beautifulsoup4,安装一个可以从HTML或XML文件中提取数据的简单易用的Python库。

beautifulsoup4可支持调用Python内置的html.parse,它的特点是根据html标签和CSS选择器提取内容,易用程度要比正则表达式,不知容易了多少倍。

获取节点的方法,说过好几次了,不知道的,自己面壁思过去。

import requests from bs4 import BeautifulSoup headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " "(KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"} url = "https://movie.douban.com/cinema/nowplaying/guangzhou/" # 主方法 def main(): res = requests.get(url, headers=headers) if res.status_code == 200: soup = BeautifulSoup(res.text, "html.parser") items = soup.select("#nowplaying > div.mod-bd > ul.lists > li.list-item") # 去掉子标签ul [s.extract() for s in soup("ul")] for i, item in enumerate(items): print(str(i 1) ".", item["data-title"], item["data-release"]) print("评分:", item["data-score"]) print(item["data-duration"], item["data-region"]) print("导演:", item["data-director"]) print("主演:", item["data-actors"]) print("-" * 50) else: print("服务器没响应") if __name__ == '__main__': main()

输出结果

1. 金刚川 2020 评分: 6.5 122分钟 中国大陆 导演: 管虎 郭帆 路阳 主演: 张译 / 吴京 / 李九霄 -------------------------------------------------- 2. 掬水月在手 2020 评分: 8.1 120分钟 中国大陆 导演: 陈传兴 主演: 叶嘉莹 -------------------------------------------------- 3. 呼吸 2018 评分: 5.8 89分钟 法国 加拿大 导演: 丹尼尔·罗比 主演: 罗曼·杜里斯 / 欧嘉·柯瑞兰寇 / 芳汀·阿杜安 -------------------------------------------------- 4. 我和我的家乡 2020 评分: 7.3 153分钟 中国大陆 导演: 宁浩 徐峥 陈思诚 闫非 彭大魔 邓超 俞白眉 主演: 葛优 / 黄渤 / 范伟 -------------------------------------------------- 5. 喜宝 2020 评分: 3.4 112分钟 中国大陆 导演: 王丹阳 主演: 郭采洁 / 张国柱 / 高仁 -------------------------------------------------- 6. 飞奔去月球 2020 评分: 6.9 100分钟 美国 中国大陆 导演: 格兰·基恩 主演: 凯西·昂 / 菲莉帕·苏 / 罗伯特·邱 -------------------------------------------------- 7. 一点就到家 2020 评分: 7.1 97分钟 中国大陆 导演: 许宏宇 主演: 刘昊然 / 彭昱畅 / 尹昉 -------------------------------------------------- 8. 姜子牙 2020 评分: 6.9 110分钟 中国大陆 导演: 程腾 李炜 主演: 郑希 / 杨凝 / 图特哈蒙 -------------------------------------------------- 9. 七号房的礼物 2019 评分: 7.8 132分钟 土耳其 导演: 梅米特·艾达·厄兹泰金 主演: 阿拉斯·布鲁特·伊涅姆利 / 妮莎·索菲亚·阿克松古尔 / 德尼兹·贝萨尔 -------------------------------------------------- 10. 夺冠 2020 评分: 7.4 135分钟 中国大陆 中国香港 导演: 陈可辛 主演: 巩俐 / 黄渤 / 吴刚 -------------------------------------------------- 11. 再见吧!少年 2020 评分: 7.2 120分钟 中国大陆 导演: 林子平 主演: 刘敏涛 / 荣梓杉 / 谭凯 -------------------------------------------------- 12. 急先锋 2020 评分: 5.0 108分钟 中国大陆 导演: 唐季礼 主演: 成龙 / 杨洋 / 艾伦 -------------------------------------------------- 13. 八佰 2020 评分: 7.7 147分钟(公映版) 中国大陆 导演: 管虎 主演: 王千源 / 张译 / 姜武 -------------------------------------------------- 14. 菊次郎的夏天 1999 评分: 8.8 121分钟 日本 导演: 北野武 主演: 北野武 / 关口雄介 / 岸本加世子 -------------------------------------------------- 15. 信条 2020 评分: 7.8 150分钟 美国 英国 导演: 克里斯托弗·诺兰 主演: 约翰·大卫·华盛顿 / 罗伯特·帕丁森 / 伊丽莎白·德比茨基 -------------------------------------------------- 16. 82号古宅 2020 评分: 0 87分钟 中国大陆 导演: 袁杰 主演: 葛天 / 扈天翼 / 黄心娣 -------------------------------------------------- 17. 花木兰 2020 评分: 5.0 115分钟 美国 中国大陆 导演: 妮琪·卡罗 主演: 刘亦菲 / 甄子丹 / 巩俐 -------------------------------------------------- 18. 死无对证 2018 评分: 7.7 102分钟 意大利 导演: 斯蒂法诺·摩尔蒂尼 主演: 里卡多·斯卡马乔 / 米丽娅姆·莱昂内 / 马丽娅·派雅托 -------------------------------------------------- 19. 以寡敌众 2018 评分: 6.1 124分钟(中国大陆) 英国 美国 导演: 史蒂夫·麦奎因 主演: 维奥拉·戴维斯 / 连姆·尼森 / 乔·博恩瑟 -------------------------------------------------- 20. 达芬奇大冒险:拯救蒙娜丽莎 2018 评分: 0 85分钟 意大利 导演: Sergio Manfio 主演: 约翰尼·扬·博施 / 谢拉米·李 / Bryce Papenbrook -------------------------------------------------- 21. 盗梦空间 2010 评分: 9.3 148分钟 美国 英国 导演: 克里斯托弗·诺兰 主演: 莱昂纳多·迪卡普里奥 / 约瑟夫·高登-莱维特 / 艾伦·佩吉 -------------------------------------------------- 22. 天道王 2020 评分: 0 112分钟 中国大陆 导演: 苑本立 主演: 巩峥 / 陶红 / 杨钧丞 -------------------------------------------------- 23. 小妇人 2019 评分: 8.1 135分钟 美国 导演: 格蕾塔·葛韦格 主演: 西尔莎·罗南 / 艾玛·沃森 / 弗洛伦丝·皮尤 -------------------------------------------------- 24. 哈利·波特与魔法石 2001 评分: 9.1 152分钟 美国 英国 导演: 克里斯·哥伦布 主演: 丹尼尔·雷德克里夫 / 艾玛·沃森 / 鲁伯特·格林特 -------------------------------------------------- 25. 邻里美好的一天 2019 评分: 6.8 109分钟 美国 中国大陆 导演: 玛丽埃尔·海勒 主演: 汤姆·汉克斯 / 马修·瑞斯 / 苏珊·卡莉奇·沃森 -------------------------------------------------- 26. 极速车王 2019 评分: 8.6 152分钟 美国 导演: 詹姆斯·曼高德 主演: 马特·达蒙 / 克里斯蒂安·贝尔 / 乔什·卢卡斯 -------------------------------------------------- 27. 萌宠流浪记 2019 评分: 5.9 87分钟 加拿大 美国 开曼群岛 导演: 凯文·约翰逊 主演: 大肖恩 / 帕梅拉·阿德龙 / 露西·海尔 -------------------------------------------------- 28. 一丈天地 2020 评分: 0 98分钟 中国大陆 导演: 邓国庆 主演: 陈亮 / 陈淋 / 池丹 -------------------------------------------------- 29. 未知嫌疑人 2019 评分: 5.9 102分钟 哥伦比亚 导演: 耶西德·莱奥内 主演: 罗伯托·埃斯科巴 / 玛丽亚·加维拉 / 克里斯蒂娜·莉莉 --------------------------------------------------3.4 爬虫伴侣

在爬虫编程中,BeautifulSoup是个好伴侣,它提供一些简单的、python 式的函数用来处理导航、搜索、修改分析树(html或xml文件)等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序,从补全修护文档,只用prettify()一个方法便可得知。

from bs4 import BeautifulSoup soup = BeautifulSoup('<b class="good">老陈说编程</b>', "lxml") print(soup.prettify())

输出结果

<html> <body> <b class="good"> 老陈说编程 </b> </body> </html>

1. tag标签

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,Tag标签对象与XML或HTML原生文档中的tag(标签)相同,最重要的属性有name和attributes。

在我们上面开发的爬虫程序可知,获取值用到了属性,如print("评分:", item["data-score"])。对Tag的操作,跟字典没什么不同,一样可以增、删、改。

from bs4 import BeautifulSoup soup = BeautifulSoup('<b name="title" class="good">老陈说编程</b>', "lxml") print(soup.prettify()) tag = soup.b print("%s标签的属性值有:%s" % (tag.name, tag["class"])) print("标签所有属性", tag.attrs) # 可对属性进行增删改操作 print("-------------------增改之后-------------------") tag["class"] = "nice" tag["id"] = 666 print(soup.prettify()) print("-------------------删除之后-------------------") del tag["class"] print(soup.prettify())

输出结果

<html> <body> <b class="good" name="title"> 老陈说编程 </b> </body> </html> b标签的属性值有:['good'] 标签所有属性 {'name': 'title', 'class': ['good']} -------------------增改之后------------------- <html> <body> <b class="nice" id="666" name="title"> 老陈说编程 </b> </body> </html> -------------------删除之后------------------- <html> <body> <b id="666" name="title"> 老陈说编程 </b> </body> </html>

2. 常用方法

BeautifulSoup在HTML或XML文档中提取需要数据时,常用find_all() 、find()和selector()方法定位需要的元素。find()方法与find_all() 类似,只是find()返回一个tag,而find_all()返回符合条件的所有tag。selector()方法的内容,可通过Chrome浏览器右键--【检查】定位到源码之后,选择【Copy】--【Copy Selector】,这个我又说一次了哦。

from bs4 import BeautifulSoup html = """ <html><head><title>有个故事</title></head> <body> <p class="title"><b>老陈和设计师MM的故事</b></p> <p class="story">设计师MM让我去电影,寻找最新的影片,我原本因为是想请我去,结果..... <a href="http://example.com/hot" class="film" id="link1">热门上映</a>, <a href="http://example.com/willbe" class="film" id="link2">即将上映</a> 故事的结局比电影还要精彩,周末可以省钱了,在家生面壁思过,就是一本电影.</p> <p class="story_end">无论生活如何不如意,你的生活还得如意的,生活下去,呜呜呜~</p> """ soup = BeautifulSoup(html, 'html.parser') # find获取电影名称 item = soup.find("p", "title") print("电影《" item.get_text() "》") # find_all查找所有符合名称的内容 items = soup.find_all("a") for tag in items: print(tag.get_text()) print(tag["href"]) # selector定位故事的结局 tags = soup.select("body > p.story_end") for tag in tags: print(tag.get_text())

输出结果

电影《老陈和设计师MM的故事》 热门上映 http://example.com/hot 即将上映 http://example.com/willbe 无论生活如何不如意,你的生活还得如意的,生活下去,呜呜呜~

好了,有关用简单的方法爬取电影的内容,老陈讲完了,如果觉得对你有所帮助,希望老铁能转发点赞,让更多的人看到这篇文章。你的转发和点赞,就是对老陈继续创作和分享最大的鼓励。

一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,可关注今日头条:老陈说编程。我将分享Python,前端(小程序)、App和嵌入式方面的干货。

关注我,没错的。

,
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved