爬虫案例—抓取豆瓣电影的电影名称、评分、简介、评价人数

news/2024/7/19 12:32:17 标签: 爬虫, python

爬虫案例—抓取豆瓣电影的电影名称、评分、简介、评价人数

豆瓣电影网址:https://movie.douban.com/top250

主页截图和要抓取的内容如下图:

Screenshot 2024-01-14 at 11.44.01

分析:

第一页的网址:https://movie.douban.com/top250?start=0&filter=

第二页的网址:https://movie.douban.com/top250?start=25&filter=

第三页的网址:https://movie.douban.com/top250?start=50&filter=

以此类推,不难发现页面的网址的start值与25多倍数有关。这样可以格式化网址为:f"https://movie.douban.com/top250?start={i*25}&filter="。

按F12进入浏览器的开发者模式,用xpath匹配到页面所有列表标签。如下图:

Screenshot 2024-01-14 at 12.24.48

进一步分析,进入li标签内,用xpath匹配到对应的电影标题和评分,评价人数。每部电影的详细简介在电影的浏览页面内,需要先获取到电影的href,然后再进行获取。

Screenshot 2024-01-14 at 12.34.19

其他内容的匹配与上图类似,不再赘述。

具体的代码如下:

python">import requests
from lxml import etree
import time


headers = {
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}


# 获取页面响应内容函数
def get_page(url):
    res = requests.get(url, headers=headers)
    res.encoding = res.apparent_encoding
    html = res.content.decode() # 如果用res.text,某些页面的简介会返回乱码
    return html


# 返回响应页面的所有电影列表标签
def get_li_lst(url):
    tree = etree.HTML(get_page(url))
    li_lst = tree.xpath('//ol/li')
    return li_lst


# 获取电影名,评分,评价人数的函数
def get_page_datail(url):
    li_lst = get_li_lst(url)
    for li in li_lst:
        print('-' * 50)
        title = li.xpath('.//div[@class="hd"]/a/span[1]/text()')
        print('电影名:', title[0], end=' | ')
        score = li.xpath('./div[@class="item"]//div[@class="star"]/span[2]/text()')
        print('评分:', score[0], end=' | ')
        person_num = li.xpath('./div[@class="item"]//div[@class="star"]/span[4]/text()')
        print('评价人数:', person_num[0])
        movie_href = li.xpath('.//div[@class="hd"]/a/@href')[0]
        movie_html = get_page(movie_href)
        movie_tree = etree.HTML(movie_html)
        movie_short = movie_tree.xpath('//div[@class ="indent"]//span[@property="v:summary"]/text()')
        print('电影简介:')
        print(movie_short[0].strip())
        time.sleep(0.5)

    print('-' * 50)


if __name__ == '__main__':

    page_num = int(input('请输入要获取的页码数: '))

    for i in range(page_num):
        print(f'第{i + 1}页电影数据:')
        new_url = f'https://movie.douban.com/top250?start={i * 25}'
        time.sleep(0.3)
        get_page_datail(new_url)
        print()

运行结果如下图:

Screenshot 2024-01-14 at 12.38.11


http://www.niftyadmin.cn/n/5334064.html

相关文章

软件测试阶段简介_单元测试、集成测试、配置项测试、系统测试

文章目录 前言一、软件测试“V”模型二、单元测试三、集成测试四、配置项测试五、系统测试总结 前言 一般来说,按照软件的研制阶段划分,软件测试可分为单元测试、集成测试、配置项测试、系统测试等。本文将对上述各测试阶段进行逐一介绍。 一、软件测试…

在线扒站网PHP源码-在线扒站工具网站源码

源码介绍 这是一款在线的网站模板下载程序,也就是我们常说的扒站工具,利用它我们可以很轻松的将别人的网站模板样式下载下来,这样就可以大大提高我们编写前端的速度了!注:扒取的任何站点不得用于商业、违法用途&#…

递归、搜索与回溯算法(专题一:递归)

往期文章(希望小伙伴们在看这篇文章之前,看一下往期文章) (1)递归、搜索与回溯算法(专题零:解释回溯算法中涉及到的名词)【回溯算法入门必看】-CSDN博客 接下来我会用几道题&#…

HCIP-7

IPV6: 为什么使用IPV6: V4地址数量不够V4使用NAT,破坏了端到端原则 IPV6的优点: 全球单播地址聚合性强(IANA组织进行合理的分配)多宿主----一个接口可以配置N个地址--且这些地址为同一级别自动配置---1)…

为什么需要放行回源IP

为什么需要放行回源IP 网站以“独享模式”成功接入WAF后,所有网站访问请求将先经过独享引擎配置的ELB然后流转到独享引擎实例进行监控,经独享引擎实例过滤后再返回到源站服务器,流量经独享引擎实例返回源站的过程称为回源。在服务器看来&…

给Windows电脑设置一个还原点,电脑出错可快速恢复使用

前言 离不开电脑的小伙伴们经常会有这种烦恼:Windows系统不知道什么时候会崩溃。 电脑一旦重装系统,就不是一件简单的事情。 其实重装系统并不麻烦,但麻烦的是需要把自己经常使用的电脑软件一并装上,这就是一件非常大的工程。电…

GO基础进阶篇 (十四)、Http编程

Web基础概念 web应用程序 web程序可以提供浏览器访问的程序。Web应用程序通常采用客户端-服务器模型。客户端是用户使用的Web浏览器或其他Web客户端,而服务器是存储和处理数据的远程计算机。 我们能访问到的任何一个页面或资源,都存在于世界的某一个角落…

SG-9101CGA(汽车+125°C可编程晶体振荡器)

SG-9101CGA是用于汽车CMOS输出的可编程晶体振荡器,彩用2.5 x 2.0 (mm)封装,0.67 MHz至170 MHz频率范围、工作温度范围为-40℃~125℃,符合车规级晶振,无铅,绿色环保,满足汽车工业标准,电源电压范…