Python爬虫--2
本节笔记
获取豆瓣网站内容
记录文件创建时间
文件→设置→编辑器→文件和代码模板中找到Python Script
在输入界面输入
"#日期:${DATE}
"#文件:${NAME}
新建一个Python文件,显示了此文件创建时间和文件名字
一.单页获取
1.获取电影名字
网页URL:https://movie.douban.com/top250
首先先获取网页信息
import requests
url="https://movie.douban.com/top250"
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0"}
response=requests.get(url,headers=headers)
print(response.text)
方便查看网页代码,我们新建一个HTML文件,将获取到的网页粘贴到HTML文件中
拖动HTML1文件到另一边,方便查看
导入正则表达式,找到含有电影名字的代码,复制代码,将中间名字改为正则表达式语法任意字符"(.*?)",运行获取电影名字,发现还有同样出现了电影和英文名字和空格字符
我们只获取中文,使用正则表达式中“除了”的语法
- [^ ]除了的意思--eg:[^ ]
# 日期:2024/3/22
# 文件:spider1
import requests
import re
url="https://movie.douban.com/top250"
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0"}
response=requests.get(url,headers=headers)
#解析数据
#获取电影名字
movieName=re.findall( '<span class="title">([^ ].*?)</span>',response.text)
print(movieName)
2.获取电影名字和电影评分
找到含有评分的代码,复制,按照上面方法替换
# 日期:2024/3/22
# 文件:spider1
import requests
import re
url="https://movie.douban.com/top250"
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0"}
response=requests.get(url,headers=headers)
#解析数据
#获取电影名字
movieName=re.findall( '<span class="title">([^ ].*?)</span>',response.text)
#获取电影评分
score=re.findall(' <span class="rating_num" property="v:average">(.*?)</span>',response.text)
print(movieName)
print(score)
列出方式:
(1)分别列出
(2)以元组方式列出
有25部电影,所以range()有25个,range(25)不包括25,但是以下用了i+1,所以数字排序是1-25
(3)基于元组排列方式列出
# 日期:2024/3/22
# 文件:spider1
import requests
import re
url="https://movie.douban.com/top250"
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0"}
response=requests.get(url,headers=headers)
#解析数据
#获取电影名字
movieName=re.findall( '<span class="title">([^ ].*?)</span>',response.text)
#获取电影评分
score=re.findall(' <span class="rating_num" property="v:average">(.*?)</span>',response.text)
#print(movieName)
#print(score)
l=[] #创建空元组
#元组方式列出
for i in range(25):
l.append((i+1,movieName[i],score[i])) #设置变量,添加序号
print(l)
#基于元组排列方式列出
for i in l:
print(i)
二.多页获取
只需更改单页获取的几个地方:多页的url和请求的数据
创建电影名字和电影评分的空置,构造url
先来查看几页网页的url
第二页
第三页
第二十五页
第一页
从上面来看,都是基于"https://movie.douban.com/top250?start=(从0开始每次增加25)&filter="
构造url:url="https://movie.douban.com/top250?start=" + str(i) + "&filter="
将数据更改为循环形式(i=i+1,不知道怎么表达)
因为这次请求的数据有250个,把输出结束值改为250
运行
import requests
import re
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0"}
movieName=[]
score=[]
#构造url
for i in range(0,250,25): #range[开始,结束,步长]
url="https://movie.douban.com/top250?start=" + str(i) + "&filter=" #"25"或者str(25),25为数字,"+"是连接字符串
#发送请求
response=requests.get(url,headers=headers)
#请求数据
#获取电影名字(中文)
movieName+=re.findall('<span class="title">([^ ].*?)</span>',response.text)
#获取电影评分
score=score+ re.findall('<span class="rating_num" property="v:average">(.*?)</span>',response.text)
#普通列出
print(movieName)
print(score)
l=[]
#元组方式列出
for i in range(250):
l.append((i+1,movieName[i],score[i]))
print(l)
#排列列出
for i in l:
print(i)
三.获取电影图片并以电影名字命名
获取图片,到文件下创建一个文件夹,命名为images
获取单页的图片只需要更改单页获取的几个地方:获取的数据,请求响应的图片数据
获取图片数据,构造图片的url
找到网页源码中图片的代码
构造图片的url
获取图片方式
运行同时打开存储图片的文件夹可以看到正在获取图片
最后获得
# 日期:2024/3/24
# 文件:spider2
import requests
import re
url="https://movie.douban.com/top250?start=0&filter="
#发送请求
headers={"User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0'}
response=requests.get(url,headers=headers)
#请求数据
#获取电影名字(中文)
movieName=re.findall('<span class="title">([^ ].*?)</span>',response.text)
#获取电影图片
imgurl=re.findall('src="(.*?)" class="">',response.text)
for i in range(25):
imgres=requests.get(imgurl[i],headers=headers) #发起图片请求
filename="./images/" + movieName[i] + ".jpg" #构建文件名=图片位置+电影名字+图片格式
with open (filename,mode="wb") as f: #打开图片,(图片名字,图片模式)并赋值给f
f.write(imgres.content) #写操作
调试程序
调试程序,也叫做debug,就是对于结果不符合预期的程序,将程序执行的过程放慢甚至中途暂停,通过逐步排查中间变量或者输出以定位有故障的代码段的过程。
设置断点
点击调试
调试结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人