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()
来源:CSDN
作者:仙魁XAN
链接:https://blog.csdn.net/u014361280/article/details/104219919