Python 爬虫 之 爬取百度贴吧内容的封装、输入贴吧主题即可对应爬取

拜拜、爱过 提交于 2020-02-09 18:22:29

Python 爬虫 之 爬取百度贴吧内容的封装、输入贴吧主题即可对应爬取

 

目录

Python 爬虫 之 爬取百度贴吧内容的封装、输入贴吧主题即可对应爬取

一、简单介绍

二、知识点

三、效果预览

四、实现步骤

五、关键代码


 

一、简单介绍

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。

爬虫:一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息。


爬虫的网页请求:

网页请求的过程分为两个环节:

      Request (请求):每一个展示在用户面前的网页都必须经过这一步,也就是向服务器发送访问请求。
             Response(响应):服务器在接收到用户的请求后,会验证请求的有效性,然后向用户(客户端)发送响应的内容,客户端接收服务器响应的内容,将内容展示出来,就是我们所熟悉的网页请求

网页请求的方式也分为两种:

     GET:最常见的方式,一般用于获取或者查询资源信息,也是大多数网站使用的方式,响应速度快。
             POST:相比 GET 方式,多了以表单形式上传参数的功能,因此除查询信息外,还可以修改信息。

 

网页一般由三部分组成,分别是 HTML(超文本标记语言)、CSS(层叠样式表)和 JScript(活动脚本语言):

HTML :

HTML 是整个网页的结构,相当于整个网站的框架。带“<”、“>”符号的都是属于 HTML 的标签,并且标签都是成对出现
 

CSS:

CSS 表示样式,图 1 中第 13 行<style type="text/css">表示下面引用一个 CSS,在 CSS 中定义了外观。

JScript:

JScript 表示功能。交互的内容和各种特效都在 JScript 中,JScript 描述了网站中的各种功能。
 


二、知识点

1、import requests 进行网页数据请求获取;

2、把解析的数据保存到本地;

3、类 与 函数的封装(面向对象);

4、字符串格式化的使用("{}-第{}页.html".format(self.tieba_name, page_num));

5、列表和循环的结合使用方法([self.url_temp.format(i*50) for i in range(1000)]);

6、注意事项:把数据写入本地时候,注意可能需要编码格式(encoding=“utf-8”);

 

三、效果预览

 

四、实现步骤

1、打开百度贴吧,输入 python ,在 html 查看器中查找规律,贴吧网址pn 每页从 0 开始,每页 50,如下图

2、根据该规律,打开 Pycharm ,新建工程,如下图

 

3、新建一个 python 文件,如下图

 

4、选中新建的 python 脚本,把他设置为 run,如下图

 

5、编写脚本,实现百度贴吧爬取功能,运行效果如下

 

五、关键代码

import requests    # 引入 requests 库

class BaiduTiebaSpider: # 百度贴吧爬虫
    def __init__(self, tieba_name):
        self.tieba_name = tieba_name
        self.url_temp = "http://tieba.baidu.com/f?kw=" + tieba_name + "&ie=utf-8&pn={}"
        self.headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0"}

    def get_url_list(self):
        """ 把 url_temp 添加页码,组合成真实的网址

        :return: 返回 url 列表
        """
        # url_list = []
        # for i in range(1000):
        #     url_list.append(self.url_temp.format(i*50))
        # return url_list
        return [self.url_temp.format(i*50) for i in range(1000)]

    def parse_url(self, url):
        """ 通过网址,获取网址内容

        :param url: 网址
        :return: 网址 html 内容
        """
        print(url)
        response = requests.get(url, headers = self.headers)
        return response.content.decode()

    def save_html(self, html_str,page_num):
        """ 把 网址 html 内容进行保存

        :param html_str: 网址 html 内容
        :param page_num: 贴吧页数
        """
        file_path = "{}-第{}页.html".format(self.tieba_name, page_num)
        with open(file_path, "w", encoding="utf-8") as f:   # 注意添加 utf-8 编码
            f.write(html_str)

    def run(self):

        # 1、获取 url 贴吧网址
        url_list = self.get_url_list()

        # 2、爬取 贴吧网址内容
        for url in url_list:
            html_str = self.parse_url(url)

            # 保存贴吧 html 内容
            page_num = url_list.index(url)+1    # 页码从 1 开始
            self.save_html(html_str, page_num)

if __name__ == "__main__":      # run 非被脚本,并不运行下面代码
    baidu_tieba_spider = BaiduTiebaSpider("python")
    baidu_tieba_spider.run()

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!