AI赋能Python,跟传统爬虫说再见!
前言
在传统的python爬虫中,我们只能获取到所爬取到的内容,但是在对爬取的内容分析时需要浪费很多的精力。本文将给大家展示如何利用大模型对爬取到的内容进行分析。(本项目演示环境为谷歌colab平台)
代码编写
1.传统python代码部分
进入到colab平台,将我们的代码放入到输入框,即可借助远程服务器运行。(需要确保科学上网状态)
Python库的安装
# python http请求库
!pip install requests
# python dom 查找
!pip install beautifulsoup4
1. !pip install requests
这条命令是使用pip(Python的包管理器)来安装名为requests
的库。requests
库是一个非常流行且用户友好的HTTP库,它允许你发送HTTP请求,比如GET、POST等,非常适用于网页内容抓取、API调用等网络通信任务。通过简单的函数调用,你就可以轻松地完成复杂的HTTP请求,而无需关注底层的网络细节。例如,你可以用它来下载网页内容、上传数据到服务器或与各种API交互。
2. !pip install beautifulsoup4
这一命令同样是利用pip安装名为beautifulsoup4
的库,它是Beautiful Soup库的第4个主要版本,简称BS4。Beautiful Soup是一个用于解析HTML和XML文档的库,特别适合于从网页中提取数据。它提供了一套简单直观的接口,让你能够以自然的方式遍历和搜索文档树,即使网页的HTML结构混乱或不规范也能有效处理。结合requests
库获取的网页内容,你可以使用Beautiful Soup来查找、提取和操作特定的HTML元素,比如提取文章标题、链接、图片URL等信息。
总结
这两条命令共同为Python环境增添了强大的网络数据抓取能力。requests
负责网络请求,获取网页数据;而beautifulsoup4
则专注于解析这些数据,让你能方便地定位并提取所需的信息。这对组合是进行网页爬虫开发、数据挖掘项目时的常见选择。需要注意的是,命令前的感叹号!
通常用于Jupyter Notebook或某些Python交互环境中,指示这是一个系统命令而非Python代码,直接在操作系统层面执行pip安装命令。在标准的Python脚本或命令行界面中,直接运行pip install
命令即可,无需加!
。
指令成功执行结果
传统爬虫代码的编写
# 引入请求库 模块化为复用,封装而来
# 函数级化 类 文件 架构
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)
-
导入必要的库:
import requests
: 导入requests库,用于发送HTTP请求获取网页内容。from bs4 import BeautifulSoup
: 从BeautifulSoup库中导入BeautifulSoup类,用于解析HTML文档。
-
定义函数
fetch_movie_list(url)
:该函数接收一个URL参数,用于从指定的网页中抓取电影列表信息。- 设置请求头:定义了一个headers字典,模拟浏览器的User-Agent,以更像真实用户访问,避免被服务器拒绝。
- 发送GET请求:使用requests.get()方法发送HTTP GET请求至指定的URL,并传入headers。
- 检查响应状态:如果请求成功(状态码200),继续处理响应内容;否则,打印错误信息“Failed to retrieve content”。
- 解析响应内容:使用BeautifulSoup解析返回的HTML文本(response.text),选择器语法
'#wrapper #content .article .item'
用于定位到电影列表项。这里.select()
方法返回所有匹配的选择器的元素列表。 - 提取并格式化电影信息:遍历前两个电影元素(
movies[:2]
),使用.prettify()
方法将每个元素的HTML结构美化后转换为字符串,然后将这些字符串连接起来形成all_movies_text
。 - 返回结果:最后返回包含前两部电影详情的格式化文本
all_movies_text
。
-
调用函数并打印结果:
- 定义了目标URL为豆瓣电影排行榜页面。
- 调用
fetch_movie_list(url)
函数,传入URL,获取并存储电影信息。 - 打印函数返回的结果,即前两部电影的HTML片段。
代码成功执行结果如下
python与Ai的结合
# AIGC LLM + Prompt(指令)
# es6 `` 字符串模版
# python
prompt = f"""
{movies}
这是一段电影列表html, 请获取电影名(name),封面链接(pricture),简介(info), 评分(score), 评论人数(commentsNumber),请使用括号的单词作为属性名,以JSON数组的格式返回
"""
print(prompt)
这段代码中构造一个Prompt(指令)字符串,用于指导一个语言模型(LLM)如何处理和解析特定格式的数据。
AI接口的连接
1. 指令!pip install dashscope
输入指令 !pip install dashscope
!pip install dashscope
命令的作用是使用pip工具安装名为DashScope的Python库。DashScope是阿里云开发的一款低代码AI开发平台,提供了大量的机器学习和深度学习模型,让用户能够快速构建、部署和扩展AI应用。
成功执行结果如下
阿里云通义千问接口的获取与配置
开通和获取通义千问的API-KEY教程如下:
如何开通DashScope并创建API-KEY_模型服务灵积(DashScope)-阿里云帮助中心 (aliyun.com)
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调用其内置的Qwen模型(Qwen是阿里云开发的超大规模语言模型)来生成文本响应。以下是代码的详细梳理:
-
导入DashScope库: 首先,通过
import dashscope
导入DashScope库,以便在代码中使用其提供的功能。 -
设置API密钥: 使用
dashscope.api_key = 'sk-6f82ed26394d45e6bc506d8d59791494'
设置DashScope的API密钥。这个密钥是用于认证和授权调用DashScope API的凭据,确保只有拥有该密钥的用户可以访问相关服务。请注意,实际使用时应替换此密钥为你自己在DashScope平台上获得的API密钥。 -
定义函数
call_qwen_with_prompt()
: 此函数用于通过Qwen模型生成文本响应。-
定义消息内容: 在函数内部,首先创建了一个名为
messages
的列表,其中包含一个字典。这个字典代表了一条消息,其结构包括角色(role
)和内容(content
)。在这个例子中,role
被设置为'user'
,表示这是一条用户消息,而content
则是一个名为prompt
的变量,应事先定义好,包含你希望模型生成响应的实际问题或指令。 -
调用Qwen模型: 接着,通过
dashscope.Generation.call()
方法调用了Qwen Turbo模型。这个方法需要几个参数:- 模型标识:
dashscope.Generation.Models.qwen_turbo
指定了要使用的模型为Qwen Turbo。 - 消息:
messages=messages
传递了之前定义的消息列表,作为模型的输入。 - 结果消息标识:
result_messages='message'
似乎是用来指定返回结果中消息的字段名,但根据官方文档,此参数并不存在于标准调用接口中,可能是笔误或对API的误解。正确的用法可能不需要此参数,或者应当根据实际API文档调整。
- 模型标识:
-
打印响应: 最后,函数打印了模型的响应
response
,即针对用户输入提示生成的文本内容。
-
-
调用函数: 通过
call_qwen_with_prompt()
调用该函数,执行上述过程,实际上触发了对Qwen模型的请求并打印返回的响应。
注意:在实际应用中,确保已经正确安装了DashScope库,并且你的API密钥有效且具有调用Qwen模型的权限。此外,确保prompt
变量在调用前已经被正确定义并赋值。
以上,AI与Python的结合就已经完毕了,接下来我们来看看执行的效果:
{"status_code": 200, "request_id": "904cb2e9-1104-958e-acb5-ac7bf08953f9", "code": "", "message": "", "output": {"text": "
json\n[\n {\n \"name\": \"对你的想象\",\n \"picture\": \"[https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905327559.jpg\](https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905327559.jpg/)",\n \"info\": \"关于你的想法 / 概念中的你\\n2024-03-16(西南偏南电影节) / 2024-05-02(美国网络) / 安妮·海瑟薇 / 尼古拉斯·加利齐纳 / 艾拉·鲁宾 / 安妮·玛莫罗 / 瑞德·斯科特 / 帕芮·马费尔德 / 乔丹·亚伦·霍尔 / 玛蒂尔达·吉安诺普洛斯 / Meg Millidge / 奇克·曼诺哈 / Ray Cham / Jaiden...\",\n \"score\": 5.9,\n \"commentsNumber\": 20433\n },\n {\n \"name\": \"哥斯拉-1.0\",\n \"picture\": \"[https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2900227040.jpg\](https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2900227040.jpg/)",\n \"info\": \"超大作怪獣映画 / 哥斯拉:负一\\n2023-11-01(东京国际电影节) / 2023-11-03(日本) / 神木隆之介 / 滨边美波 / 山田裕贵 / 青木崇高 / 吉冈秀隆 / 安藤樱 / 佐佐木藏之介 / 西垣匠 / 中村织央 / 谷口翔太 / 须田邦裕 / 水桥研二 / 阿南健治 / 饭田基祐 / 远藤雄弥 / 田中美央 / 桥爪功...\",\n \"score\": 6.6,\n \"commentsNumber\": 25229\n }\n]\n
\n这是根据您提供的HTML代码格式化成的JSON数组,包含了两部电影的名称、图片链接、简介、评分和评论人数。", "finish_reason": "stop", "choices": null}, "usage": {"input_tokens": 897, "output_tokens": 480, "total_tokens": 1377}
最终我们会获取到,大模型根据prompt和原始爬虫内容数据得到的结果。是不是很炫酷,颠覆了你对传统爬虫的认识。
本篇文章就到此为止啦,希望通过这篇文章能对你了解AI和Python结合赋能传统爬虫
有所帮助,本人水平有限难免会有纰漏,欢迎大家指正。如觉得这篇文章对你有帮助的话,欢迎点赞收藏加关注,感谢支持🌹🌹。
转载自:https://juejin.cn/post/7369876349488971815