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,就是对于结果不符合预期的程序,将程序执行的过程放慢甚至中途暂停,通过逐步排查中间变量或者输出以定位有故障的代码段的过程。
设置断点

点击调试

调试结果


浙公网安备 33010602011771号