本节笔记
获取豆瓣网站内容
记录文件创建时间
文件→设置→编辑器→文件和代码模板中找到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)
三.获取电影图片并以电影名字命名
要获取图片,到文件下创建一个文件夹