python爬取豆瓣电影top250-python实战项目,手把手教学,附源码

news2024/9/22 23:25:29

目录

  • 1、分析网页
  • 2、请求服务器
    • 2.1导入包
    • 2.2设置浏览器代理
    • 2.3请求服务器格式
    • 2.4请求服务器代码汇总
  • 3.xpath提取信息
    • 3.1获取xpath节点的方法
    • 3.2xpath提取内容
    • 3.2.1提取文本
    • 3.2.2提取链接
    • 3.2.3提取标签元素
  • 4.正则表达式
    • 4.1提取固定位置的信息
    • 4.2匹配出数字
  • 5、提取一页中的所有信息
  • 6、把内容写入文本csv
  • 7、把所有代码汇总

1、分析网页

当我们去爬取网页时,首先要做的就是先分析网页结构,然后就会发现相应的规律,如下所示:
在这里插入图片描述
生成链接:从网页链接的规律中可得写一个for循环即可生成它的链接,其中它的间隔为25,程序如下:

for page in range (0,226,25):
    url ="https://movie.douban.com/top250?start=%s&filter="%page
    print (url)

得到的结果如下:
在这里插入图片描述

2、请求服务器

在爬取网页之前,我们要向服务器发出请求

2.1导入包

没有安装requests包的要先进行安装,步骤为:1.win+R运行——2.cmd回车——3.输入命令pip install requests

2.2设置浏览器代理

在这里插入图片描述

设置浏览器代理的代码如下:

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}

2.3请求服务器格式

请求源代码,向服务器发出请求,如果在后面加上.text表示输出文本内容,代码如下图所示:

requests.get(url = test_url, headers = headers)


2.4请求服务器代码汇总

import requests
#pip安转 pip install requests————>win+r,运行————>cmd,回车,————>pip
test_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/80.0.3987.149 Safari/537.36'
}

#请求源代码,向服务器发出请求,200代表成功
reponse = requests.get(url = test_url, headers = headers).text
# 快捷键运行,Ctrl+Enter

3.xpath提取信息

3.1获取xpath节点的方法

在这里插入图片描述

3.2xpath提取内容

from lxml import etree #导入解析库
html_etree = etree.HTML(reponse) # 看成一个筛子,树状

3.2.1提取文本

当我们在提取标签内的文本时,要在复制的xpath后面加上/text()
如《霸王别姬》:

<span class="title">霸王别姬</span>

xpath为:

//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]

提取文字:

name = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]/text()')
print ("这是数组形式:",name)
print ("这是字符串形式:",name[0])

3.2.2提取链接

我们在提取链接时,需要在复制到的xpath后面加上/@href , 指定提取链接,

movie_url = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/@href')
print ("这是数组形式:",movie_url)
print ("这是字符串形式:",movie_url[0])

结果如下:
在这里插入图片描述

3.2.3提取标签元素

提取标签元素和提取链接的方法一样,不过要在后面加上 /@class 就可以了,

rating = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[2]/div/span[1]/@class')
print ("这是数组形式:",rating)
print ("这是字符串形式:",rating[0])

结果如下:
在这里插入图片描述

4.正则表达式

4.1提取固定位置的信息

正则表达式中用(.*?)来提取我们想要的信息,在使用正则表达式时,通常要先导入re这个包,举例如下:

import re
test = "我是js"
text = re.findall("我是.*?",test)
print (text)

结果如下:
在这里插入图片描述

4.2匹配出数字

比如说我们要匹配出有多少人评价这部电影,我们可以这样写:

import re 
data = "1059232人评价"
num = re.sub(r'\D', "", data)
print("这里的数字是:", num)

结果如下:
在这里插入图片描述

5、提取一页中的所有信息

比如说我们这里提取最后一页的电影名称,如下:

li = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li')
for item in li:
    name = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]
    print (name)

结果如下:
在这里插入图片描述

按照这种方法,我们可以把所有的都爬取下来。

6、把内容写入文本csv

代码如下:

import csv
# 创建文件夹并打开
fp = open("./豆瓣top250.csv", 'a', newline='', encoding = 'utf-8-sig')
writer = csv.writer(fp) #我要写入

# 写入内容
writer.writerow(('排名', '名称', '链接', '星级', '评分', '评价人数'))

#关闭文件
fp.close()


7、把所有代码汇总

import requests, csv, re
from lxml import etree

#设置浏览器代理,它是一个字典
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}

# 创建文件夹并打开
fp = open("./豆瓣top250.csv", 'a', newline='', encoding = 'utf-8-sig')
writer = csv.writer(fp) #我要写入
# 写入内容
writer.writerow(('排名', '名称', '链接', '星级', '评分', '评价人数'))

