python—爬虫爬取电影页面实例

下面是一个简单的爬虫实例,使用Python的requests库来发送HTTP请求,并使用lxml库来解析HTML页面内容。这个爬虫的目标是抓取一个电影网站,并提取每部电影的主义部分。
首先,确保你已经安装了requests和lxml库。如果没有安装,可以通过pip安装它们:

pip install lxml

安装好lxml库后,就可以在Python代码中通过from lxml import etree来导入etree模块,并使用它提供的各种功能。
然后,我们可以编写如下的爬虫脚本:

import re

import fake_useragent
import requests
from lxml import etree

if __name__ == '__main__':
    # UA伪装
    head = {
        "User-Agent": fake_useragent.UserAgent().random
    }
    fp = open("./douban", "w", encoding="utf8")
    # 1.url
    for i in range(0,250,25):
        url = "https://movie.douban.com/top250?start={i}&filter="
        # 2.发送请求
        response = requests.get(url, headers=head)
        # 3.获取想要的数据
        res_text = response.text
        # 4.数据解析
        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()
            y = re.match(r"([\s\S]+?)(\d+)(.*?)", new_str).group(2)
            country = new_str.rsplit("/")[-2].strip()
            types = new_str.rsplit("/")[-1].strip()
            director = re.match(r"导演: ([a-zA-Z\u4e00-\u9fa5·]+)(.*?)", new_str).group(1)
            try:
                actor = re.match(r"(.*?)主演: ([a-zA-Z\u4e00-\u9fa5·]+)(.*?)", new_str).group(2)
            except Exception as e:
                actor = "no"
            fp.write(film_name + "#" + y + "#" + country + "#" + types + "#" + director + "#" + actor + "#" + score + "#" + quote + "\n")
            print(film_name, score, quote, y, country, types, director)
    fp.close()

这段代码是一个Python脚本,用于从豆瓣电影Top 250页面抓取电影信息,并将这些信息保存到本地文件中。下面是对代码的详细解释:

1.导入必要的库:

re: 用于正则表达式匹配。
fake_useragent: 用于生成随机的User-Agent,以模拟不同的浏览器访问,避免被网站识别为爬虫。
requests: 用于发送HTTP请求。
lxml.etree: 用于解析HTML文档,提取所需信息。

2.设置User-Agent:

使用fake_useragent.UserAgent().random生成一个随机的User-Agent,并存储在head字典中,作为HTTP请求头的一部分。

3.打开文件:

使用open(“./douban”, “w”, encoding=“utf8”)以写入模式打开(或创建)一个名为douban的文件,用于存储抓取的电影信息。

4.循环请求豆瓣电影Top 250页面:

通过循环,每次请求豆瓣电影Top 250页面的一个子集,start参数从0开始,每次增加25,直到250(但不包括250,因为range的结束值是开区间)。

5.发送HTTP请求:

使用requests.get(url, headers=head)发送GET请求,请求头中包含之前设置的User-Agent。

6.解析HTML文档:

使用etree.HTML(res_text)将响应的文本内容解析为HTML文档。
通过XPath表达式//ol[@class=‘grid_view’]/li定位所有包含电影信息的li标签。

7.提取电影信息:

遍历每个li标签,提取电影名称、导演/演员/年份/国家/类型、评分、简介等信息。
使用正则表达式处理director_actor_y_country_type字符串,以提取年份、国家和类型。
注意,这里对演员信息的提取使用了异常处理,如果正则表达式匹配失败(例如,某些电影信息中可能没有演员信息),则将演员设置为"no"。

8.写入文件:

将提取的电影信息拼接成字符串,并写入之前打开的文件中,每条信息占一行。

9.关闭文件:

循环结束后,关闭文件。
在这里插入图片描述
这里我们截取了部分输出结果的信息,可以看到已经成功爬取电影网站中的部分信息,这个简单的爬虫示例展示了如何发送HTTP请求、解析HTML内容以及提取所需信息的基本流程。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTML零基础自学笔记(上)-7.18

HTML零基础自学笔记(上) 参考:pink老师一、HTML, Javascript, CSS的关系是什么?二、什么是HTML?1、网页,网站的概念2、THML的基本概念3、THML的骨架标签/基本结构标签 三、HTML标签1、THML标签介绍2、常用标签图像标签&#xff…

数据结构----算法复杂度

1.数据结构前言 数据是杂乱无章的,我们要借助结构将数据管理起来 1.1 数据结构 数据结构(Data Structure)是计算机存储、组织数据的⽅式,指相互之间存在⼀种或多种特定关系的数 据元素的集合。没有⼀种单⼀的数据结构对所有⽤途都有⽤,所…

ranger审计日志对接CDH solr

作者:耀灵 一、准备条件 1、已安装完毕ranger-admin 2、已在CDH上部署solr(注意在安装solr时更改下solr在zk上的节点信息) 二、更改相关配置 1、修改ranger-2.1.0-admin/contrib/solr_for_audit_setup/install.properties SOLR_USERsolr …

科研绘图系列:R语言单细胞聚类气泡图(single cell bubble)

介绍 单细胞的标记基因气泡图是一种用于展示单细胞数据中特定基因表达情况的可视化方法。它通常用于展示细胞亚群中标记基因的表达水平,帮助研究者识别和区分不同的细胞类型。在这种图表中,每个细胞亚群用不同的颜色表示,而基因表达水平则通过气泡的大小来表示,从而直观地…

嵌入式C++、FreeRTOS、MySQL、Spring Boot和MQTT协议:智能零售系统详细流程介绍(代码示例)

