2024年了,该用Google Colab爬豆瓣了爬豆瓣,乃是所有新手学习爬虫绕不开的坎,更是各大程序员网站经久不衰的话
爬豆瓣,乃是所有新手学习爬虫绕不开的坎,更是各大程序员网站经久不衰的话题,如果是以前,大家只会贴上一段代码巴拉几句完事儿,可现在是2024年,你咋还不用AI爬豆瓣?
Google Colab,全名Google Colaboratory,是Google Research团队开发的一款云端编程工具,它允许任何人通过浏览器编写和执行Python代码,同时,它预装了几乎所有主流的机器学习和深度学习框架以及常用的工具库,Colab尤其适合机器学习、数据分析和教育目的,更重要的是,它是免费的。
因此,得益于Google Colab,我们完全可以实现下达指令给AI,我们想爬啥,就让AI帮我们爬。
登录Google Colab网站
首先在谷歌登录 colab.research.google.com/?hl=zh-tw#s… 进入Google Colab界面(安全上网)。
登录后选择新增一个笔记本,我们就会看到待输入的代码框。
安装python库
在代码输入框中输入这样两行代码,用于安装我们接下来需要用到的库。
# python http请求库
!pip install requests
# python dom 查找
!pip install beautifulsoup4
Python HTTP请求库 - Requests: 用于发出HTTP请求。使用 requests
库,可以轻松地向Web服务器发送GET、POST等类型的请求,并处理服务器返回的响应数据。
Python DOM查找库 - BeautifulSoup: 主要用于从HTML或XML文件中提取数据。它通过解析文档并形成解析树,使得用户可以轻松地浏览和修改文档内容,特别适用于网络数据抓取和数据提取任务。
随后点击代码框左侧的运行按钮开始运行,以下为运行结果截图。
传统Python代码的编写
接下来我们另起一单元代码框,开始传统Python代码的编写,并且,接下来的每一步代码我都将附上相应的解释。
# 引入请求库 模块化为复用,封装而来
# 函数级化 类 文件 架构
import requests # node require
from bs4 import BeautifulSoup
def fetch_movie_list(url):
# 设置HTTP 请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
}
# Python是同步
response = requests.get(url, headers=headers)
# 状态码 成功
if response.status_code == 200:
# 内存中的dom对象
soup = BeautifulSoup(response.text, 'html.parser')
movie_list = []
movies = soup.select('#wrapper #content .article .item')
all_movies_text = ''.join([movie.prettify() for movie in movies[:2]])
return all_movies_text
else:
print("Failed to retrieve content")
url = 'https://movie.douban.com/chart'
movies = fetch_movie_list(url)
print(movies)
以上代码分别分以下七步进行。
1.导入必要的库
import requests
from bs4 import BeautifulSoup
requests
库用于发起HTTP请求。BeautifulSoup
用于解析HTML文档。
2.定义函数 fetch_movie_list(url)
:
def fetch_movie_list(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
}
response = requests.get(url, headers=headers)
- 设置了请求的头部信息,模拟了一个浏览器的User-Agent。
- 使用
requests.get()
方法向指定的url
发送GET请求,并将响应存储在response
变量中。
3.处理响应:
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
- 如果响应状态码为200(即成功),则使用
BeautifulSoup
解析返回的文本内容,创建一个soup
对象。 如图将Python代码输入在新建的代码框,并点击运行按钮。
4.选择电影信息:
movies = soup.select('#wrapper #content .article .item')
- 这行代码便是使用CSS选择器
#wrapper #content .article .item
定位到页面中包含电影信息的元素。
5.获取电影信息的HTML表示:
all_movies_text = ''.join([movie.prettify() for movie in movies[:2]])
- 使用列表推导式将前两部电影的
prettify()
结果连接成一个字符串all_movies_text
,这里的prettify()
方法用于美化输出HTML,使其易于阅读。
6.返回结果:
return all_movies_text
else:
print("Failed to retrieve content")
- 如果请求不成功(非200状态码),则输出错误信息。
7.调用函数并打印结果:
url = 'https://movie.douban.com/chart'
movies = fetch_movie_list(url)
print(movies)
- 将豆瓣电影排行榜页面的前两部电影的HTML内容打印出来。
运行结果如截图所示:
如图,代码运行成功!我们从指定URL获取到了豆瓣电影排行榜的前两部电影的HTML表示:
给出指令
好了,现在我们开始借助Google Colab这个平台,给即将接入的AI下指令,于是我们再起一个代码框,输入以下指令,指令的内容为:获取所爬取的电影名(name),封面链接(pricture),简介(info), 评分(score), 评论人数(commentsNumber),并使用括号的单词作为属性名,以JSON数组的格式返回。
同样的,我们点击运行按钮。
# AIGC LLM + Prompt(指令)
# es6 `` 字符串模版
# python
prompt = f"""
{movies}
这是一段电影列表html, 请获取电影名(name),封面链接(pricture),简介(info), 评分(score), 评论人数(commentsNumber),请使用括号的单词作为属性名,以JSON数组的格式返回
"""
print(prompt)
安装AI接口
现在想爬取的网站有了,指令也有了,接下来就是配置AI接口,让AI帮我们实现功能的时候。于是我们再添加代码框,输入:
!pip install dashscope
这个指令,它的作用是使用pip工具安装名为DashScope
的Python库。而DashScope
是阿里云开发的一款低代码AI开发平台,提供了大量的机器学习和深度学习模型,让用户能够快速构建、部署和扩展AI应用。
同样的,我们点击执行按钮:
导入AI:阿里云通义千问
阿里云的通义千问自然不必多说,作为阿里云推出的一款超大规模的语言模型,功能包括多轮对话、文案创作、逻辑推理、多模态理解、多语言支持等。同样的,它具有一定的免费次数。
如果有没有申请过阿里云密钥的友友,可以点击以下的官方链接学习获取。 help.aliyun.com/zh/dashscop…
于是我们再起一行,输入以下代码:
import dashscope
dashscope.api_key = '获取到的阿里云密钥'
def call_qwen_with_prompt():
messages = [
{
'role': 'user',
'content': prompt
}
]
response = dashscope.Generation.call(
dashscope.Generation.Models.qwen_turbo,
messages=messages,
result_messages='message'
)
print(response)
call_qwen_with_prompt()
需要注意的是,第三行需要你自行输入所获取到的阿里云密钥。
这段代码通过使用dashscope.api_key
设置了DashScope的API密钥,使用 dashscope
库调用AI通义千问,通过Google Colab传递所提供的消息(在 prompt
变量中),于是我们成功得到想要的各种电影信息,并将生成的文本响应打印输出。
那么,所有的准备已经完毕,现在就是最后一步的运行:
通义千问通过Google Colab的执行指令结果如下:
{"status_code": 200, "request_id": "cddd2602-23cf-9852-80a0-405a4bf5e078", "code": "",
"message": "", "output": {"text": "```json\n[\n {\n \"name\": \"来福大酒店\",\n \"picture\":
\"https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2909005405.jpg\",\n \"info\":
\"2024-06-28(中国大陆) / 黄轩 / 柳岩 / 刘洋 / 张哲华 / 董宝石 / 李晓川 / 葛四 / 任洛敏 / 徐小飒 / 王
飞 / 节冰 / 中国大陆 / 刘博文 / 2024-06-01 / 118分钟 / 剧情 / 喜剧 / 爱情 / 姚冠辰 Guanchen Yao /
刘博文 Bowen Liu / 汉语普通话\",\n \"score\": \"7.2\",\n \"commentsNumber\": \"11068\"\n },\n {\n
\"name\": \"职业杀手\",\n \"picture\":
\"https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2908994553.jpg\",\n \"info\":
\"2023-09-05(威尼斯电影节) / 2024-06-07(美国网络) / 格伦·鲍威尔 / 阿德里娅·阿霍纳 / 奥斯丁·阿梅里奥
/ 瑞塔·希尔丽夫 / 桑杰伊·拉奥 / 莫莉·伯纳德 / 埃文·霍茲曼 / 格拉伦·布莱恩特·班克斯 / 麦克·马科夫 / 布
莱恩特·卡罗尔 / 恩里克·布什...\",\n \"score\": \"7.0\",\n \"commentsNumber\": \"12644\"\n
}\n]\n```\n\n这是两个电影的详细信息,按照您提供的属性名格式组织成JSON数组。", "finish_reason":
"stop", "choices": null}, "usage": {"input_tokens": 871, "output_tokens": 434, "total_tokens":
1305}}
至此,大功告成!
总结:
你看,正如我们所愿,经由Google Colab平台,AI正确的执行了给出的指令,爬取了我们想要的关于电影的全部信息,包括电影名(name),封面链接(pricture),简介(info), 评分(score), 评论人数(commentsNumber),并按照我们的要求使用了括号的单词作为属性名,并以JSON数组的格式返回,这无疑是一次完美的传统编程与AI的结合。
转载自:https://juejin.cn/post/7386476988881141800