• 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('
    作者:'+str(item[0]),'
    内容:'+str(item[1])+'
    点赞人数:'+str(item[3]))
    54         print('
    段子输出完毕!
    段子数量为:',i)
    55 
    56 qiushibaike=QSBK()
    57 qiushibaike.logic()
  • 相关阅读:
    2018-2019-2 20175202实验三《敏捷开发与XP实践》实验报告
    20175202 葛旭阳 MyCP
    20175202 《Java程序设计》第九周学习总结
    20175202 《Java程序设计》第八周学习总结
    2018-2019-2 20175202实验二《Java面向对象程序设计》实验报告
    20175202 结对编程练习—四则运算(第一周)
    20175203 2018-2019 实验三 《敏捷开发与XP实践》
    2018-2019-20175203 实验二 《Java面向对象程序设计》
    20175203 2018-2019-2 实验一《Java开发环境的熟悉》实验报告
    20175203 2018-2019-2《Java程序设计》第五周学习总结
  • 原文地址:https://www.cnblogs.com/lizm166/p/8099965.html
Copyright © 2020-2023  润新知