比德勒科技

豆瓣电影微信小程序

日期:2024-08-05 01:48 / 作者:www.biddlecn.com

零基础学Python难吗?Python编程教程哪里找?

1使用python的解释运行:打开互交式解释器,写入“pront'hello world”。

2将文件名改为“hello.py”,“py”是后缀名。

3打开刚才写的代码,点击“Run”→"run mo dule",或者直接按F5运行代码。

4通过Windows命令运行:找到"hello.py"的文件,输入“python hello.py”。即可运行程序。

【Python爬虫】120行代码爬取豆瓣电影,附源码

私信我或关注猿来如此呀公众号,回复:视频学习,即有机会免费领取30天视频学习资源包

学习爬虫,拿豆瓣电影进行练手,无奈豆瓣电影存在反爬机制,爬完250就会重定向要求我进行登陆操作,所以我这一次只爬取前50进行相关测试,废话不多说,我们来看下源代码:


import requestsfrom bs4 import BeautifulSoupimport reimport pandasheaders = { 'Host':'movie.douban.com', 'Origin':'movie.douban.com', 'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Mobile Safari/537.36',}base_url = '?start={}&filter='response = requests.get('?start=0&filter=', headers = headers)if response.status_code == 200: # print(response.text) passpattern1 = re.compile('<div.*?class="item">.*?<div.*?class="pic">.*?<a.*?href="(.*?)">', re.S) # 去掉所有换行符,并用正则表达式去匹配每一个页面的具体电影urls = re.findall(pattern1, response.text)directors = [] # 导演names = [] # 电影名stars = [] # 主演countrys = [] # 电影的出产地languages = [] # 电影语言headers_urls = { 'Host':'movie.douban.com', 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}# <span property="v:itemreviewed">肖申克的救赎 The Shawshank Redemption</span># <a href="/celebrity/1047973/" rel="v:directedBy">弗兰克·德拉邦特</a># <a href="/celebrity/1054521/" rel="v:starring">蒂姆·罗宾斯</a>def base_urls(base_url): urls = [] # 这里我们只能前两页做测试,所以range只设置到了50 # for i in range(0, 275, 25): # true_url = base_url.format(i) # print(true_url) for i in range(0, 50, 25): true_url = base_url.format(i) print(true_url) response = requests.get(true_url, headers=headers) if response.status_code == 200: # print(response.text) pattern1 = re.compile('<div.*?class="item">.*?<div.*?class="pic">.*?<a.*?href="(.*?)">',re.S) # 去掉所有换行符,并用正则表达式去匹配每一个页面的具体电影 url = re.findall(pattern1, response.text) # 因为这里是用findall,他返回的是一个列表,如果我们直接append,会导致列表嵌套,故我们这里用个for循环提取出列表的元素再append进去 for i in url: urls.append(i) return urlsdef parse_url(urls): # 因为只拿前两页做测试,所以range设置到50 for i in range(0, 50, 1): res = requests.get(urls[i], headers = headers_urls) print(res) if res.status_code == 200: soup = BeautifulSoup(res.text, 'lxml') # 爬取电影名 name = (soup.find('span', property="v:itemreviewed")) names.append(name.text) # print(names) # 爬取导演 director = soup.find('a', rel="v:directedBy") directors.append(director.text) # print(director.text) # 爬取明星 star_save = [] for star in soup.find_all('a', rel="v:starring"): star_save.append(star.text) stars.append(star_save) # print(stars) # 爬取制片国家 #<span class="pl">制片国家/地区:</span> 美国<br> # 学到的知识点:通过匹配文本内容找下个兄弟节点 country = soup.find('span', text='制片国家/地区:').next_sibling[1:] countrys.append(country) # print(countrys) # 爬取影片语言 # <span class="pl">语言:</span> language = soup.find('span', text='语言:').next_sibling[1:] languages.append(language) # print(language)# print(directors)# print(true_director)# print(a)if __name__ == '__main__': base = base_urls(base_url) print(base) print(len(base)) parse_url(base) print(countrys) print(directors) print(languages) print(names) # # 最后我们将数据写入到一个excel表格里 info ={'Filmname':names, 'Directors':directors, 'Country':countrys, 'Languages':languages} pdfile = pandas.DataFrame(info) # pdlook.to_excel('链家.xlsx', sheet_name="链家二手房广州") pdfile.to_excel('DoubanFilm.xlsx', sheet_name="豆瓣电影")

