首页 > 其他分享 >《小白爬虫之豆瓣》

《小白爬虫之豆瓣》

时间:2025-01-08 15:31:48浏览次数:3  
标签:xpath text 爬虫 小白 豆瓣 strip print div class

目录

前言

一、爬虫是什么?

二、爬虫的主要功能

 三、实践

1.简介

 2.所需库(如果安装失败,可以选择去Settings里去手动安装)



前言

新手小白如何成功实现第一次爬虫,从0到1。豆瓣作为必爬之路

一、爬虫是什么?

爬虫(Web Crawler),也称为网络爬虫、网络蜘蛛(Web Spider)或网络机器人(Web Robot),是一种自动化程序,用于在互联网上自动抓取、分析和收集数据。它们按照预定的规则或算法,遍历网页上的链接,从一个页面跳转到另一个页面,收集并存储所需的信息。

二、爬虫的主要功能

  1. 数据收集:爬虫可以收集网页上的文本、图片、视频、链接等各种类型的数据。

  2. 搜索引擎索引:搜索引擎使用爬虫来发现和索引互联网上的新网页,以便用户能够通过搜索查询找到这些网页。

  3. 数据挖掘:企业和研究机构利用爬虫从大量网页中提取有价值的信息,用于市场分析、竞争情报、价格监测等。

  4. 内容聚合:一些网站和应用程序使用爬虫来聚合来自不同来源的内容,如新闻聚合网站、社交媒体聚合应用等。

  5. 网站监控:网站管理员可以使用爬虫来监控网站的状态、性能以及内容的变化。

  6. 发送请求:爬虫向目标网站发送HTTP请求,请求访问网页。

  7. 接收响应:目标网站接收到请求后,返回网页的HTML代码或其他格式的数据。

  8. 解析网页:爬虫使用解析器(如BeautifulSoup、lxml等)来解析网页内容,提取所需的数据。

  9. 存储数据:提取的数据被存储到数据库、文件或其他存储介质中。

  10. 遍历链接:爬虫从当前网页中提取出其他链接,并重复上述过程,直到满足停止条件(如达到预设的抓取深度、时间限制或抓取到足够的数据)。

 三、实践

1.简介

目标网站: https://movie.douban.com/top250
需求: 爬取电影中文名英文名电影详情页链接导演主演上映年份国籍类型评分评分人数, 并保存到csv文件当中
目标url: https://movie.douban.com/top250

 2.所需库(如果安装失败,可以选择去Settings里去手动安装)

     (1)request  

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

        (2)  lxml

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple lxml

 打开终端输入上两行代码即可安装成功

3.阶段实现代码

import csv
import requests
from lxml import etree
#目标url
url = "https://movie.douban.com/top250"
# 添加请求头信息
head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0" }
#发送请求 获取响应
response = requests.get(url,headers=head)
print(response.text)

# 网页源码
html = response.text
# 实例化etree对象
tree = etree.HTML(html)

# 利用xpath找到<div class="info">这个标签
divs = tree.xpath('//div[@class="info"]')
# print(divs)
for div in divs:
    # title = div.xpath('./div[@class="hd"]/a/span/text()') #这句话需要理解
    # print(title)
    title_cn= div.xpath('./div[@class="hd"]/a/span/text()')[0]
    title_en = div.xpath('./div[@class="hd"]/a/span/text()')[1].strip('\xa0/\xa0')
    print(title_cn,title_en)
    break

# 获取电影链接
for div in divs:
    links = div.xpath('./div[@class="hd"]/a/@href')[0]
    print(links)
    break

# 获取导演,主演等信息
for div in divs:
    #导演
    director = div.xpath('./div[@class="bd"]/p/text()')[0].strip().split('导演: ')[1].split('主演: ')[0]
    print(director)
    #主演
    try:
        act = div.xpath('./div[@class="bd"]/p/text()')[0].strip().split('导演: ')[1].split('主演: ')[1]
        print(act)
    except IndexError as e:
        print("无主演信息")
    print(act)
    # 上映年份
    Release_year = div.xpath('./div[@class="bd"]/p/text()')[1].strip().split('/')[0]
    print(Release_year)
    # 国籍
    nationality = div.xpath('./div[@class="bd"]/p/text()')[1].strip().split('/')[1].strip()
    print(nationality)
    # 类型
    genre = div.xpath('./div[@class="bd"]/p/text()')[1].strip().split('/')[2].strip()
    print(genre)
    break

