import requests # 模拟请求模块
from bs4 import BeautifulSoup # 格式化模块
import re # 正则模块
import time # 时间模块
# 创建一个空白文档
with open('D:\豆瓣.text',mode='w',encoding='utf-8') as f:
# for循环拼接网址
for start in range(0,251,25):
url = 'https://movie.douban.com/top250?start=%s'%start
headers = {
'Host': 'movie.douban.com',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Site': 'none',
'Sec-Fetch-User': '?1',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}
# 申请数据
res = requests.get(url=url,headers=headers)
# 取出装有电影信息的列表
soup = BeautifulSoup(res.text,'lxml')
li = soup.find('ol').find_all('li')
# 开始循环每一部电影
for i in li:
murl = i.a.get('href')
mres = requests.get(url=murl,headers=headers)
soup = BeautifulSoup(mres.text, 'lxml')
# 切片拿到电影排名
no = re.findall('<span class="top250-no">(.*?)</span>',mres.text)
# 切片拿到电影名称
name = re.findall('<span property="v:itemreviewed">(.*?)<', mres.text)
# 切片拿到电影评分
lv = re.findall('"ratingValue": "(.*?)"', mres.text)
# 切片拿到电影图片地址
pc = re.findall('src="(.*?)" title="点击看更多海报"', mres.text)
vu = {} # 事先创造一个控制点准备用来存放视频播放地址
# 找出所有a标签
ull = soup.find_all("a")
time.sleep(2)
for l in ull:
# 找出所有a标签中是否有关键字'playBtn'
if 'playBtn' in str(l):
# 取视频网站名称
d = re.findall('data-cn="(.*?)"', str(l))
# 取视频播放地址
v = re.findall('href="(.*?)" target="_blank"', str(l))
vu[d[0]] = v[0] # 加入实现准备好的字典
# 拼接字符串成一条完整信息
s = '排名:' + no[0] + '\t名字:' + name[0] + '\t评分:' + lv[0] + '\t图片:' + pc[0] + '\t视频地址:' + str(vu) + '\n'
# 追加写入实现准备好的文件中
with open('D:\豆瓣.text', mode='a', encoding='utf-8') as f:
f.write(s)
print(s)
time.sleep(3)
else:
print(no,'结束')