这次用到的还是requests库,BeautifulSoup解析库,和re进行辅助的正则匹配库,最后老样子利用pandas的DataFrame进行excel的写入。

来源网络,侵权删除

基于ChatGPT实现电影推荐小程序

ChatGPT是什么?

ChatGPT是 “美国AI梦工厂”OpenAI 开发的人工智能聊天机器人,让撰写邮件、论文、脚本,制定商业提案,创作诗歌、故事,甚至敲代码、检查程序错误都变得易如反掌。很多网友都感叹“只有你想不到,没有它做不到“。

OpenAI 可以说是顶尖科学家、大资本家、顶级创业导师的一次强强联手倾力打造的经典案例。这家公司成立的起因是受到了一位图灵奖得主、加拿大蒙特里尔大学教授阿本N9在人工智能、神经网络和深度学习领域有了重大的学术突破而引发的,他可以算得上是计算机深度学习领域的教父级别的人物。

2015年由特斯拉、SpaceX CEO、尼鲁马斯克联合创始人、演出投资人皮印度科技巨头以及亚马逊网络共同捐赠十亿美金,用于解决科研上的资金难题,让科学家们更专注于自己的研究。也就是说,这家公司成立的初衷,它并不是为了商业化变现,而是共享人工智能的研究成果。

直到2016年Sam Altman的加入,他可是硅谷创业教父YC公司创始人亲自任命的CEO。可以说Sam Altman是带着创业和孵化了众多互联网独角兽公司的经验加入的,经过了四年的产品打磨,从此open AI走上了商业化的道路。

2019年,微软科斯拉风险投资机构又为open AI注入了10亿美金的投资,为自己在人工智能领域做好了布局,这也就是大家为什么能看到微软的产品开始全面和China GDP融合的原因了。创业的尽头是投资,open AI并没有停止在人工智能领域的研发和投资,拿着20亿美金的累计融资金额,前后开发了四个具备重大突破的产品,而Chatgpt只是其中一个。

Chatgpt的崛起,就像一把火点燃了近年来一直雷声大雨点小的人工智能赛道,它的商业模式呢?也是史无前例的,创造性的将人工智能这样曲高赫寡的专供技术实现了平民化,并迅速跑出了成功。

ChatGPT对我们的启发

ChatGPT已经不仅仅只是个聊天机器人,它还会写小说,写代码,甚至啊,未来成百上千个行业啊都要被他颠覆,许多工作岗位也会被取代。更糟糕的是,这个时间可能只需要十年,现在的拆的ChatGPT还只是初级形态,就已经让很多职场打工人开始焦虑了。去年下半年,绘图行业的打工人啊就基本陷入了绝望,之前他们为小说绘制插图,一张图呢能卖到120块,而现在用AI绘图软件,一张图只要不到一块钱,要知道,AI一天能生成上万张图片,还可以不吃不喝连续的工作24小时,不仅工作效率高啊,价格呢还只有人工的1%。

不仅如此,就在它爆火的这两个月里啊,整个教育系统都被颠覆了,摸出门道的学生呢,开始使用拆ChatGPT生成论文,居然得到了A+的分数,老师们被吓得不轻,因为加拿大作家呢,直接发出了警告,大学论文已死,现在耶鲁、哈佛等6000多名老师已经联合打响了AI反击战。更好笑的是啊,开始发出ChatGPT的程序员居然连自己也没放过。

ChatGPT已经通过了谷歌L3工程师岗位的面试,年薪只要120万,普通谷歌码农的性价比一下就没了,这简直就是在砸自己的犯法,而且他的学习速度实在是太快了,21年的它的参数,还只有十五亿,22年就飙升到了1750亿,参数越大,AI的知识就越渊博,ChatGPT现在比历史上所有的AI加起来还要聪明,如果继续这样下去,很多工种的需求啊都会极大的降低,那普通人的出路又在哪里呢?对此你怎么看?