for page in range(0, 226, 25): #226
    print ("正在获取第%s页"%page)
    url = 'https://movie.douban.com/top250?start=%s&filter='%page
    
    #请求源代码,向服务器发出请求,200代表成功,回退对其,Ctrl+]
    reponse = requests.get(url = url, headers = headers).text
    # 快捷键运行,Ctrl+Enter
    html_etree = etree.HTML(reponse) # 看成一个筛子,树状
    # 过滤
    li = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li')
    for item in li:
        #排名
        rank = item.xpath('./div/div[1]/em/text()')[0]
        #电影名称
        name = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]
        #链接
        dy_url = item.xpath('./div/div[2]/div[1]/a/@href')[0]
        #评分
        rating = item.xpath('./div/div[2]/div[2]/div/span[1]/@class')[0]
        rating = re.findall('rating(.*?)-t', rating)[0]
        if len(rating) == 2:
            star = int(rating) / 10  #int()转化为数字
        else:
            star = rating
    #     注释ctrl+?

        rating_num = item.xpath('./div/div[2]/div[2]/div/span[2]/text()')[0]
        content = item.xpath('./div/div[2]/div[2]/div/span[4]/text()')[0]
        content = re.sub(r'\D', "", content)
#         print (rank, name, dy_url, star, rating_num, content)
        # 写入内容
        writer.writerow((rank, name, dy_url, star, rating_num, content))
fp.close()


结果如下:
在这里插入图片描述

csv文件中的结果:
在这里插入图片描述

最后爬取结束。

需要代码的扫下方图片无偿获取哦~

在这里插入图片描述

如有侵权,请联系删除。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1972169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 并发编程:Java 线程池的介绍与使用

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 024 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…

细分 Insight 合作伙伴 2024 年企业技术状况报告

Insight Partners 的团队刚刚发布了 2024 年企业技术状况报告。在 60 幻灯片中有很多东西可以消耗&#xff0c;但我们挑选了应该让我们的观众感兴趣的东西 - 坦率地说&#xff0c;有很多有趣的东西。我将把调查方法的东西留给你使用&#xff0c;但足以说样本量很大&#xff0c;…

dami支付漏洞

使用burpsuite等抓包工具&#xff0c;抓取数据包后&#xff0c;修改数据包中的参数从而达到支付篡改的目的&#xff1b;篡 改的参数&#xff1a;商品ID&#xff0c;购买价格&#xff0c;购买数量&#xff0c;手机号码&#xff0c;订单D&#xff0c;支付状态 常见漏洞利用手段…

国家网络身份个人认证方法

申领网络身份认证后&#xff0c;用户会得到一张虚拟的“网络身份证”&#xff0c;它可以向需要实名认证的互联网平台进行认证&#xff0c;不再需要输入姓名和身份证号等信息。 申请方式&#xff1a;各手机应用平台搜索国家网络身份认证即可&#xff08;必须支持NFC才能申请&am…

AI产品经理必备:什么是LLM,有什么优劣势

LLM&#xff08;Large Language Model大型语言模型&#xff09;是一种人工智能技术&#xff0c;能够理解和生成自然语言文本。LLM可以应用于多种场景&#xff0c;包括自然语言理解、文本生成、机器翻译、对话系统、问答系统、文本摘要、情感分析等。可以帮助人们快速生成文章、…

c# 构造器的声明与调用

在C#中&#xff0c;构造器&#xff08;Constructor&#xff09;是一种特殊类型的函数&#xff0c;用于初始化类的新实例。构造器的名字必须与类名完全相同&#xff0c;并且没有返回类型&#xff0c;甚至连void也不行。 当创建类的一个新实例时&#xff0c;构造器会自动被调用。…

全球轻型电动轮椅市场规划预测:未来六年CAGR为7.3%

随着全球人口老龄化的加剧和消费者对便捷、高效出行工具的需求增加&#xff0c;轻型电动轮椅作为提升行动不便人士生活质量的重要工具&#xff0c;正逐渐受到市场的广泛关注。本文旨在通过深度分析轻型电动轮椅行业的各个维度&#xff0c;揭示行业发展趋势和潜在机会。 【市场…

StudyStudyStudy第十六天(2024.8.2)

1.代理模式 代理模式分为静态代理和动态代理 代理模式&#xff0c;就是在想要执行的代码之前或之后添加代码块&#xff0c;并不会破坏原有的代码结构。可以理解成加上了一个访问层 1.静态代理 创建一个接口Shopping public interface Shopping {void shopping(); }创建一个…

笔记:唐老师讲电赛之唐老师讲电子器件(1)电阻 参数与选型

电阻 a . 精度 电阻----运放中的电阻要选精度高的&#xff0c;一般0.1% 若在设计电路中电路参数由某个电阻决定&#xff0c;则需要选取高精度电阻。例如&#xff0c;反向放大器等对于反馈系数、增益等参数完全由电阻决定的&#xff0c;则需要选取精度较高的电阻&#xff0c;…

