源代码

import requests
import re
import jsonimport time
import randomclass CsdnSpider:def __init__(self):"""初始化"""# url模板self.base_url = "https://blog.csdn.net/ifubing/article/list/{}"# 初始urlself.start_url = self.base_url.format(1)# 请求列表self.url_list = list()# 数据存放的列表self.data_list = list()def update(self):"""更新数据"""self.make_url_list()# 往self.url_list中添加每一个文章列表页的url# 遍历请求列表依次发起请求,获取全部文章的数据self.parse_url_list()# 数据保存到文件中,保存为json格式# 当前的所有数据都在self.data_listself.save_data()def search(self):"""搜索文章根据关键词在数据库中进行搜索:param key: 搜索关键词:return search_res: []"""key = input("请输入需要搜索的内容:")# 读取文件with open("data.db", "r", encoding="utf8") as f:content = f.read()# json转pythoncontent_list = json.loads(content)  # [{},{}]# 搜索search_res = list()for content in content_list:if key in content['title']:search_res.append(content)# 显示搜索结果print("关键词[{}]的搜索结果为{}条".format(key, len(search_res)))print('详情如下:')for res in search_res:for v in res.values():print(v)print('-'*20)# for k,v in res.items():#     print(k)#     print(v)#     print('-'*20)def start(self):choice = input('请输入您的选择:1-更新博客数据, 2-搜索博客文章')if choice == "1":self.update()elif choice == "2":self.search()def save_data(self):""" 保存数据到文件中,用json """str_data = json.dumps(self.data_list, ensure_ascii=False)with open('data.db', 'w', encoding='utf8') as f:f.write(str_data)def parse_url_list(self):for url in self.url_list:print('url', url)html = self.parse_url(url)# print('html')# print(html)# print('*'*10)# title = self.get_title()# href = self.get_href()# 从html中抽出文章的标题与链接self.add_article_data(html)n = random.randint(1,5)time.sleep(n)def add_article_data(self, html):"""从html中抽出文章的标题与链接:param html: 一个列表页的html代码:return:"""com = re.compile(r'<h4 class="">.*?</h4>', re.DOTALL)h4_list = com.findall(html)for h4 in h4_list:c1 = re.compile(r'<a href="(.*?)" target="_blank">')href = c1.findall(h4)c2 = re.compile(r'<span class="article-type type-1 float-none">原创</span>(.*?)</a>')title = c2.findall(h4)# 判断href与title是否是预期的数据类型print('href', href)print('title', title)# 确保title与href的0号位有内容if not all([href, title]):print('爬到的href或者title为空')continuearticel_data = {"title": title[0].strip(),  # "     标题      "    []"href": href[0]}print('得到的文章字典为:')print(articel_data)# 添加数据到列表中self.data_list.append(articel_data)print('self.datalist')print(self.data_list)def make_url_list(self):"""往self.url_list中添加每一个文章列表页的url"""# 爬取第一页,获得html内容start_html = self.parse_url(self.start_url)# print(start_html)# 保存爬取的内容self.save_html(start_html)# 获取最大的页码数max_num = self.get_max_num(start_html)print(max_num)# 生成url请求列表self.add_url_by_max_num(max_num)def add_url_by_max_num(self, max_num):"""根据最大页码数,生成URL列表"""for i in range(1,max_num+1):# 拼urltemp = self.base_url.format(i)self.url_list.append(temp)def get_max_num(self, html):"""根据html内容,提取最大页码数"""# html 中 """<li data-page="38" class="ui-pager">38</li>"""# com = re.compile(r'<span class="count">742</span>')# 获取总文章数com = re.compile(r'<span class="count">(.*?)</span></a>')article_num = com.findall(html)print(article_num)# 计算出总页码数# 元组=divmode(页码数,20)   ---》 (11,2)     (13,0)max_num, left_num = divmod(int(article_num[0]), 20)if left_num != 0:max_num += 1print('计算出来的最大页码数是', max_num)return max_numdef parse_url(self, url):"""发起get请求,返回请求内容:param url::return: 响应内容str""""""发起get请求,返回响应的内容"""header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"}response = requests.get(url, headers=header)return response.content.decode()def save_html(self, html):"""保存"""import timename = str(int(time.time())) + ".txt"with open(name, "w", encoding="utf8") as f:f.write(html)if __name__ == '__main__':csdn = CsdnSpider()csdn.start()

