Python爬虫经典案例:豆瓣Top250电影——Xpath解析

目录

前言

代码实现

一.明确受害者

二.导入相关模块

三.对目标网址发送请求

四.解析数据

五.保存数据

六.实现多页爬取

完整代码


前言

不知道小伙伴们是否喜欢看电影呢?我本人是非常喜欢在周末闲暇之余看看一些好电影的,这不最近又重温了一下《肖申克的救赎》,雀食不戳啊!!!那么还有些什么比较经典的电影呢?今天给大家带来一个爬虫经典案例:豆瓣Top250电影数据爬取。

代码实现

一.明确受害者

本次的爬取网页是豆瓣电影 Top 250

目标主要是:电影名、电影信息、评分、评价人数、引言以及详情页

二.导入相关模块

import requests
import parsel
import csv

Parsel是一个用于解析JSON数据的Python库。它提供了一个简单易用的API,可以轻松地从JSON文件或字符串中解析数据。可以对 HTML 和 XML 进行解析,并支持使用 XPath 和 CSS Selector 对内容进行提取和修改,同时它还融合了正则表达式提取的功能。

三.对目标网址发送请求

url = f'https://movie.douban.com/top250'
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'
    }
response = requests.get(url=url, headers=headers)

四.解析数据

F12打开开发者工具,找到我们需要的信息地址,通过xpath获得

selector = parsel.Selector(response.text)
# print(selector)
lis = selector.xpath('//*[@id="content"]/div/div[1]/ol/li')

for li in lis:
    movie_name = li.xpath('.//div/div[2]/div[1]/a/span[1]/text()').get()  # 电影名
    movie_info = li.xpath('.//div/div[2]/div[2]/p[1]/text()').getall()  # 电影信息
    movie_info = (''.join(movie_info).strip()).replace('\n', '')
    movie_score = li.xpath('.//div/div[2]/div[2]/div/span[2]/text()').get()  # 电影评分
    movie_num = li.xpath('.//div/div[2]/div[2]/div/span[4]/text()').get()  # 评价人数
    movie_lines = li.xpath('.//div/div[2]/div[2]/p[2]/span/text()').get()  # 电影摘引
    movie_href = li.xpath('.//div/div[2]/div[1]/a/@href').get()  # 豆瓣电影详情页
    print(movie_name, movie_info, movie_score, movie_num, movie_lines, movie_href)

运行结果如下图所示

五.保存数据

f = open('豆瓣电影 Top 250.csv', mode='a', encoding='utf-8-sig', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['电影名', '电影信息', '评分', '评价人数', '摘引', '豆瓣详情页'])
csv_writer.writeheader()

六.实现多页爬取

点击下一页,我们可以观察的其网页链接构造

第一页的URL:https://movie.douban.com/top250
第二页的URL:https://movie.douban.com/top250?start=25&filter=
第三页的URL:https://movie.douban.com/top250?start=50&filter=

第十页的URL:https://movie.douban.com/top250?start=225&filter=

 因此我们只要设置一个参数使其从0开始,设置步长为25直到255构建一个循环即可

num = 0
while num <= 225:
    url = f'https://movie.douban.com/top250?start={num}&filter='
    num += 25

完整代码

import requests
import parsel
import csv
f = open('豆瓣电影 Top 250.csv', mode='a', encoding='utf-8-sig', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['电影名', '电影信息', '评分', '评价人数', '摘引', '豆瓣详情页'])
csv_writer.writeheader()
num = 0
while num <= 225:
    url = f'https://movie.douban.com/top250?start={num}&filter='
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'
    }
    response = requests.get(url=url, headers=headers)
    selector = parsel.Selector(response.text)
    # print(selector)
    lis = selector.xpath('//*[@id="content"]/div/div[1]/ol/li')

    for li in lis:
        movie_name = li.xpath('.//div/div[2]/div[1]/a/span[1]/text()').get()  # 电影名
        movie_info = li.xpath('.//div/div[2]/div[2]/p[1]/text()').getall()  # 电影信息
        movie_info = (''.join(movie_info).strip()).replace('\n', '')
        movie_score = li.xpath('.//div/div[2]/div[2]/div/span[2]/text()').get()  # 电影评分
        movie_num = li.xpath('.//div/div[2]/div[2]/div/span[4]/text()').get()  # 评价人数
        movie_lines = li.xpath('.//div/div[2]/div[2]/p[2]/span/text()').get()  # 电影摘引
        movie_href = li.xpath('.//div/div[2]/div[1]/a/@href').get()  # 豆瓣电影详情页

        dit = {
            '电影名': movie_name,
            '电影信息': movie_info,
            '评分': movie_score,
            '评价人数': movie_num,
            '摘引': movie_lines,
            '豆瓣详情页': movie_href

        }
        csv_writer.writerow(dit)
        print(movie_name, movie_info, movie_score, movie_num, movie_lines, movie_href)
    num += 25

欢迎点赞评论关注三连

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
好的,这个问题我可以回答给你。为了爬取豆瓣电影Top250电影导演、类型、年份、主演等信息,你可以使用 Python 爬虫,具体步骤如下: 1. 安装 requests、beautifulsoup4 等相关库,可以使用 pip install 进行安装。 2. 使用 requests 库获取豆瓣电影 Top250 页面的 HTML 内容,并使用 beautifulsoup4 库解析 HTML 内容。 3. 使用 CSS 选择器或 XPath 表达式从 HTML 中提取需要的信息,例如电影名称、导演、类型、年份、主演等。 4. 将提取到的信息保存到文件或数据库中。 下面是一个简单的示例代码,可以获取豆瓣电影 Top250电影名称和导演信息: ```python import requests from bs4 import BeautifulSoup url = 'https://movie.douban.com/top250' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') movies = soup.select('.info') for movie in movies: title = movie.select_one('.title').get_text() directors = movie.select_one('.bd p:nth-of-type(1)').get_text().strip().split('\xa0\xa0\xa0') print(title, directors) ``` 这段代码使用 requests 库发送 GET 请求获取豆瓣电影 Top250 页面的 HTML 内容,然后使用 BeautifulSoup 库解析 HTML 内容。使用 CSS 选择器 `.info` 获取每个电影的信息块,然后从信息块中使用 CSS 选择器 `.title` 获取电影名称,使用 `.bd p:nth-of-type(1)` 获取电影导演信息,并对导演信息进行处理后输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

到点就困告

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

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

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

打赏作者

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

抵扣说明:

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

余额充值