【python】爬取豆瓣电影Top250(etree、xpath)

14 篇文章 9 订阅

一、分析

我们先打开top250页面https://movie.douban.com/top250?start=0
可以发现每个页面25部电影,共10个页面,每个页面url的start都加25

所有电影都在一个class为article的div下,每一部电影都在此div下的ol标签下,每一部电影都是一个li标签
在这里插入图片描述

二、代码

因为我这里主要练习xpath语法,故选择xpath提取有用信息

import requests
from lxml import etree
import json
base_url = "https://movie.douban.com/top250?start="
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
}

page_step = range(0, 250, 25)  # 用于翻页,每页25部电影
movies = []
for i in page_step:
    url = base_url + str(i)
    res = requests.get(url=url, headers=headers)
    html = etree.HTML(res.text)
    article = html.xpath("//div[@class='article']")[0]
    lis = article.xpath("./ol/li")

    for li in lis:
        em = li.xpath("./div/div/em")
        num = em[0].xpath("string(.)")  # 序列号
        detail = li.xpath("./div/div/a/@href")[0]  # 详情地址
        img = li.xpath("./div/div/a/img/@src")[0]  # 图片地址

        title_span = li.xpath("./div/div[@class='info']/div/a/span")
        title = title_span[0].xpath("string(.)") # 电影名,可能有多个,我这里只取第一个
        div_bd = li.xpath("./div/div[@class='info']/div[@class='bd']")
        p = div_bd[0].xpath("./p")
        info = p[0].xpath("string(.)")  # 导演、主演、类别
        info = info.strip().replace('\n', '').replace('                        ', '')  # 去空格和换行
        quote_span = p[1].xpath("./span")
        quote = quote_span[0].xpath("string(.)")  # quote

        movie = {
            "排名": num,
            "电影名": title,
            "信息": info,
            "引述": quote,
            "图片": img,
            "详情": detail
        }
        movies.append(movie)
with open("top250movies.txt", "w", encoding="utf-8") as fp:
    json.dump(movies, fp, ensure_ascii=False)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰冷的希望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值