首页 > 编程语言 >Python爬虫实战案例(爬取文字)

Python爬虫实战案例(爬取文字)

时间:2024-07-21 20:54:39浏览次数:17  
标签:Python text 电影 爬虫 li 爬取 剧情 str new

爬取豆瓣电影的数据

首先打开"豆瓣电影 Top 250"这个网页:

  • 按F12,找到网络;
  • 向上拉动,找到名称栏中的第一个,单机打开;
  • 可以在标头里看到请求URL请求方式复制URL(需要用到);
  • 在表头的最下面有"User-Agent",也复制下来(也可以下载pip install fake_useragent库,用别人写好的UA)。
    在这里插入图片描述
    在这里插入图片描述

定位我们想要获取信息的标签位置

我们想要爬取每个电影如下图红圈中的信息
在这里插入图片描述

按下F12后,可以点击左上角的小工具,然后可以在放到你想要的数据上面,然后便可以在元素栏下定位到其所属的标签,再通过一些数据分析的方法去定位到它,并获取。
在这里插入图片描述

获取多页的电影信息

因为豆瓣电影Top 250这个页面,每一页只能展示25个电影,当我们点击到后面几页后会发现,每一页的网址只有25–>50–>–>75这样的变化,其他的没有变化,所以变化可以通过for循环来遍历它,从而达到获取更多页数的电影信息
在这里插入图片描述
在这里插入图片描述
具体代码如下:

for i in range(0, 250, 25):
        url = f"https://movie.douban.com/top250?start={i}&filter="

完整代码

# 豆瓣电影
import requests   # 别人写好的ua  pip install fake_useragent
import fake_useragent
from lxml import etree
import re

if __name__ == '__main__':
    # UA伪装
    head = {
        # "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
        # 用 import fake_useragent 库里的UA
        "User-Agent": fake_useragent.UserAgent().random
    }
    
    # 打开一个文件将获取的数据写进去
    fp = open("./doubanFilm.txt", "w", encoding="utf-8")

    # 1、url
    # url = "https://movie.douban.com/top250"
    # url2 = "https://movie.douban.com/top250?start=25&filter="
    # url3 = "https://movie.douban.com/top250?start=50&filter="
    for i in range(0, 250, 25):
        url = f"https://movie.douban.com/top250?start={i}&filter="

        # 发送请求
        response = requests.get(url, headers=head)
        # 获取想要的数据
        res_text = response.text
        # print(res_text)
        # 数据解析
        tree = etree.HTML(res_text)
        # 定位所有的li标签
        li_list = tree.xpath("//ol[@class='grid_view']/li")
        for li in li_list:
            # 获取电影名字
            film_name = "".join(li.xpath(".//span[@class='title'][1]/text()"))
            # 获取导演、主演、年份、国家、电影类型
            director_actor_y_country_type = "".join(li.xpath(".//div[@class='bd']/p[1]/text()"))
            # 获取评分
            score = "".join(li.xpath(".//span[@class='rating_num']/text()"))
            # 获取标签语
            quote = "".join(li.xpath(".//span[@class='inq']/text()"))
            # 将获取到的导演、主演、年份、国家、电影类型放到一个新列表里,并去除空格
            new_str = director_actor_y_country_type.strip()
            # 将导演从新列表中取出  用正则表达式去匹配
            director = re.match(r"导演: ([a-zA-Z\u4e00-\u9fa51]+)(.*?)", new_str).group(1)
            # 取年份
            y = re.match(r"([\s\S]+?)(\d+)(.*?)", new_str).group(2)
            # 取国家
            country = new_str.rsplit("/")[-2].strip()
            # 取电影类型
            types = new_str.rsplit("/")[-1].strip()
            # 因为有些电影没有主演所以将主演用try-except方法做判断,有主演的取出来,没有主演设定为“no”
            try:
                actor = re.match(r"(.*?)主演: ([a-zA-Z\u4e00-\u9fa5·]+)(.*?)", new_str).group(2)
            except Exception as e:
                actor = "no"
            
            # 因为每个数据都用.join的方法转换成了字符串,所以便可以将这些数据相加并用#隔开,便能连在一起,并换行,使得数据更加工整
            fp.write(film_name + "#" + director + "#" + actor + "#" + y + "#"
                + country + "#" + types + "#" + score + "#" + quote + "\n")
            print(film_name, director, actor, y, country, types, score, quote)
    fp.close()

所爬取到的部分内容如下所示:

