当前位置: 首页 > news >正文

案例_(单线程)使用正则的内涵段子爬虫

(单线程)使用正则的内涵段子爬虫

代码如下

 1 from urllib.request import *
 2 import re
 3 import time
 4 
 5 
 6 class Spider(object):
 7     def __init__(self):
 8         self.__start_page = int(input("请输入要爬取的开始页面:"))
 9         self.__end_page = int(input("请输入要爬取的结束页面:"))
10 
11         # 模拟浏览器代理
12         self.__header = {
13             "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3514.0 Safari/537.36"}
14 
15         # 用来记录帖子数量
16         self.num = 1
17 
18     def __load_page(self, start_page, end_page):
19         """
20             下载页面
21         """
22         print("正在爬取中....")
23         for page in range(self.__start_page, self.__end_page + 1):
24             # 由于第一页是url比较特殊,要单独爬取
25             if page == 1:
26                 url = "https://www.neihanba.com/dz/index.html"
27 
28             else:
29                 # 待爬取的地址
30                 url = "https://www.neihanba.com/dz/list_" + str(page) + ".html"
31 
32             # 发起请求
33             request = Request(url, headers=self.__header)
34             response = urlopen(request)
35 
36             # 获取每页的html源码字符串
37             html = response.read().decode("gbk")
38 
39             # 获取所有符合条件的,返回一个列表
40             content_list = re.findall(r'<div class="f18 mb20">.*?</div>', html)
41             42             # 调用__deal_info()开始处理多余的信息
43             self.__deal_info(content_list, page)
44 
45     def __deal_info(self, content_list, page):
46         """
47             处理每条的段子多余的部分
48         """
49         content = "                                 =============================第%d页=========================\n" % page  # 用来拼接内容
50 
51         for info in content_list:
52             # 注意 | 左右的空格不能随便加
53             info = re.sub('(<div class="f18 mb20">)|(</div>)', "", info)
54 
55             content = content + "  %d、" % self.num + info + "\n"
56             self.num += 1
57 
58         # 调用write__page()开始写入数据
59         self.__write_page(content)
60 
61     def __write_page(self, content):
62         """
63             把每个段子逐个写入文件里
64         """
65         with open("内涵段子.txt", "a") as f:
66             f.write(content)
67 
68     def run(self):
69         """
70             控制爬虫运行
71         """
72 
73         start_time = time.time()
74 
75         # 开始爬取
76         self.__load_page(self.__start_page, self.__end_page)
77         print("爬取完成...")
78         end_time = time.time()
79         print('用时:%.2f秒.' % (end_time - start_time))
80 
81 
82 if __name__ == '__main__':
83     spider = Spider()
84     spider.run()

结果预览如下:

 

如果你和我有共同爱好,我们可以加个好友一起交流哈!

 

转载于:https://www.cnblogs.com/ywk-1994/p/9581130.html

相关文章:

  • flash沙盘预测试性能
  • MYSQL 配置文件
  • 【iOS-Cocos2d游戏开发】cocos2d 坐标系使用
  • bzoj5281/luogu4377 Talent Show (01分数规划+背包dp)
  • 纳米时代与现代无穷小分析
  • arguments.callee的作用及替换方案
  • 【IOS】实现一种书本的展示特效
  • asp.net webform设计思路的思考
  • 给自己的应用添加iAd广告之一
  • virsh查看迁移信息的两个命令
  • 【iOS-Cocos2d游戏开发】触屏事件处理机制
  • 迷宫里的动态规划应用
  • Django学习手册 - cookie / session
  • We are unable to complete the review of your app since one or more of your In App Purchases have not
  • IOS内存管理
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Apache的基本使用
  • canvas 绘制双线技巧
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • css选择器
  • DataBase in Android
  • django开发-定时任务的使用
  • DOM的那些事
  • github从入门到放弃(1)
  • idea + plantuml 画流程图
  • JavaScript 奇技淫巧
  • Joomla 2.x, 3.x useful code cheatsheet
  • k8s 面向应用开发者的基础命令
  • Netty源码解析1-Buffer
  • nfs客户端进程变D,延伸linux的lock
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Python 反序列化安全问题(二)
  • Python 基础起步 (十) 什么叫函数?
  • Python_OOP
  • Rancher如何对接Ceph-RBD块存储
  • Sass 快速入门教程
  • 从tcpdump抓包看TCP/IP协议
  • 构建二叉树进行数值数组的去重及优化
  • 类orAPI - 收藏集 - 掘金
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 项目管理碎碎念系列之一:干系人管理
  • 运行时添加log4j2的appender
  • 在Mac OS X上安装 Ruby运行环境
  • 数据库巡检项
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • (02)vite环境变量配置
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (6)添加vue-cookie
  • (全注解开发)学习Spring-MVC的第三天
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • .NET Core 项目指定SDK版本
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • [ C++ ] STL---string类的使用指南