一、需求背景

在我们日常想看电影的时候,经常会遇到一些问题:

1. 闲来无事想看个电影,打开电影列表,感觉都是看过的,一下子不知道该如何去发现新大陆?

2. 喜欢某个演员,想看与他风格类似的电影,可惜电影网站的影片推荐总是那么不尽人意!

3. 在不同的电影网站,填入自己的感兴趣的标签,结果推荐出来的电影题材并不是自己想要的效果!

既然说起推荐系统,这就刚好踩中了我那研究三年推荐系统的读研苦逼时光了。稍微介绍一下时下主流的推荐系统的架构和算法:

这里的大数据推荐系统体系仅为简单的架构模型,其中涉及到更多的计算任务和调度数据流等细节均已省略 。

在如此庞大的数据体量和计算引擎的支持下,现如今的推荐系统仍然没有以完美的姿态来解决用户的冷启动问题,所以说时下,推荐系统在学术界的研究已经达到了一种登峰造极的状态,你我都知道可能多引入一些高性能的模型去加强,多跑几轮模型去调参优化,从而实现更美丽的推荐效果!这样我们可能可以得到一篇优秀的论文!但是在工业应用领域,对于推荐算法的优化,新投入的算力跟人工成本,通常并不会由于更准推荐效果从而产生更丰厚的营收,可以说投入跟产出完全不成正比!这对于时下资本退却的互联网来说,这是最要命的!

于是乎,我们可以转换一下思路,有没有什么模型和算法可以实现推荐效果最优化,不惧怕因为用户数据量少而导致的冷启动问题 ------ 那么这个时候ChatGPT获取可以申请一战,他有超海量的全人类用户数据、连续产生内容及记忆理解上下文功能!

好那么,基于此,让我们来用ChatGPT做一个电影推荐小程序!做一个可以满住你的任意无理要求的电影小程序。

二、项目原理及架构2.1 实现原理

1. 要利用上ChatGPT的推荐功能,首先构造好目标明确的问题是成功的关键。
2. 在获取到GPT的推荐数据之后,我们需要将推荐结果中的电影内容获取并展示在小程序端,这里我们需要采用Python爬虫对豆瓣电影网进行爬取!

这里我们构造了三类推荐类目: 兴趣标签、电影主题、电影明星

(1)根据用户的兴趣标签

通过用户输入的兴趣标签进行电影的匹配

(2)根据关联类似主题的题材 (3)根据特定的电影明星 2.2 技术架构 三、项目功能的实现3.1 小程序端设计与实现 3.2 数据后端设计与实现

注重介绍后端服务接入 ChatGPT API,需要按照以下步骤进行操作:

注册一个账号并登录到OpenAI的官网:

在Dashboard页面上,创建一个API密钥。在“API Keys”选项卡下,点击“Generate New Key”按钮。将生成的密钥保存好,以备后续使用。

选择所需的API服务,例如“Completion” API,以使用OpenAI的文本生成功能。

使用Python调用ChatGPT API实现代码如下:

方法一:使用request库 方式二:使用openAI库

3.3 数据智能获取功能设计与实现

定义一个函数来实现电影信息的爬取,该函数的输入参数为电影名,输出为该电影的名称、导演、主演、类型、上映时间、评分等信息。具体实现步骤如下:

构造请求 URL,其中电影名需要进行 URL 编码。

发送 HTTP 请求,获取豆瓣电影页面的 HTML 内容。

使用 lxml 库解析 HTML 文档,提取电影信息。

我们可以通过调用该函数,传入电影名参数来获取电影信息。例如: 输出结果如下:

Python网页爬虫爬取豆瓣Top250电影数据(附带完整代码)?

有个写博客的朋友想让我帮忙获取一下豆瓣上的Top250的电影数据,说是做个什么电影推荐榜,没办法之后硬着头皮拿出我那一小点点的Python爬虫技术来完成人家的需求了。当然了也是在不违法的情况下进行的。

