前军教程网

中小站长与DIV+CSS网页布局开发技术人员的首选CSS学习平台

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

部门新来的美工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('老陈说编程', "lxml")
print(soup.prettify())

输出结果


 
  
   老陈说编程
  
 

1. Tag标签

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

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

from bs4 import BeautifulSoup

soup = BeautifulSoup('老陈说编程', "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())

输出结果


 
  
   老陈说编程
  
 

b标签的属性值有:['good']
标签所有属性 {'name': 'title', 'class': ['good']}
-------------------增改之后-------------------

 
  
   老陈说编程
  
 

-------------------删除之后-------------------

 
  
   老陈说编程
  
 

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 = """
有个故事

老陈和设计师MM的故事

设计师MM让我去电影,寻找最新的影片,我原本因为是想请我去,结果..... 热门上映, 即将上映 故事的结局比电影还要精彩,周末可以省钱了,在家生面壁思过,就是一本电影.

无论生活如何不如意,你的生活还得如意的,生活下去,呜呜呜~

""" 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和嵌入式方面的干货。

关注我,没错的。

#Python##网络爬虫##程序员##爬虫#

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言