PDF文件点击打印无反应?是何原因造成能解决吗?

PDF无法打印怎么处理&#xff1f;在我们工作中&#xff0c;经常会遇见各种各样的文件问题&#xff0c;当我们想要将PDF文件打印出来纸质版使用&#xff0c;却不知什么原因&#xff0c;显示PDF无法打印&#xff0c;这时应该怎么处理呢&#xff1f; 一般情况下&#xff0c;PDF文件…

园区运营管理系统是如何提升园区管理水平和运营效率的?

随着大数据、人工智能等新一代信息技术的迅猛发展&#xff0c;园区运营管理系统逐渐成为提升园区运营效率的重要工具。园区运营管理系统涵盖了运营监测、企业管理、企业服务、项目管理、资产管理、智能办公、物业管理、集成监控等核心功能&#xff0c;利用这些功能可以大幅提升…

Ecovadis认证标准|Ecovadis认证是什么

三分钟内&#xff0c;让我们深入探索Ecovadis认证的广阔世界&#xff0c;这是一场绿色革命中的璀璨明珠&#xff0c;引领着全球企业迈向可持续发展的新纪元。 Ecovadis认证&#xff0c;犹如绿色经济浪潮中的一盏明灯&#xff0c;它不仅照亮了企业责任与环保实践的融合之路&…

动态申请的二维数组不是连续的

在初学阶段&#xff0c;曾学过二维数组的内存空间是连续分布的&#xff0c;参考下图&#xff1a; 后来由于动态申请二维数组的方法不常用&#xff08;一般都是用vector或者直接定义一个二维数组&#xff09;&#xff0c;所以就一直以为二维数组的内存空间是连续的。但实际上&a…

OpenCV仿射变换实现图像扭曲与旋转

目录 1. 仿射变换 2. 仿射变换的求解 3. 代码实现 3.1 图像扭曲 3.2 图像旋转 参考内容 1. 仿射变换 仿射变换是一种可以表达为乘以一个矩阵&#xff08;线性变换&#xff09;再加上一个向量&#xff08;平移&#xff09;的变换。在几何中&#xff0c;就是将一个向量空间…

天空NFT源码:数字藏品交易平台,铸造市场转售盲盒商城系统,附搭建教程和视频

&#x1f31f;【火热NFT数藏交易平台源码限时&#xff01;】&#x1f680; &#x1f47e; 想进军NFT市场却苦于无门&#xff1f; &#x1f3a8; 梦想拥有自己的数字藏品平台&#xff1f; &#x1f6e0;️ 寻找全方位、无加密、易搭建的NFT解决方案&#xff1f; &#x1f525;…

postman查询单条数据Get方法,无任何输出,idea后端也没有任何数据和提示的解决方法

问题描述&#xff1a; 正常使用postman测试&#xff0c;输入内容没有错误&#xff0c;但是却没有任何消息 后端也是&#xff0c;没有任何消息&#xff1a; 解决方法&#xff1a; 问题的原因主要是因为postman&#xff1a; 我们只需要新建一个页面&#xff0c;把刚才的查询语…

Spring Controller接口地址的骚玩法,很有用!

一&#xff0c;背景 项目里有一个接口需要对外提供&#xff0c;对方的解析方式有不同的方式&#xff0c;一个是使用流行的json格式&#xff0c;另外一个却是老系统&#xff0c;只能用xml格式&#xff0c;但是接口内部的实现逻辑是完全一样的&#xff0c;为了适配更多调用方的需…

AS400==创建主机,使用客户端连接上主机

因为AS400基于的CPU架构和自己用的PC不一致&#xff0c;所以要么自己买台AS400主机/上云服务买一台&#xff0c;或者去些网站免费申请一台。 申请地址 PUB400.COM - Your public IBM i server 注册成功后获取到账号密码 然后下载客户端 TN5250 Terminal Emulation for Win…

10. 计算机网络HTTP协议

1. 前言 无论是作为后端开发、前端开发、测试开发程序员或者是运维人员,在面试过程中,大概率都会被问到 HTTP 协议相关题目。 因为伴随着 2010 年之后移动互联网在全世界的高速发展,各种各样的浏览器(Chrome、FireFox、Safari 等)层出不穷,也诞生了诸多服务端开发的语言…

全志Tina_NPU开发部署说明

1 前言 1.1 读者对象 本文档&#xff08;本指南&#xff09;主要适用于以下人员&#xff1a; • 技术支持工程师 • 软件开发工程师 • AI 应用案客户 2 正文 2.1 NPU 开发简介 • 支持int8/uint8/int16 量化精度&#xff0c;运算性能可达1TOPS. • 相较于GPU 作为AI …