要爬取豆瓣电影排名信息,我们可以使用Python中的Request库来发送一个请求,然后使用一些HTML解析工具例如BeautifulSoup或者是通过Lxml库来对HTML页面进行解析,然后将解析到的结果打印出来。

一个简单的实现

import requestsfrom bs4 import BeautifulSoupdef crawl_douban_movies(url): # 发送 HTTP GET 请求获取页面内容 response = requests.get(url) if response.status_code == 200: # 使用 BeautifulSoup 解析页面内容 soup = BeautifulSoup(response.text, 'html.parser') # 找到电影列表 movie_list = soup.find_all('div', class_='item') for movie in movie_list: # 获取电影名称和评分 title = movie.find('span', class_='title').text rating = movie.find('span', class_='rating_num').text print(f"电影:{title},评分:{rating}") else: print("请求失败")if __name__ == "__main__": # 豆瓣电影 Top 250 页面 URL url = "" crawl_douban_movies(url)

是不是有点简单了?在这个例子中我们通过requests.get()发送HTTP GET请求获取豆瓣电影Top250页面的HTML内容。然后,使用BeautifulSoup解析页面内容,提取出电影名称和评分,并打印出来。

运行程序之后,发现居然给我来了个请求失败?这是为什么呢?是网络请求不通?还是说豆瓣网站对相关的操作有所限制呢?

经过验证发现豆瓣网站可能设置了反爬虫机制,检测到了爬虫行为并阻止了请求。为了规避这种情况,我尝试设置请求头信息,来模拟正常的浏览器访问。

模拟正常浏览器的访问?

为了模拟正常浏览器的访问操作,所以添加了请求头信息,将代码升级成如下的样子。

import requestsfrom bs4 import BeautifulSoupdef crawl_douban_movies(url): # 添加 User-Agent 请求头信息 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36' } # 发送带有请求头信息的 HTTP GET 请求 response = requests.get(url, headers=headers) if response.status_code == 200: # 使用 BeautifulSoup 解析页面内容 soup = BeautifulSoup(response.text, 'html.parser') # 找到电影列表 movie_list = soup.find_all('div', class_='item') for movie in movie_list: # 获取电影名称和评分 title = movie.find('span', class_='title').text rating = movie.find('span', class_='rating_num').text print(f"电影:{title},评分:{rating}") else: print("请求失败")if __name__ == "__main__": # 豆瓣电影 Top 250 页面 URL url = "" crawl_douban_movies(url)

与之前不同的是,我们添加了User-Agent请求头信息。这样这个请求就是模拟浏览器发送的。应该算是正常请求了。果然,运行代码之后,结果如下。

正当我以为这样就可以的时候,朋友居然说为什么没有导演的信息,为什么没有那个简单的评语的信息呀?我勒个去?还要这么麻烦么?这就不得不让我去分析一下页面了

获取导演信息和评语信息?

打开网页开发这工具,简单的分析页面之后,有了这样的结果。如下所示。

导演信息,在一个div里面,并且class叫做bd,在这个div里面有个p标签,这个p标签中就是导演的信息。那么这样我们就可以通过如下的操作来获取了。

# 获取导演信息directors = movie.find('div', class_='bd').find('p').text.split('\n')[1].strip().split('\xa0\xa0\xa0')

那么评语信息又在什么地方呢?

简单查找之后发现,评语在一个span标签中这就简单了,我们可以通过如下的方式来进行获取。

quote = movie.find('span', class_='inq').text if movie.find('span', class_='inq') else ''

整体代码修改变成了如下的样子。

import requestsfrom bs4 import BeautifulSoupdef crawl_douban_movies(url): # 添加 User-Agent 请求头信息 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36' } # 发送带有请求头信息的 HTTP GET 请求 response = requests.get(url, headers=headers) if response.status_code == 200: # 使用 BeautifulSoup 解析页面内容 soup = BeautifulSoup(response.text, 'html.parser') # 找到电影列表 movie_list = soup.find_all('div', class_='item') for movie in movie_list: # 获取电影名称 title = movie.find('span', class_='title').text # 获取导演信息 directors = movie.find('div', class_='bd').find('p').text.split('\n')[1].strip().split('\xa0\xa0\xa0') director = directors[0].strip().split(':')[-1] # 获取评语 quote = movie.find('span', class_='inq').text if movie.find('span', class_='inq') else '' print(f"电影:{title},导演:{director},评语:{quote}") else: print("请求失败")if __name__ == "__main__": # 豆瓣电影 Top 250 页面 URL url = "" crawl_douban_movies(url)

