【网络爬虫】(3) 案例小结,文本内容爬取,附Python代码(2)


2. 豆瓣TOP250电影信息爬取

import requests  # 导入requests库,用于发送网络请求  
import parsel  # 导入parsel库,用于解析HTML或XML数据  
import csv  # 导入csv库,用于写入CSV文件  
import time # 导入time库,用于控制程序运行时间或休眠  
# 以追加模式打开文件,用于写入豆瓣电影Top250的信息  
f = open('豆瓣Top250.csv', mode='a', encoding='utf-8', newline='')  
# 定义csv文件的列名  
csv_writer = csv.DictWriter(f, fieldnames=[  
    '标题',       # 电影标题  
    '导演',       # 导演  
    '演员',       # 演员  
    '电影年份',   # 电影年份  
    '拍摄国家',   # 拍摄国家  
    '电影类型',   # 电影类型  
    '电影评分',   # 电影评分  
    '评论人数',   # 评论人数  
    '电影简介',   # 电影简介  
])  
# 写入CSV文件的列名(即表头)  
csv_writer.writeheader()  
# 初始化一个变量num,用于控制爬取的页码  
num = 1

for page in range(0, 250, 25):
    print(f'正在爬取第{num}页数据内容')
    num += 1  # 更新页码
    time.sleep(1)  # 暂停1s,防止更新过于频繁
    # 1. 发送请求, 确定url地址 然后对其发送请求
    url = f'https://movie.douban.com/top250?start={page}&filter='
    # User-Agent 浏览器的基本标识 基本信息 headers请求头 主要是把python代码进行伪装
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'
    }
    response = requests.get(url=url, headers=headers)  # 发送GET请求,获取响应内容
    selector = parsel.Selector(response.text)  # 使用parsel库解析HTML内容
    # css选择器 主要根据标签属性内容提取数据
    lis = selector.css('.grid_view li')  # 获取所有li标签 返回的数据 列表, 列表里面没一个元素都是selector对象
    for li in lis:
        title = li.css('.info .hd span.title:nth-child(1)::text').get()  # 电影的名字
        movie_info_list = li.css('.bd p:nth-child(1)::text').getall()  # 电影的信息
        # getall 返回的是列表 strip() 去除字符串左右两端空格
        actor_list = movie_info_list[0].strip().split('   ')
        if len(actor_list) > 1:
            actor_1 = actor_list[0].replace('导演: ', '')  # 导演
            actor_2 = actor_list[1].replace('主演: ', '').replace('/...', '')  # 主演
            movie_info = movie_info_list[1].strip().split(' / ')
            movie_year = movie_info[0]  # 电影的年份
            movie_country = movie_info[1]  # 电影的国家
            movie_type = movie_info[2]  # 电影的类型
            movie_sum = li.css('.inq::text').get()  # 电影简介
            movie_num = li.css('.rating_num::text').get()  # 电影评分
            comment = li.css('.star span:nth-child(4)::text').get().replace('人评价', '')  # 评论人数
        else:
            actor_1 = actor_list[0]
            actor_2 = 'None'
        dit = {  # 将提取到的信息构造成一个字典
            '标题': title,
            '导演': actor_1,
            '演员': actor_2,
            '电影年份': movie_year,
            '拍摄国家': movie_country,
            '电影类型': movie_type,
            '电影评分': movie_num,
            '评论人数': comment,
            '电影简介': movie_sum,
        }
        csv_writer.writerow(dit)  # 将提取到的电影信息写入CSV文件
        print(title, actor_1, actor_2, movie_year, movie_country, movie_type, movie_sum, movie_num, comment, sep='|')

结果展示,电影信息以CSV文件保存


3. 飞卢网小说爬取

"""
多页 多个数据采集, 我们要去分析, 请求url地址变化规律
"""
import requests  # 导入requests库,用于发起网络请求  
import parsel  # 导入parsel库,用于解析HTML内容  
# 遍历页码,从1到43
for page in range(1, 44):  
    # 构造请求的URL,其中{page}会被循环中的page值替换  
    url = f'https://b.faloo.com/1163585_{page}.html'  
    # 设置请求头,伪装成浏览器访问  
    headers = {  
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36'  
    }  
    # 发起GET请求,获取网页内容  
    response = requests.get(url=url, headers=headers)  
    # 使用parsel库的Selector类解析网页内容  
    selector = parsel.Selector(response.text)  
    # 使用CSS选择器提取小说的标题  
    title = selector.css('.c_l_title h1::text').get().replace('偷吃我外卖被辣哭,问我要索赔?   ', '')  
    # 去掉标题中不需要的文字  
    # 使用CSS选择器提取小说的所有段落内容  
    content_list = selector.css('div.noveContent p::text').getall()  
    # 将所有段落内容合并成一段长文本  
    content = '\n'.join(content_list)  
    # 打印提取到的小说标题和内容  
    print(title)  
    print(content)  
    # 将标题和内容写入到本地文件中  
    with open('偷吃我外卖被辣哭,问我要索赔?' + '.txt', mode='a', encoding='utf-8') as f:  
        # 写入标题  
        f.write(title)  
        # 换行  
        f.write('\n')  
        # 写入内容  
        f.write(content)  
        # 再次换行,为了区分不同章节  
        f.write('\n')

结果展示,小说文本以txt格式保存


4. 知乎回答爬取

import requests  # 导入数据请求模块
import re  # 导入正则
import json  # 导入json
# 请求链接
url = 'https://www.zhihu.com/question/584206512'
# 伪装浏览器
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
# 发送GET请求到知乎的问题页面  
response = requests.get(url=url, headers=headers)
# 问题标题
title = re.findall('<title data-rh="true">(.*?)</title>', response.text)[0]  # 使用正则表达式从返回的HTML中查找问题标题 
 **自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/46a85a5359816a48029878be14bd7af5.png)

![img](https://img-blog.csdnimg.cn/img_convert/38db21906b5887f7630a337063f42880.png)

![img](https://img-blog.csdnimg.cn/img_convert/5d677db5e5de5b9e07b7060b07035a07.png)

![img](https://img-blog.csdnimg.cn/img_convert/098395ea8a4e4d3d2dd4dd9eb3f69fe5.png)

![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**

*既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**

![](https://img-blog.csdnimg.cn/img_convert/88d7d28425285f4449cb3f9ac031389b.jpeg)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值