打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
最人性化的Python网络爬虫requests模块,下载百度贴吧和博客标题
userphoto

2023.02.18 重庆

关注

原创2023-02-17 23:31·黑猫编程

什么是requests模块?

之前我们学习过python内置的网络请求库urllib,使用起来流程比较复杂。requests模块对urllib做了完美封装,几乎包括了所有的urllib功能,而且使用起来简洁方便,目前被广泛使用。

requests库常用的方法

最常用的方法为get()和post()分别用于发送get请求和post请求。

get请求语法结构:

requests.get(url, params=None)

参数说明:

url:需要爬取的网站的网址 
params:请求参数

该方法的结果为Response对象,包含服务器的响应信息。

response对象的常用属性:

post请求语法结构:

requests.post( url, data=None)

参数说明:

url:需要爬取的网站的网址 
data:请求数据

正则表达解析数据

项目目标:爬取博客平台所有文章标题。

先分析单独一篇文章,文章页面url是有规律的,目前71号是我当前最后一篇,起始是第1篇。

import requestsimport re

url = "http://blog.hioier.com/blog/detail/71/"response = requests.get(url)

# print(response.text)

title = re.findall("<h3 class=\"arc-title index-title\">(.*)</h3>", response.text)print(title[0])

# 输出:什么是网络爬虫?自动采集互联网信息

进一步地,循环获取所有文章标题:

import requestsimport re

titles = []for i in range(1, 72):

    url = "http://blog.hioier.com/blog/detail/" + str(i);

    response = requests.get(url)

    title = re.findall("<h3 class=\"arc-title index-title\">(.*)</h3>", response.text)

    title.insert(0, i)
    # print(title[0])
    titles.append(title)print(titles)
[[1, '栈,先进后出的数据结构 '], [2, 'CCF CSP-J 2022 第二轮认证试题解析 '], [3, 'Nginx简明教程 '], [4, 'Docker轻量级虚拟化,镜像和容器 '], [5, '青岛大学开源OJ在线测评环境搭建 '], [6, 'Nodejs后端运行和javascript刷题 '], [7, '莫比乌斯反演 '], [8, 'Python OpenCV简介和图像灰度处理 '], [9, '什么是C++编程 '], [10, 'C++变量,存储数据的容器 '], [11, 'C++输入输出流 '], [12, 'Dev C++安装配置 '], [13, '计算机基础知识 '], [14, 'C++标准数据类型 '], [15, 'C++设置域宽、保留小数位数和cmath数学库 '], [16, 'C++语法阶段课程总结 2022.11.24 '], [17], [18, 'Linux简介和云服务器配置 '], [19, 'Linux命令行操作 '], [20, 'Vim编辑器之神 '], [21, 'tmux终端复用器 '], [22, 'Linux用户和用户组 '], [23, 'Numpy简介和数据类型 '], [24, 'Numpy数组属性和数组创建 '], [25, 'SSH远程登录 '], [26, 'Linux文件权限设置 '], [27, 'Ubuntu软件安装和卸载 '], [28, 'Opencv图像二值化处理 '], [29, 'C++格式化输入输出 '], [30, 'C++语法系列 '], [31, '趣学C++编程 '], [32, 'Shell脚本和变量 '], [33, 'Numpy切片、索引 广播和迭代 '], [34, 'Opencv图像降噪 '], [35, 'Python Opencv绘制图形和文字 '], [36, 'Python opencv 人脸识别 '], [37, 'Opencv调取摄像头拍照和从多媒体文件读取视频帧 '], [38, 'Shell test命令和条件判断 '], [39, 'Shell循环结构 '], [40, 'Shell函数 '], [41, 'Shell正则表达式 '], [42, 'Shell三剑客之sed '], [43, 'Linux深入浅出 '], [44, 'Shell三剑客之awk '], [45, '计算机网络发展史和网络拓扑结构 '], [46, '什么是计算机网络OSI模型和TCP/IP模型? '], [47, '计算机网络奈奎斯特定理和香农定理 '], [48, '计算机网络IP地址和子网掩码 '], [49, '计算机网络TCP/UDP协议,三次握手原理 '], [50, '计算机网络应用层体系结构 '], [51, '防火墙是什么墙? '], [52, '什么是计划任务?让计算机定时执行特定任务 '], [53, 'Linux操作系统进程管理 '], [54, '通过Github,免费搭建自己的博客项目 '], [55, 'Github全球最大的程序员交友网站 '], [56, 'git版本创建与回退 '], [57, 'git分支管理,平行宇宙中的代码合并 '], [58, '一文详解HTML和CSS '], [59, 'Javascript基础入门 '], [60, 'Javascript在线刷题输入输出模板 '], [61, '音乐项目-人脸识别登录 '], [62, 'JavaScript点击按钮控制图片切换 '], [63, 'Docker搭建仓库和数据卷管理 '], [64, 'Javascript获取className属性和slice切片 '], [65, 'Javascript定时器 '], [66, 'DOSBox配置8086CPU汇编语言开发环境 '], [67, 'Javascript对象和选项卡 '], [68, 'Javascript轮播图 '], [69, 'Javascript正则表达式 '], [70, 'Javascript鼠标事件和拖拽原理 '], [71, '什么是网络爬虫?自动采集互联网信息 ']]