for div in divs:
    # 评分
    score = div.xpath('./div[@class="bd"]/div/span[2]/text()')[0]
    print(score)
    # 评分人数
    num_score = div.xpath('./div[@class="bd"]/div/span[4]/text()')[0]
    print(num_score)
    # moive_list.append(dic)
    break

for page in range(1, 11):
    # 目标url
    url = f'https://movie.douban.com/top250?start={(page - 1) * 25}&filter='

    # 发送请求, 获取响应
    res = requests.get(url, headers=head)
    # 打印响应信息
    print(res.text)

4.完整代码

#导入模块
import requests
from lxml import etree
import csv

# 请求头信息
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}

moive_list = []

for page in range(1, 11):
    # 目标url
    url = f'https://movie.douban.com/top250?start={(page - 1) * 25}&filter='

    # 发送请求, 获取响应
    res = requests.get(url, headers=headers)
    # 打印响应信息
    # print(res.text)
    # 网页源码
    html = res.text
    # 实例化etree对象
    tree = etree.HTML(html)

    divs = tree.xpath('//div[@class="info"]')
    # print(divs)
    for div in divs:
        dic = {}
        title = div.xpath('./div[@class="hd"]/a/span[@class="title"]/text()')
        # 电影中文标题
        title_cn = ''.join(title).split('\xa0/\xa0')[0]
        dic['电影中文名'] = title_cn
        # 电影英文标题
        title_en = div.xpath('./div[@class="hd"]/a/span[2]/text()')[0].strip('\xa0/\xa0')
        dic['电影英文名'] = title_en
        # 电影详情页链接
        links = div.xpath('./div[@class="hd"]/a/@href')[0]
        dic['电影详情页链接'] = links
        # print(links)
        # 导演
        director = div.xpath('./div[@class="bd"]/p/text()')[0].strip().split('导演: ')[1].split('主演: ')[0]
        dic['导演'] = director
        # print(director)
        # 主演
        try:
            act = div.xpath('./div[@class="bd"]/p/text()')[0].strip().split('导演: ')[1].split('主演: ')[1]
            # print(act)
        except IndexError as e:
            print(end='')
        dic['主演'] = act
        # 上映年份
        Release_year = div.xpath('./div[@class="bd"]/p/text()')[1].strip().split('/')[0]
        # print(Release_year)
        dic['上映年份'] = Release_year
        # print(Release_year)
        # 国籍
        nationality = div.xpath('./div[@class="bd"]/p/text()')[1].strip().split('/')[1].strip()
        if len(nationality[0].encode('utf-8')) == 1:
            nationality = div.xpath('./div[@class="bd"]/p/text()')[1].strip().split('/')[2].strip()
        else:
            nationality = div.xpath('./div[@class="bd"]/p/text()')[1].strip().split('/')[1].strip()
        # print(nationality)
        dic['国籍'] = nationality
        # print(title_cn, nationality)
        # 类型
        genre = div.xpath('./div[@class="bd"]/p/text()')[1].strip().split('/')[2].strip()
        if len(div.xpath('./div[@class="bd"]/p/text()')[1].strip().split('/')[1].strip()[0].encode('utf-8')) == 1:
            genre = div.xpath('./div[@class="bd"]/p/text()')[1].strip().split('/')[3].strip()
        else:
            genre = div.xpath('./div[@class="bd"]/p/text()')[1].strip().split('/')[2].strip()
        dic['类型'] = genre
        # print(genre)
        # 评分
        score = div.xpath('./div[@class="bd"]/div/span[2]/text()')[0]
        dic['评分'] = score
        # print(score)
        # 评分人数
        num_score = div.xpath('./div[@class="bd"]/div/span[4]/text()')[0]
        dic['评分人数'] = num_score
        # print(dic)
        moive_list.append(dic)
        # print(len(moive_list))  # 检查数据是否全部爬取成功
    print(f'*****************第{page}页爬取完成*****************')
print('*****************爬虫结束*****************')
# 数据保存
with open('豆瓣电影Top250.csv', 'w', encoding='utf-8-sig', newline='') as f:
    # 1. 创建对象
    writer = csv.DictWriter(f, fieldnames=('电影中文名', '电影英文名', '电影详情页链接', '导演', '主演', '上映年份', '国籍', '类型', '评分', '评分人数'))
    # 2. 写入表头
    writer.writeheader()
    # 3. 写入数据
    writer.writerows(moive_list)

5.将csv文件转化为xlsx

import pandas as pd

