`
ctrain
  • 浏览: 133178 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Python3抓取糗事百科

 
阅读更多
import urllib.request
import urllib.parse
import urllib.error
import http.cookiejar
import re

class QSBK :
    #初始化方法,定义一些变量
    def __init__(self) :
        self.pageIndex = 1
        self.user_agent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36"
    	#初始化headers
        self.headers = ("User-Agent", self.user_agent)
        self.stories = []
        self.enable = False
        print(self.headers)
        self.cj=http.cookiejar.CookieJar()
        self.opener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(self.cj)) 
        self.opener.addheaders=[self.headers,('Cookie','4564564564564564565646540')]
        urllib.request.install_opener(self.opener)   

    def getPage(self,pageIndex) :
        try :
        	url = "http://www.qiushibaike.com/hot/page/"+str(pageIndex)
        	#构建请求的url
        	response = urllib.request.urlopen(url)
	        mybytes = response.read()
	        mybytes = mybytes.decode("utf8") 
	        return mybytes
        except urllib.error.URLError as e:
        	print("出错了")

    def getPageItems(self,pageIndex) :
        pageCode = self.getPage(pageIndex)
        if not pageCode:
            print ("页面加载失败....")
            return None
        pattern = re.compile('<div.*?class="author.*?>.*?<a.*?>(.*?)</a>.*?<div.*?class'+
                         '="content">(.*?)</div>(.*?)<div class="stats.*?class="number">(.*?)</i>',re.S)
        items = re.findall(pattern,pageCode)
        pageStories = []
        for item in items:
            pos = item[1].find("<!--")
            #print(pos)
            #print(item[1][0:pos])
            #print(item[1][pos+4:len(item[1])-5])
            content = item[1][0:pos]
            timestamp = item[1][pos+4:len(item[1])-5]
            author = item[0][item[0].find("/>")+2:len(item[0])] 
            
            #print(timestamp)
            #print(item[3])
            #print(content.strip()+"\n")
            #是否含有图片
            haveImg = re.search("img",content)
            #如果不含有图片,把它加入list中
            if not haveImg:
                if int(item[3]) > 200 :
                    #print(author.strip()+",写于"+timestamp+",获得"+item[3]+"点赞")
                    pageStories.append([author.strip(),timestamp.strip(),content.strip(),int(item[3])])
        return pageStories

    def loadPage(self) :
        #如果当前未看的页数少于2页,则加载新一页
        if self.enable == True:
            if len(self.stories) < 2:
                #获取新一页
                pageStories = self.getPageItems(self.pageIndex)
                #将该页的段子存放到全局list中
                if pageStories:
                    self.stories.append(pageStories)
                    #获取完之后页码索引加一,表示下次读取下一页
                    self.pageIndex += 1

    def getOneStory(self,pageStories,page) :
         #遍历一页的段子
        for story in pageStories:
            #等待用户输入
            instr = input()
            #每当输入回车一次,判断一下是否要加载新页面
            self.loadPage()
            #如果输入Q则程序结束
            if instr == "Q":
                self.enable = False
                return
            print ("第%d页,%s发布于%s,获得%s赞:\n%s" %(page,story[0],story[1],story[3],story[2]))

#开始方法
    def start(self):
        print ("正在读取糗事百科,按回车查看新段子,Q退出")
        #使变量为True,程序可以正常运行
        self.enable = True
        #先加载一页内容
        self.loadPage()
        #局部变量,控制当前读到了第几页
        nowPage = 0
        while self.enable:
            if len(self.stories)>0:
                #从全局list中获取一页的段子
                pageStories = self.stories[0]
                #当前读到的页数加一
                nowPage += 1
                #将全局list中第一个元素删除,因为已经取出
                del self.stories[0]
                #输出该页的段子
                self.getOneStory(pageStories,nowPage)


spider = QSBK()
spider.start()
分享到:
评论

相关推荐

    python爬虫爬取糗事百科内容

    糗事百科的爬虫,是主要用来介绍爬虫的一些基本知识,方便大家爬取简单的糗事百科的内容,利用的是beautifulsoup

    Python-scrapy抓取糗事百科热门

    scrapy抓取糗事百科热门

    Python抓取糗事百科网页信息以及源码下载

    代码中使用这个网址获取网页中的信息的。...每一页显示20条糗事,每条糗事有头像,用户姓名,糗事内容,糗事内容图片(该图片可有可无,没有图片的话,糗事内容就是纯文本形式),以及点赞或者好笑数量。

    Python3抓取糗百、不得姐、轻松一刻,完整可运行源码程序

    使用Python3.6抓取糗百、不得姐、kanqu.com数据,完整代码可运行,内附使用说明(main.py),及运行演示(demo.gif).

    零基础写python爬虫之抓取糗事百科代码分享

    用Python写的糗事百科的网络爬虫。 使用方法: 新建一个Bug.py文件,然后将代码复制到里面后,双击运行。 程序功能: 在命令提示行中浏览糗事百科。 原理解释: 首先,先浏览一下糗事百科的主页:...

    Python爬虫爬取糗事百科段子实例分享

    1.抓取糗事百科热门段子; 2.过滤带有图片的段子; 3.实现每按一次回车显示一个段子的发布时间,发布人,段子内容,点赞数。 糗事百科是不需要登录的,所以也没必要用到Cookie,另外糗事百科有的段子是附图的,我们...

    玩转python爬虫之爬取糗事百科段子

    主要介绍了python爬虫爬取糗事百科段子,详细介绍下,如何来抓取到糗事百科里面的指定内容,感兴趣的小伙伴们可以参考一下

    Python实现爬虫抓取与读写、追加到excel文件操作示例

    主要介绍了Python实现爬虫抓取与读写、追加到excel文件操作,结合具体实例形式分析了Python针对糗事百科的抓取与Excel文件读写相关操作技巧,需要的朋友可以参考下

    Python多线程爬虫实战_爬取糗事百科段子的实例

    下面小编就为大家分享一篇Python多线程爬虫实战_爬取糗事百科段子的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    Python 模拟百度贴吧爬虫源码.rar

    Python 模拟抓取百度贴吧爬虫源码,除了抓取百度贴吧,还模拟抓取了糗事... 关于抓取糗事百科内容:  操作:输入quit退出阅读糗事百科  功能:按下回车依次浏览今日的糗百热点  更新:解决了命令提示行下乱码的问题

    Python队列+多线程爬虫(起点小说网、豆瓣、京东订单、百度贴吧、淘宝优惠券6W数据、糗事百科).zip

    爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL...

    python web框架显示糗百内容

    python 使用django框架抓取并显示糗百内容到html页面上。 爬取数据使用requests包,分析数据使用到了pyquery包。 前端页面集成bootstrap框架。

    python爬虫

    1.抓取糗事百科热门段子 2.过滤带有图片的段子

    python爬虫,包含大小项目

    糗事百科 百度帖吧 pixabay图片网站 pexels图片网 info社区 教务网 拉勾 豆瓣 二、进阶篇 抓取手机App数据 断点续爬 三、框架篇(Scrapy) scrapy爬多级网页及图片(一般方法) scrapy爬多级网页及图片...

    Scrapy糗事百科爬虫及Java版客户端.zip

    爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL...

    王纯业的Python学习笔记 下载

    您可能感兴趣的文章:通过python下载FTP上的文件夹的实现代码python批量下载壁纸的实现代码用python下载百度文库的代码下载糗事百科的内容_python版使用Python编写简单网络爬虫抓取视频下载资源python多线程http下载...

    Python爬虫包BeautifulSoup实例(三)

    一步一步构建一个爬虫实例,抓取糗事百科的段子 先不用beautifulsoup包来进行解析 第一步,访问网址并抓取源码 # -*- coding: utf-8 -*- # @Author: HaonanWu # @Date: 2016-12-22 16:16:08 # @Last Modified by: ...

    spider_python:python爬虫

    spider_python前言如果想查看详细的教程,请关注微信公众号:AirPython普通的爬虫多线程爬虫Selenium 自动化爬虫Scrapy 框架爬虫爬取糗事百科的段子保存到 JSON 文件中爬取微信小程序论坛的数据登录豆瓣网并修改个性...

Global site tag (gtag.js) - Google Analytics