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

Python3.x:抓取百事糗科段子

Python3.x:抓取百事糗科段子

实现代码:

 1 #Python3.6 获取糗事百科的段子
 2 import urllib.request       #导入各类要用到的包
 3 import urllib
 4 import re
 5 
 6 #用正则表达式爬取糗事百科的段子,并实现去除带有的图片段子,且每按一次回车键实现显示下一条段子
 7 #写这程序的原理是先把网页爬下来,再解析匹配源代码中的段子,并把所有的带图片和不带图片的段子都进行保存
 8 #再在输出段子时实现控制输出就能实现只输出不带图片的段子,并实现每按一次快捷键就显示下一个段子的内容
 9 #就是好像每一页都有二十个段子的。。。。只爬下来十九。。。。
10 
11 
12 class QSBK():
13     def __init__(self):
14         self.url='http://www.qiushibaike.com/hot/page/'                 #基础网址
15         self.user_agent='Mozilla/4.0(cpmpatible;MSIE 5.5;Windows NT)'   #要添加的headers
16         self.headers={'User-Agent':self.user_agent}
17         self.item_joke=[]                                               #用来保存段子的列表
18 
19     #请求函数
20     def request(self,page):
21         request=urllib.request.Request(self.url+str(page),headers=self.headers)
22         response=urllib.request.urlopen(request)
23         return response.read().decode('utf-8')                      #将源代码进行编码转换为HTML格式
24 
25     #将获取到的网页和正则表达式进行匹配并返回匹配到的每个段子的信息列表
26     def get_joke(self,content):
27         try:
28             pattern = re.compile('<.*?class="author.*?>.*?<a.*?<h2>(.*?)</h2>.*?<div.*?class="content".*?<span>(.*?)</span>(.*?)<div class="stats.*?class="number">(.*?)</i>',re.S)
29             self.item_joke.append(re.findall(pattern, content))     #将获取到的每一页的段子追加到存储列表中
30         except urllib.error.URLError as e:
31             if hasattr(e, "code"):
32                 print(e.code)
33             if hasattr(e, "reason"):
34                 print(e.reason)
35 
36     #逻辑函数
37     def logic(self):
38         page=input('输入你想要进行爬取的页数:')
39         for i in range(int(page)):
40             content=self.request(i+1)
41             self.get_joke(content)
42 
43         print('输出段子:')
44         i=0                                         #用来记录无图的段子
45         print('每按一次快捷键读取一条段子,按Q退出!')
46         for items in self.item_joke:                #由于爬取到的数据返回是以列表形式返回一整夜的段子的,所以要用for循环嵌套进行输出
47             for item in items:
48                 input_=input()
49                 if input_=='Q':
50                     return
51                 if not re.search('img',item[2]):    #筛选无图的段子输出
52                     i+=1
53                     print('\n作者:'+str(item[0]),'\n内容:'+str(item[1])+'\n点赞人数:'+str(item[3]))
54         print('\n段子输出完毕!\n段子数量为:',i)
55 
56 qiushibaike=QSBK()
57 qiushibaike.logic()

 

转载于:https://www.cnblogs.com/lizm166/p/8099965.html

相关文章:

  • 怎么评判网络舆情分析系统好不好的指标标准详解
  • Apache Spark 2.2.0 中文文档 - Spark SQL, DataFrames and Datasets
  • 网络舆情信息怎么报送的流程
  • 网络舆情风险评估工作有效做好的实施方案
  • mysql (mariadb)表结构添加修改删除方法总结
  • 互联网舆情监测与分析系统作用及使用功能详解
  • sublime
  • 社区的网络舆情信息监测具体实施方案
  • wc (Word Count)
  • 全网舆情监测系统功能板块具体详介
  • SAP RFC介绍:关于sRFC,aRFC,tRFC,qRFC和bgRFC
  • 如何高效做好今日舆情信息监测与搜集的方法
  • Mysql 备份恢复与xtrabackup备份
  • 舆情监测意思及监测工作流程详介
  • Java框架之Spring(四)
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Git学习与使用心得(1)—— 初始化
  • happypack两次报错的问题
  • leetcode388. Longest Absolute File Path
  • Vue ES6 Jade Scss Webpack Gulp
  • WebSocket使用
  • 学习HTTP相关知识笔记
  • 阿里云API、SDK和CLI应用实践方案
  • !!java web学习笔记(一到五)
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • $refs 、$nextTic、动态组件、name的使用
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (06)Hive——正则表达式
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (转)http-server应用
  • (转)原始图像数据和PDF中的图像数据
  • .Net - 类的介绍
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .net程序集学习心得
  • .NET下的多线程编程—1-线程机制概述
  • @requestBody写与不写的情况
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [2669]2-2 Time类的定义
  • [delphi]保证程序只运行一个实例
  • [element-ui] el-dialog 中的内容没有预先加载,因此无法获得内部元素的ref 的解决方案
  • [Excel VBA]单元格区域引用方式的小结
  • [G-CS-MR.PS02] 機巧之形2: Ruler Circle
  • [HTML API]HTMLCollection
  • [Java、Android面试]_05_内存泄漏和内存溢出
  • [JavaWeb]——过滤器filter与拦截器Interceptor的使用、执行过程、区别
  • [js] 正则表达式
  • [LeeCode]—Wildcard Matching 通配符匹配问题
  • [leetcode 189][轮转数组]
  • [LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞
  • [python] RRT快速拓展随机树
  • [SharePoint][SharePoint Designer 入门经典]Chapter13 客户端Silverlight编程
  • [Web开发] IE8 新增的Javascript 开发接口
  • [代码审计] beecms 4.0 漏洞总结