运行上述代码之后,结果如下所示,我心想,这下应该就可以了吧,然后人家说评分没有了,我去,这东西还能难得我么?我就把评分的代码给复制粘贴到这段代码中。

将评分的获取代码复制粘贴完成之后,得到了如下的结果

我就说这是不是很完美了,他居然说还不行?他还要下面的时间信息、产地信息这些?我去这咋玩?

获取时间信息和产地信息?

其实获取时间信息和获取产地信息的方式跟上面的操作是一样的。只需要通过查看代码,找到对应的HTML标识就可以提取到对应的信息。

在获取电影详细信息的时候遇到了格式处理的问题,如下所示。

# 获取电影详情信息details = movie.find('div', class_='bd').find('p').text.split('\n')info = [i.strip() for i in details if i.strip() != '']#print("获取到信息",info) # 打印详情信息列表# 提取时间、产地和剧情信息if len(info) >= 2: year_region = info[1].split('\xa0/\xa0') year = year_region[0].strip() region = year_region[1].strip() plot = info[1].strip()else: year = "未知" region = "未知" plot = "未知"获取到页面电影详情的URL地址?

要获取电影的详细页面 URL,需要从每个电影条目中提取链接信息。豆瓣电影条目的链接通常包含在a标签的href属性中如下图所示。

通过如下的操作来获取到对应属性中的数据

detail_url = movie.find('a')['href']

最终获取完成的电影信息如下图所示。

到这里,人家的需求才算提完,原来现在电影博主都这么卷的了么?想要这么多信息,居然不自己整理,让我这个小喽喽来帮他实现。真实有天赋呀?

最终给出完整的代码

在满足了他所有的要求之后,最终我们给出详细的代码

import requestsfrom bs4 import BeautifulSoupdef crawl_douban_movies(url): # 添加 User-Agent 请求头信息 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36' } # 发送带有请求头信息的 HTTP GET 请求 response = requests.get(url, headers=headers) if response.status_code == 200: # 使用 BeautifulSoup 解析页面内容 soup = BeautifulSoup(response.text, 'html.parser') # 找到电影列表 movie_list = soup.find_all('div', class_='item') for movie in movie_list: # 获取电影名称 title = movie.find('span', class_='title').text rating = movie.find('span', class_='rating_num').text # 获取电影详细页面链接 detail_url = movie.find('a')['href'] # 获取导演信息 directors = movie.find('div', class_='bd').find('p').text.split('\n')[1].strip().split('\xa0\xa0\xa0') director = directors[0].strip().split(':')[-1] # 获取评语 quote = movie.find('span', class_='inq').text if movie.find('span', class_='inq') else '' # 获取电影详情信息 details = movie.find('div', class_='bd').find('p').text.split('\n') info = [i.strip() for i in details if i.strip() != ''] #print("获取到信息",info) # 打印详情信息列表 # 提取时间、产地和剧情信息 if len(info) >= 2: year_region = info[1].split('\xa0/\xa0') year = year_region[0].strip() region = year_region[1].strip() plot = info[1].strip() else: year = "未知" region = "未知" plot = "未知" print(f"电影:{title}\n评分:{rating}\n导演:{director}\n评语:{quote}\n时间:{year}\n产地:{region}\n剧情:{plot}\n详细页面链接:{detail_url}\n") else: print("请求失败")if __name__ == "__main__": # 豆瓣电影 Top 250 页面 URL url = "" crawl_douban_movies(url)

通过上述代码,我们就可以获取到豆瓣电影TOP250的所有电影信息,当然这里需要手动的将页码信息进行添加,例如第二页的URL就会变成?start=25&filter= 样子,在实际操作的时候我们可以自己进行调整。