肖申克的救赎#弗兰克·德拉邦特#蒂姆·罗宾斯#1994#美国#犯罪 剧情#9.7#希望让人自由。
霸王别姬#陈凯歌#张国荣#1993#中国大陆 中国香港#剧情 爱情 同性#9.6#风华绝代。
阿甘正传#罗伯特·泽米吉斯#汤姆·汉克斯#1994#美国#剧情 爱情#9.5#一部美国近现代史。
泰坦尼克号#詹姆斯·卡梅隆#莱昂纳多·迪卡普里奥#1997#美国 墨西哥#剧情 爱情 灾难#9.5#失去的才是永恒的。 
千与千寻#宫崎骏#柊瑠美#2001#日本#剧情 动画 奇幻#9.4#最好的宫崎骏,最好的久石让。 
这个杀手不太冷#吕克·贝松#让·雷诺#1994#法国 美国#剧情 动作 犯罪#9.4#怪蜀黍和小萝莉不得不说的故事。
美丽人生#罗伯托·贝尼尼#罗伯托·贝尼尼#1997#意大利#剧情 喜剧 爱情 战争#9.5#最美的谎言。
星际穿越#克里斯托弗·诺兰#马修·麦康纳#2014#美国 英国 加拿大#剧情 科幻 冒险#9.4#爱是一种力量,让我们超越时空感知它的存在。
盗梦空间#克里斯托弗·诺兰#莱昂纳多·迪卡普里奥#2010#美国 英国#剧情 科幻 悬疑 冒险#9.4#诺兰给了我们一场无法盗取的梦。
楚门的世界#彼得·威尔#金·凯瑞#1998#美国#剧情 科幻#9.4#如果再也不能见到你,祝你早安,午安,晚安。
辛德勒的名单#史蒂文·斯皮尔伯格#连姆·尼森#1993#美国#剧情 历史 战争#9.5#拯救一个人,就是拯救整个世界。
忠犬八公的故事#莱塞·霍尔斯道姆#理查·基尔#2009#美国 英国#剧情#9.4#永远都不能忘记你所爱的人。
海上钢琴师#朱塞佩·托纳多雷#蒂姆·罗斯#1998#意大利#剧情 音乐#9.3#每个人都要走一条自己坚定了的路,就算是粉身碎骨。 
三傻大闹宝莱坞#拉库马·希拉尼#阿米尔·汗#2009#印度#剧情 喜剧 爱情 歌舞#9.2#英俊版憨豆,高情商版谢耳朵。
放牛班的春天#克里斯托夫·巴拉蒂#让#2004#法国 瑞士 德国#剧情 音乐#9.3#天籁一般的童声,是最接近上帝的存在。 
机器人总动员#安德鲁·斯坦顿#本·贝尔特#2008#美国#科幻 动画 冒险#9.3#小瓦力,大人生。
疯狂动物城#拜伦·霍华德#金妮弗·#2016#美国#喜剧 动画 冒险#9.2#迪士尼给我们营造的乌托邦就是这样,永远善良勇敢,永远出乎意料。
无间道#刘伟强#刘德华#2002#中国香港#剧情 犯罪 惊悚#9.3#香港电影史上永不过时的杰作。
控方证人#比利·怀尔德#泰隆·鲍华#1957#美国#剧情 犯罪 悬疑#9.6#比利·怀德满分作品。
大话西游之大圣娶亲#刘镇伟#周星驰#1995#中国香港 中国大陆#喜剧 爱情 奇幻 古装#9.2#一生所爱。

标签:Python,text,电影,爬虫,li,爬取,剧情,str,new
From: https://blog.csdn.net/weixin_73504499/article/details/140592768

相关文章

  • Python项目|基于Python+Django实现购物商城系统
    作者主页:编程千纸鹤作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待......
  • 常见的Python编程题目及其代码(十二)-- 56. 检查字符串是否只包含数字57. 找到列表中出
    目录56.检查字符串是否只包含数字57.找到列表中出现次数最多的元素58.计算字符串中的元音数59.计算字符串中的辅音数60.找到字符串中的最长单词 56.检查字符串是否只包含数字s="12345"print(s.isdigit())57.找到列表中出现次数最多的元素fromcollection......
  • Python 简介
    什么是Python        Python的设计理念为优雅、明确、简单。实际上,Python也是按照这个理念做的,以至于现在网上流传着“人生苦短,我用Python”的说法。可见Python有着简单、开发速度快、节省时间和精力等特点。        Python本身并非所有的特性和功能都集成......
  • python 8 模块
    1.自定义模块及调用模块一:name='yyy'definfo():print('daydayup')模块二:name='lll2'age=16definfo():print('dayup2')函数importmy_infoprint(my_info.name)my_info.info()print('-'*40)impo......
  • 网络编程必备:Python中Paramiko和FTP的文件夹与文件检测技巧
    哈喽,大家好,我是木头左!Paramiko是一个用于进行SSH连接的Python库,它支持以加密的形式进行远程命令执行、文件传输等操作。另一方面,FTP即文件传输协议,用于在网络上进行文件的传输。Python中的ftplib模块允许实现FTP客户端的功能,包括列出目录内容、上传和下载文件等。检查文件夹......
  • Python机器学习实战:使用机器学习预测股票市场走势
    Python机器学习实战:使用机器学习预测股票市场走势关键词:时间序列分析机器学习股票预测Python编程机器学习库1.背景介绍1.1问题的由来预测股票市场的走势一直是金融界的热门话题。股市的波动性高且受到众多因素的影响,如经济指标、公司业绩、政治事件等,这使得预......
  • Python每日学习
    我是从c++转来学习Python的,总感觉和c++相比Python的实操简单,但是由于写c++的代码多了,感觉Python的语法好奇怪就比如说c++的开头要有库(就是类似于#include<bits/stdc++.h>)而且它每一项的代码结束之后要有一个表示结束的封号(;),这种格式对于我来说已成习惯了,而这一切Python这个优......
  • 用Python生成图形
    在Python中生成图形可以使用多种库,具体取决于你想要生成的图形类型。以下是一些常见的库和它们通常用于创建的图形类型:Matplotlib -最常用的绘图库,适合创建各种静态、动态以及交互式的可视化图表。Seaborn -基于Matplotlib,提供更高级的数据可视化功能,特别适用于统计图形。......
  • Python中的Paramiko与FTP文件夹及文件检测技巧
    哈喽,大家好,我是木头左!Python代码的魅力与实用价值在当今数字化时代,编程已成为一种不可或缺的技能。Python作为一种简洁、易读且功能强大的编程语言,受到了全球开发者的喜爱。它不仅适用于初学者入门,也为专业开发者提供了丰富的库和框架,以解决各种复杂问题。在这篇文章中,将重点......
  • Python turtle 无图 20行代码写乌龟快跑
    上期在一小时内被我用流量券顶到了20后面就没啥亮点了 _____________________________________________________________________________老规矩先放代码(20行代码以下代码段为准):importturtle,random;turtle.tracer(0);bg2=turtle.Screen();bg=turtle.Turtle();dg=tur......