从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。人生三

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

点击调试

调试结果

posted @   Menq  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示