python爬豆瓣top250电影

文章目录

  • 前言
  • 分析与实现
    • 1.对豆瓣网网站进行Ajax分析
    • 2.发送请求
    • 3.进一步筛选(提取)
  • 完整代码

前言

通过这个项目,可以让小白对爬虫有一个初步认识,爬取豆瓣top250是一个初学者学爬虫的必经之路,话不多说,我们开始吧

分析与实现

1.对豆瓣网网站进行Ajax分析

对豆瓣电影top250网站进行检查,可以在网络部分看到该页数据的请求头信息


需要注意的是,我们要爬取的页面数据文件是top250这个文件,判断需要从哪个包中提取数据可以在响应里看到:

2.发送请求

python 复制代码
import requests
 
# 发请求测试
response = requests.get('https://movie.douban.com/top250')
print(response)

会得到418的状态码,就是豆瓣会拒绝我们的访问

这是因为服务器没有识别到我们是用户端,所以为了保证网站数据的安全,将我们拒之门外。那么我们就需要对自己进行一些简单的伪装。

这里也是需要IP地址的

可以从以下方法获取IP地址

UA(user-agent)伪装,是我本次采用的伪装策略,也是最简单的伪装策略,有些网站的反爬机制比较复杂,则需要采用更加复杂的反反爬机制来进行伪装,不过,对于豆瓣来说,UA伪装就够用了。

那么我们现在给我们的请求带一个请求头,并且请求头中带一个User-agent信息,这个信息可以在检查页面的请求头信息(Headers)里找到,如下所示:

填入代码中

python 复制代码
import requests
 
# 发请求测试网站反爬机制
headers = {
        'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/1'
 
    }
response = requests.get('https://movie.douban.com/top250',headers=headers)
print(response)

状态码就为200,说明响应成功,这个时候我们已经爬到我们想要的数据了

然后就可以直接答应出来我们想要的数据

3.进一步筛选(提取)

这里我使用的方法是python正则式,所以我们需要先分析html代码的结构,这里需要一点前端知识,但是因为爬虫的前导知识是前端开发,因此默认大家都是能看懂的。

通过观察,我们可以发现电影标题包含在这个类里,所以我们可以使用正则式将它匹配出来:

复制代码
<span class="title">(.*?)</span>

代码

python 复制代码
import re
 
title = re.findall('<span class="title">(.*?)</span>', response.text,re.S)

提取完之后我们需要对不干净的数据进行筛选,这一步可以省略,详见于完整代码。

其他信息也按照这个逻辑提取出来,这里我提取了题目、国籍、上映时间这三个数据,大家可以根据自己的需要去提取。

完整代码

使用正则表达式的代码

python 复制代码
import requests
import re
 
'''爬取豆瓣电影top20'''
def top250_crawer(url, sum):
    headers = {
        'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/1'
 
    }
    response = requests.get(url, headers=headers)
    print(response.text)
    title = re.findall('<span class="title">(.*?)</span>', response.text,re.S)
    new_title = []
    for t in title:
        if '&nbsp;/&nbsp' not in t:
            new_title.append(t)
    data = re.findall('<br>(.*?)</p>', response.text, re.S)
    time = []
    country = []
    for str1 in data:
        str1 = str1.replace(' ', '')
        str1 = str1.replace('\n', '')
        time_data = str1.split('&nbsp;/&nbsp;')[0]
        country_data = str1.split('&nbsp;/&nbsp;')[1]
        time.append(time_data)
        country.append(country_data)
    print(len(new_title))
    print(len(time))
    print(len(country))
    for j in range(len(country)):
        sum += 1
        print(str(sum)+'.' + new_title[j] + ',' + country[j] + ',' + time[j])
 
 
url = 'https://movie.douban.com/top250'
sum = 0
'遍历10页数据,250条结果'
for a in range(10):
    if sum == 0:
        top250_crawer(url, sum)
        sum += 25
    else:
        page = '?start=' + str(sum) + '&filter='
        new_url = url + page
        top250_crawer(new_url, sum)
        sum += 25

就提取到我们想要的内容了

相关推荐
Dream of maid7 分钟前
Python基础 6 (面向对象)
开发语言·python
郝学胜-神的一滴9 分钟前
「栈与缩点的艺术」二叉树前序序列化合法性判定:从脑筋急转弯到工程实现
java·开发语言·数据结构·c++·python·算法
无心水20 分钟前
22、Java开发避坑指南:日期时间、Spring核心与接口设计的最佳实践
java·开发语言·后端·python·spring·java.time·java时间处理
Hello.Reader24 分钟前
双卡 A100 + Ollama 最终落地手册一键部署脚本、配置文件、预热脚本与 Python 客户端完整打包
开发语言·网络·python
vx_biyesheji000125 分钟前
计算机毕业设计:Python网约车订单数据可视化系统 Django框架 可视化 数据大屏 数据分析 大数据 机器学习 深度学习(建议收藏)✅
大数据·python·机器学习·信息可视化·django·汽车·课程设计
AC赳赳老秦29 分钟前
OpenClaw实战案例:用1个主控+3个Agent,实现SEO文章日更3篇
服务器·数据库·python·mysql·.net·deepseek·openclaw
智算菩萨33 分钟前
PyCharm版本发展史:从诞生到AI时代的Python IDE演进历程
ide·人工智能·python·pycharm·ai编程
Khsc434ka36 分钟前
LeetCode-001:Python 实现哈希表求两数之和:初识哈希表
python·leetcode·散列表
冬至喵喵1 小时前
构建 CLI 的 Python 框架:Typer技术介绍
开发语言·chrome·python
nimadan121 小时前
豆包写小说软件2025推荐,专业写作助力灵感迸发
大数据·人工智能·python