下面,我们将得到的数据保存到本地文件。

csv文件

csv是一种逗号分隔值文件格式。

向CSV文件中写入数据:

  • 引入csv模块

  • 使用open()函数创建 csv文件

  • 借助csv.write()函数创建writer对象

  • 调用writer对象的writerow()方法写入一行数据

  • 调用writer对象的writerows()方法写入多行数据

import csv

with open('data.csv', 'w', newline='') as f:

    writer = csv.writer(f)

    writer.writerow([1, "100块如何花一周"])
    writer.writerow([2, "如何上班时间高效摸鱼"])

    li = [
        [3, "如何一天赚到100万"],
        [4, "从易经到股市, 我的财富自由之路"],
        [5, "跟黑猫一起学编程"]
    ]

    writer.writerows(li)

从CSV文件中读取数据:

  • 引入csv模块

  • 使用open()函数打开CSV文件

  • 借助csv.reader()函数创建reader对象

  • 读到的每一行都是一个列表(list)

import csvwith open('data.csv', 'r') as f:

    reader = csv.reader(f)    # print(reader)
    for row in reader:
        print(row)

数据保存

将获取到的博客所有文章标题直接存储到csv文件:

with open('data.csv', 'w', newline='') as f:

    writer = csv.writer(f)
    writer.writerows(titles)

这样,就实现了数据爬取、解析和存储的流程。

百度贴吧

在贴吧中输入要搜索的信息,比如“python”,就会出现很多python吧,在最下方有翻页按钮,点击第2页,观察url,主要信息是“kw=python”和“pn=50”,第3页“pn=100”

面向对象的解决方案:下载某贴吧a→b页的html页面到本地目录。

import requestsclass TiebaSpider:

    def __init__(self, name, start_page, end_page):        self.name = name        self.start_page = start_page        self.end_page = end_page        self.headers = {            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv2.0.1) Gecko/20100101 Firefox/4.0.1"
        }        self.rawURL = "https://tieba.baidu.com/f?kw=" + self.name + "&ie=utf-8&pn={}"



    def load_page(self, page_num):

        fullURL = self.rawURL.format((page_num-1)*50)
        result = requests.get(fullURL, headers=self.headers)        return result.text    def save_page(self, page_num):

        file_name = "{}吧 第{}页.html".format(self.name, page_num)
        result = self.load_page(page_num)
        with open(file_name, "w", encoding="utf8") as f:
            f.write(result)    def run(self):        for page_num in range(self.start_page, self.end_page+1):            self.save_page(page_num)if __name__ == "__main__":

    tieba_spider = TiebaSpider("python", 3, 6)
    tieba_spider.run()
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
在python中使用csv
Python读写csv文件
元旦假期,去哪里旅游好呢?Python爬取元旦旅游最全攻略!
python写入csv文件的几种方法总结
python读写csv文件
Python对csv文件的读写操作
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服