def csv_to_xlsx_pd():
    csv = pd.read_csv('豆瓣电影Top250.csv', encoding='utf-8')
    csv.to_excel('豆瓣电影Top250.xlsx', sheet_name='data')

if __name__ == '__main__':
    csv_to_xlsx_pd()

6.数据展示 


标签:xpath,text,爬虫,小白,豆瓣,strip,print,div,class
From: https://blog.csdn.net/qq_64053773/article/details/144995537

相关文章

  • TN Python爬虫高级开发工程师
     简介网络爬虫,涵盖从基础原理到高阶实战的丰富内容。讲解网络爬虫通讯、数据采集与解析原理,涉及多任务、动态数据采集。进阶至金融数据前后端实战,应对多种反爬虫手段,如cookie、验证码、JavaScript混淆加密等,教授绕过技巧。还深入介绍scrapy、feapder等框架,包括使用、数据......
  • 利用 Java 爬虫获取淘宝商品详情 API 接口的长篇软文
    在当今数字化时代,电子商务蓬勃发展,淘宝作为国内领先的电商平台,汇聚了海量商品信息。对于企业、开发者以及市场研究人员来说,能够获取淘宝商品的详细信息,对于市场分析、产品定价、竞品研究等方面具有重要意义。然而,淘宝官方提供的API接口往往存在一定的限制,如请求频率限制、数据字......
  • ICPC 小白勇闯南京
    第49届ICPC南京站游记【2024.11.2−2024.11.32024.11.2-2024.11.32024.11.2−2024.11.3】Day......
  • 【Transformer】小白入门指南
    目录1、简介2、Transformer解决问题技术概览核心组成自注意力机制(Self-AttentionMechanism)多头注意力机制(Multi-HeadAttention)前馈神经网络(Feed-ForwardNeuralNetwork)位置编码(PositionalEncoding)残差连接与标准化框架认识1.输入输出2.Encoder3.Decoder4......
  • YOLOV5正样本匹配和损失函数 (全网最详细版小白讲解)
    一、正样本匹配因为损失函数的计算有一部分只会涉及正样本的计算,所以需要搞懂正样本匹配。Yolov5是anchors-based。目的:对于图像中的每一个gtbox,找出:(1)它由输出特征图中的哪些gridcell来负责预测(2)由哪些尺寸的anchor来负责预测基于这些负责预测的gridcells中......
  • 整理了6个Python经典项目(python爬虫、python人工智能、python数据分析、python web、p
    包含编程籽料、学习路线图、爬虫代码、安装包等!【点击领取】前言职场中一贯有“金三银四”、“金九银十”的说法。尤其是3、4月刚过完年后,很多企业的员工会选择离职,大量空缺职位被放出,同时HR招聘压力增大,求职者往往可以借此机会,获得一个更好的报价。如果你是一名正在求职......
  • Python实战--爬虫音乐数据的笔记
    开发工具Python版本:3.6相关模块:requests模块time模块parsel模块re模块time模块环境搭建安装Python并添加到环境变量,pip安装需要的相关模块即可。数据来源查询分析浏览器中打开我们要爬取的页面按F12进入开发者工具,查看我们想要的酷狗音乐飙升榜在哪里这里我们需......
  • Python爬虫应用领域
    Python爬虫作为一种强大的数据获取工具,在多个领域发挥着重要作用。以下是Python爬虫在不同领域的应用情况:一、数据采集与分析(一)市场调研产品信息收集:爬取电商平台的产品详情、价格、销量、用户评价等数据,分析产品市场占有率、用户喜好、竞争对手情况,为产品开发、定价策略、营销......
  • 如何利用PHP爬虫按关键字搜索淘宝商品
    在当今的电商时代,获取淘宝商品信息对于市场研究、价格监控和竞争分析等方面具有重要意义。手动搜索和整理大量商品信息不仅耗时耗力,而且容易出错。幸运的是,PHP爬虫技术为我们提供了一种高效、自动化的方式来按关键字搜索淘宝商品。本文将详细介绍如何使用PHP爬虫按关键字搜索淘......
  • Python爬虫与1688图片搜索API接口:深度解析与显著收益
     在电子商务的浩瀚海洋中,数据是驱动业务决策的核心引擎。阿里巴巴旗下的1688平台,作为全球领先的B2B在线市场,不仅汇聚了海量的商品信息,还提供了丰富的API接口,为开发者提供了强大的数据获取工具。本文将深入探讨1688图片搜索API接口,通过Python爬虫技术的结合,展示如何高效利用这......