项目概述 随着科技的发展,零售行业正经历着一场数字化转型。智能零售系统通过集成嵌入式技术和大数据分析,为商家提供了高效的运营管理工具。该系统的核心目标是提升顾客体验、优化库存管理、降低运营成本以及实现精准营销。 本项目将结合多种技术栈&a…

tree组件实现折叠与展开功能(方式1 - expandedTree计算属性)

本示例节选自vue3最新开源组件实战教程大纲(持续更新中)的tree组件开发部分。考察响应式对象列表封装和computed计算属性的使用,以及数组reduce方法实现结构化树拍平处理的核心逻辑。 实现思路 第一种方式:每次折叠或展开后触发…

【LeetCode】对称二叉树

目录 一、题目二、解法完整代码 一、题目 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root [1,2,2,null,3,null,3] 输出&#…

洗地机哪个牌子好性价比高又实惠?四款洗地机好洗地机的品牌推荐

在追求家居清洁效率与成本效益并重的今天,选择一款性价比高且实惠的洗地机显得尤为重要。市场上洗地机品牌琳琅满目,至于洗地机哪个牌子好性价比高又实惠成为很多人心中的疑问。为此,我们精心搜集并推荐四款洗地机好洗地机的品牌,…

数据结构之跳表SkipList、ConcurrentSkipListMap

概述 SkipList,跳表,跳跃表,在LevelDB和Lucene中都广为使用。跳表被广泛地运用到各种缓存实现当中,跳跃表使用概率均衡技术而不是使用强制性均衡,因此对于插入和删除结点比传统上的平衡树算法更为简洁高效。 Skip lis…

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(七)-广播远程识别码(Broadcast Remote ID)

目录 引言 5.5 广播远程识别码(Broadcast Remote ID) 5.5.1 使用PC5的广播远程识别码 5.5.2 使用MBS的广播远程识别码 引言 3GPP TS 23.256 技术规范,主要定义了3GPP系统对无人机(UAV)的连接性、身份识别、跟踪及…

达梦数据库DM8-索引篇

目录 一、前景二、名词三、语法1、命令方式创建索引1.1 创建索引空间1.2.1 创建普通索引并指定索引数据空间1.2.2 另一种没验证,官方写法1.3 复合索引1.4 唯一索引1.5 位图索引1.6 函数索引 2、创建表时候创建索引3、可视化方式创建索引3.1 打开DM管理工具3.2 找到要…

appium2.0 执行脚本遇到的问题

遇到的问题: appium 上的日志信息: 配置信息 方法一 之前用1.0的时候 地址默认加的 /wd/hub 在appium2.0上, 服务器默认路径是 / 如果要用/wd/hub 需要通过启动服务时设置基本路径 appium --base-path/wd/hub 这样就能正常执行了 方法二…

利用request + BeautifulSoup 模块批量爬取内容,实现批量获取书名对应的豆瓣评分

文章目录 代码代码解释控制台输出结果 代码 #-*- coding:utf-8 -*- from bs4 import BeautifulSoup import requests, time, jsonheaders {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.39…

初识godot游戏引擎并安装

简介 Godot是一款自由开源、由社区驱动的2D和3D游戏引擎。游戏开发虽复杂,却蕴含一定的通用规律,正是为了简化这些通用化的工作,游戏引擎应运而生。Godot引擎作为一款功能丰富的跨平台游戏引擎,通过统一的界面支持创建2D和3D游戏。…

jmeter-beanshell学习11-从文件获取指定数据

参数文件里的参数可能过段时间就不能用了,需要用新的参数。如果有多个交易,读不同的参数文件,但是数据还是一套,就要改多个参数文件。或者只想执行参数文件的某一行数据,又不想调整参数文件顺序。 第一个问题目前想到…

Transformer 翻译

Attention Is All You Need Ashish Vaswani∗ Google Brain avaswanigoogle.com Noam Shazeer∗ Google Brain noamgoogle.com Niki Parmar∗ Google Research nikipgoogle.com Jakob Uszkoreit∗ Google Research uszgoogle.com Llion Jones∗ Google Research lliongoogle.c…

mysql字符类型字段设置默认值为当前时间

-- 2024-07-22 10:22:20 select (DATE_FORMAT(CURRENT_TIMESTAMP, %Y-%m-%d %H:%i:%s)); ALTER TABLE tablename MODIFY COLUNN CREATE_DATE varchar (23) DEFAULT(DATE_FORMAT(CURRENT_TIMESTAMP, %Y-%m-%d %H:%i:%s)) COMMENT "创建日期;

力扣最热一百题——2.字母异位词分组

目录 题目链接:49. 字母异位词分组 - 力扣(LeetCode) 题目 示例 提示 解法一:哈希表排序 思路 代码实现 解法二:记录字母出现的次数哈希表 思路 代码实现 总结 话不多说直接上题目。 题目链接:…

spring MVC 简单案例(3)我的书架管理系统

一、创建项目 最后修改以下 spring 版本 为 2.7.17 Java 版本为 8 同时在 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instanc…

[Python库](3) Arrow库

目录 1.简介 2.安装 3.函数 3.1.获取当前UTC时间( 世界协调时时间 ) 3.2.格式化日期 3.3.创建Arrow对象 3.4.时间改变 3.5.获取时间戳 3.6.时区改变 4.小结 1.简介 Arrow库是一个Python库&#xff0c;提供了一套用于处理日期和时间的API。Arrow库特别适合在需要进行大…