爬虫-csdn博客爬虫-打造具有搜索功能的小工具相关推荐

  1. 为你的CSDN博客添加CNZZ流量统计功能

    一.流量统计介绍 流量统计是指通过各种科学的方式,准确的纪录来访某一页面的访问者的流量信息,目前而言,必须具备可以统计. 1.简介 统计独立的访问者数量(独立用户.独立访客): 可以统计独立的IP地址 ...

  2. Python爬虫-CSDN博客排行榜数据爬取

    文章目录 前言 网络爬虫 搜索引擎 爬虫应用 谨防违法 爬虫实战 网页分析 编写代码 运行效果 反爬技术 前言 开始接触 CTF 网络安全比赛发现不会写 Python 脚本的话简直寸步难行--故丢弃 ...

  3. 使用 Swiftype 给 Hexo 搭建的博客添加站内搜索功能

    当我们的 博客 文章变的越来越多的时候,就非常需要使用 站内搜索 功能,否则寻找某一篇文章就会变的麻烦,Swiftype 是一个非常好的站内搜索平台,并且是 免费 的,可以到 我的博客 去预览一下搜索 ...

  4. 在新版CSDN博客添加友情链接

    自从CSDN博客改版之后,很多功能都消失了....我以前没用过CSDN,满心欢喜的来到这,期待着漂亮的皮肤,顺畅的操作.飞一般的速度.可是事实恰恰相反..... 言归正传,简单说一下怎么在新版的CSD ...

  5. 老牛破车般的CSDN博客

    老牛破车般的CSDN博客与难兄难弟的CSDN下载频道 从2001年到2009年,我在CSDN混了有7.8年了,写博客也有好几年了,对CSDN博客实在是容忍又容忍. 早先是博文插图困难,于是我就尽量不插 ...

  6. 选择Confluence,而不是有道云笔记、微信公众号、Git、Markdown、CSDN博客、记事本

    雷哥喜欢把事情.知识.任务,管理得紧紧有条,不喜欢乱糟糟的. 经常总结个人的经验教训,日常工作. 怎么很好地管理自己的知识,一直是个大难题. 现状如下: 浏览器收藏夹 用QQ浏览器,收藏有价值的网站. ...

  7. 【爬虫+数据可视化】Python爬取CSDN博客访问量数据并绘制成柱状图

    以下内容为本人原创,欢迎大家观看学习,禁止用于商业及非法用途,谢谢合作! ·作者:@Yhen ·原文网站:CSDN ·原文链接:https://blog.csdn.net/Yhen1/article/ ...

  8. Python爬虫小实践:爬取任意CSDN博客所有文章的文字内容(或可改写为保存其他的元素),间接增加博客访问量...

    Python并不是我的主业,当初学Python主要是为了学爬虫,以为自己觉得能够从网上爬东西是一件非常神奇又是一件非常有用的事情,因为我们可以获取一些方面的数据或者其他的东西,反正各有用处. 这两天闲 ...

  9. python爬虫爬取csdn博客专家所有博客内容

    python爬虫爬取csdn博客专家所有博客内容: 全部过程采取自动识别与抓取,抓取结果是将一个博主的所有 文章存放在以其名字命名的文件内,代码如下 #coding:utf-8import urlli ...

最新文章

  1. Ant Design 4.0 进行时!
  2. GIS-001-gdal软件下载地址
  3. 【PC工具】winrar解压缩装机必备软件,winRAR5.70免费无广告
  4. Pytorch学习- 小型知识点汇总 unsqueeze()/squeeze() 和 .max() 等等
  5. httpbin.org的使用
  6. Apache Flink 零基础入门(十七)Flink 自定义Sink
  7. php-css外边距
  8. 73页PPT,教你从0到1构建用户画像系统(附下载)
  9. netty框架实现websocket达到高并发
  10. 二叉树:层序遍历登场!
  11. Windows11 配置 java 8.0 环境变量
  12. 【matlab_郭彦甫课后练习题答案】
  13. 企业人力资源管理中的数据分析
  14. 上拉电阻和下拉电阻的选型和计算
  15. 计算机word表格公开课ppt,制作Word表格公开课).ppt
  16. CSS hover改变背景图片过渡动画生硬
  17. 外卖项目05---套餐管理业务开发
  18. 轻松玩转Python:打开文件夹,搜索视频文件,实现简单视频播放器
  19. 安装Xp和Win7双系统方法(图文教程)
  20. MySQL数据库 锁

热门文章

  1. python元素分类_Python 练习 - 元素分类
  2. java中字符串(2)String
  3. 新骗子举报收录系统源码
  4. php和app关系,请教一下,app和微信 两个共通的问题
  5. 达梦数据库修改字段长度_解决达梦数据库新增大字段报错问题
  6. ProjeQtOr(项目管理软件) v9.0.2
  7. java直接读取rar,Java无需解压直接读取Zip文件和文件内容
  8. 重温《数据库系统概论》【第一篇 基础篇】【第1章 绪论】
  9. Notepad++格式化JSON
  10. WordPress主题modown6.2+erphpdown11.7