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

下面是一个简单的爬虫实例,使用Python的requests库来发送HTTP请求,并使用lxml库来解析HTML页面内容。这个爬虫的目标是抓取一个电影网站,并提取每部电影的主义部分。

首先,确保你已经安装了requests和lxml库。如果没有安装,可以通过pip安装它们:

python 复制代码
pip install lxml

安装好lxml库后,就可以在Python代码中通过from lxml import etree来导入etree模块,并使用它提供的各种功能。

然后,我们可以编写如下的爬虫脚本:

python 复制代码
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内容以及提取所需信息的基本流程。

相关推荐
丰锋ff7 分钟前
1.7在Qt窗口中添加右键菜单
开发语言·qt
Titan202423 分钟前
Linux网络学习:套接字、UDP的封装与应用
linux·服务器·开发语言·网络·c++
Uncommon.24 分钟前
使用Pytorch自动计算梯度
人工智能·pytorch·python
阿标的博客1 小时前
Python实训案例(二):输出植物证书
python
鸿芯微控科技1 小时前
压电点胶阀出胶量不稳定怎么排查?驱动波形、背压、点胶重量与Python分析
开发语言·python·压电点胶阀·精密点胶·点胶重量·流体控制
一位正在转型AI全栈的前端工程师1 小时前
从 0 到 1 搭建生产级 RAG 系统:切片、召回与重排序调优实录
python·前端工程化
糖炒栗子03261 小时前
learn-claude-code 简要记录
笔记·python
原野池予1 小时前
深入Java集合框架:HashMap源码解析(JDK 8)
java·开发语言
测试运维日常笔记1 小时前
VMware vSphere、ESXi 与 vCenter Server:核心概念与关系详解
java·开发语言
测试19982 小时前
Python接口测试之requests库安装和导入
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试