如何用python抓取豆瓣电影TOP250

1.如何获取网站信息?

(1)调用requests库、bs4库

#检查库是否下载好的方法:打开终端界面(terminal)输入pip install bs4,

如果返回的信息里有Successfully installed bs4 说明安装成功(requests同理)

python 复制代码
from bs4 import BeautifulSoup
import requests

(2)访问网站

python 复制代码
import requests
response = requests.get("https://movie.douban.com/top250")
print(response.status_code)     #HTTP状态响应码
if response.ok:
    print(response.text)
else:
    print("请求失败")

输出结果:

418

请求失败

无法访问原因:

有些网站会检查请求的 User-Agent,如果没有提供合适的 User-Agent,可能会拒绝访问。

(3)添加 User-Agent 头部

打开网站->右键->检查->network

刷新网页--->点击任意一个模块--->在headers一栏找到"User-Agent"--->复制冒号后面的内容

python 复制代码
headers = {
    "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 SE 2.X MetaSr 1.0"
}
response = requests.get("https://movie.douban.com/top250",headers=headers)

(4)判断网站是否响应

如果状态码为200说明访问成功

python 复制代码
import requests
headers = {
    "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 SE 2.X MetaSr 1.0"
}
response = requests.get("https://movie.douban.com/top250",headers=headers)
print(response.status_code)     #HTTP状态响应码
if response.ok:
    print(response.text)
else:
    print("请求失败")

2.如何筛选出标题?

(1)分析网站的html文本

找出标题所在html文本的特点:

使用findAll函数筛选

python 复制代码
response = requests.get("https://movie.douban.com/top250",headers=headers)
content = response.text
soup = BeautifulSoup(content, "html.parser")
all_titles = soup.findAll("span", attrs={"class": "title"})
for t in all_titles:
    print(t.string)

输出结果:此时输出的标题不仅有中文标题还有原版标题

肖申克的救赎

/ The Shawshank Redemption

霸王别姬

阿甘正传

/ Forrest Gump

泰坦尼克号

/ Titanic

千与千寻

/ 千と千尋の神隠し

这个杀手不太冷

/ Léon

美丽人生

/ La vita è bella

星际穿越

/ Interstellar

盗梦空间

/ Inception

楚门的世界

/ The Truman Show

辛德勒的名单

/ Schindler's List

忠犬八公的故事

/ Hachi: A Dog's Tale

海上钢琴师

/ La leggenda del pianista sull'oceano

三傻大闹宝莱坞

/ 3 Idiots

放牛班的春天

/ Les choristes

机器人总动员

/ WALL·E

疯狂动物城

/ Zootopia

无间道

/ 無間道

控方证人

/ Witness for the Prosecution

大话西游之大圣娶亲

/ 西遊記大結局之仙履奇緣

熔炉

/ 도가니

教父

/ The Godfather

触不可及

/ Intouchables

当幸福来敲门

/ The Pursuit of Happyness

寻梦环游记

/ Coco

Process finished with exit code 0

如何筛选出中文标题:

python 复制代码
    all_titles = soup.findAll("span", attrs={"class": "title"})
    for t in all_titles:
         str = t.string
         if "/" not in str:    #筛选出中文标题
            print(str)

运行结果:

肖申克的救赎

霸王别姬

阿甘正传

泰坦尼克号

千与千寻

这个杀手不太冷

美丽人生

星际穿越

盗梦空间

楚门的世界

辛德勒的名单

忠犬八公的故事

海上钢琴师

三傻大闹宝莱坞

放牛班的春天

机器人总动员

疯狂动物城

无间道

控方证人

大话西游之大圣娶亲

熔炉

教父

触不可及

当幸福来敲门

寻梦环游记

3.如何爬取250个电影标题?

首先观察网址链接,找出不同点:

"https://movie.douban.com/top250?start=0\&filter="

"https://movie.douban.com/top250?start=25\&filter="

"https://movie.douban.com/top250?start=50\&filter="

......

"https://movie.douban.com/top250?start=175\&filter="

"https://movie.douban.com/top250?start=200\&filter="

"https://movie.douban.com/top250?start=225\&filter="

特点:网站总共有十页,每一页网址链接只有"start="后面的数字不一样

而数字正是每一页网页的第一个电影的索引,而每一页一共25个电影,因此可以才用for循环来访问这十个不同的网址:

python 复制代码
for start_num in range(0,250,25):   #第一个电影索引是0,第二个电影索引是249,每页网页有25个电影
    response = requests.get(f"https://movie.douban.com/top250?start={start_num}",headers=headers)
    

最终代码:

python 复制代码
from bs4 import BeautifulSoup
import requests
headers = {
    "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 SE 2.X MetaSr 1.0"
}
for start_num in range(0,250,25):   #第一个电影索引是0,第二个电影索引是249,每页网页有25个电影
    response = requests.get(f"https://movie.douban.com/top250?start={start_num}",headers=headers)
    content = response.text
    soup = BeautifulSoup(content, "html.parser")
    all_titles = soup.findAll("span", attrs={"class": "title"})
    for t in all_titles:
        str = t.string
        if "/" not in str:    #筛选出中文标题
            print(str)
response.close()           #关掉response
相关推荐
XiaoMu_0012 分钟前
基于Python+Streamlit的旅游数据分析与预测系统:从数据可视化到机器学习预测的完整实现
python·信息可视化·旅游
THMAIL4 分钟前
深度学习从入门到精通 - 生成对抗网络(GAN)实战:创造逼真图像的魔法艺术
人工智能·python·深度学习·神经网络·机器学习·生成对抗网络·cnn
w2sfot1 小时前
Passing Arguments as an Object in JavaScript
开发语言·javascript·ecmascript
郝学胜-神的一滴1 小时前
避免使用非const全局变量:C++中的最佳实践 (C++ Core Guidelines)
开发语言·c++·程序人生
我没想到原来他们都是一堆坏人1 小时前
(未完待续...)如何编写一个用于构建python web项目镜像的dockerfile文件
java·前端·python
搞一搞汽车电子1 小时前
S32K3平台eMIOS 应用说明
开发语言·驱动开发·笔记·单片机·嵌入式硬件·汽车
总有刁民想爱朕ha2 小时前
车牌模拟生成器:Python3.8+Opencv代码实现与商业应用前景(C#、python 开发包SDK)
开发语言·python·数据挖掘
小菜全3 小时前
uniapp新增页面及跳转配置方法
开发语言·前端·javascript·vue.js·前端框架
人衣aoa3 小时前
Python编程基础(八) | 类
开发语言·python
晚云与城3 小时前
今日分享:C++ Stack和queue(栈与队列)
开发语言·c++