`
ctrain
  • 浏览: 135293 次
  • 性别: 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抓取糗事百科热门

    【Python-scrapy抓取糗事百科热门】 在Python开发领域,Web爬虫是一个重要的技术分支,用于自动收集网络上的信息。Scrapy是一个强大的、高效的爬虫框架,它为开发者提供了构建爬虫项目的便利。本教程将详细介绍如何...

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

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

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

    在实际操作中,抓取糗事百科、不得姐和kanqu.com这类网站的数据时,我们需要注意以下几点: 1. **反爬策略**:许多网站为了防止爬虫,会设置各种反爬机制,如验证码、IP限制、User-Agent检测等。在编写爬虫时,我们...

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

    在本篇关于Python爬虫爬取糗事百科段子的实例中,我们将学习如何使用Python进行网络数据抓取,特别是针对网页结构简单的站点,如糗事百科。首先,我们需要了解爬虫的基本工作原理:通过发送HTTP请求到指定的URL获取...

    Python爬取糗事百科段子(scrapy+beautifulsoup)

    本教程将深入探讨如何使用Scrapy与BeautifulSoup来爬取糗事百科上的段子。 首先,我们需要了解Scrapy的基本结构。Scrapy项目通常包含几个关键组件:spiders、items、pipelines、settings和 middlewares。Spiders是...

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

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

    python糗事百科数据爬虫.zip

    例如,要抓取糗事百科的主页,我们需要知道其URL,并向该URL发送GET请求。在收到响应后,我们可以通过.text属性获取HTML内容。 接着,解析HTML文档是爬虫的另一关键步骤。BeautifulSoup是一个强大的库,它可以解析...

    python爬虫实战入门爬取糗事百科

    在这个"python爬虫实战入门爬取糗事百科"项目中,我们将学习如何使用Python来爬取网络上的数据,并将其存储到MySQL数据库中。 首先,我们需要了解Python中的几个核心库,它们是实现爬虫的关键工具。requests库用于...

    Python爬虫糗事百科段子(scrapy+beautifulsoup)

    本教程将详细介绍如何利用Scrapy和BeautifulSoup结合,从糗事百科网站上抓取多页的段子内容。 **Scrapy框架介绍** Scrapy是一个强大的Python爬虫框架,它提供了完整的爬虫项目结构和丰富的功能模块,包括请求调度、...

    python web框架显示糗百内容

    2. **编写视图函数**:在`views.py`文件中,创建一个视图函数,使用requests库抓取糗事百科的网页内容。接着,使用pyquery解析HTML,提取出糗事数据,并可能将其存储到数据库中。 3. **创建模板**:使用Django的...

    利用python爬取糗百段子

    在Python编程领域,爬虫是一项重要的技能,它允许我们自动抓取互联网上的数据。在这个案例中,我们将讨论如何使用Python来爬取“糗百”网站的段子,这是一个流行的中文幽默社区。首先,我们需要理解爬虫的基本原理...

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

    本示例主要讲解如何使用Python实现一个简单的爬虫,抓取糗事百科上的热门内容,并将抓取到的数据存储到Excel文件中进行读写和追加操作。 首先,我们需要了解Python中的几个关键库: 1. `requests` 库用于发送HTTP...

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

    通过以上步骤,我们可以构建一个基本的Python爬虫,从糗事百科抓取并显示无图段子。然而,实际的爬虫可能需要更复杂的功能,如动态加载、登录验证、反爬策略处理等。在进一步的实践中,可以考虑使用如Scrapy这样的...

    糗事百科爬虫_by Akang.zip

    标题中的“糗事百科爬虫_by Akang.zip”表明这是一个关于使用Python编写的爬虫程序,目标是抓取糗事百科网站上的数据。这个压缩包可能包含了实现这一功能的所有源代码,作者为Akang。从描述来看,作者是初学者,通过...

    QSBK_BS4.rar_beautifulsoup_糗事百科

    这不仅适用于糗事百科,还可以应用于其他任何具有类似结构的网页,是Python爬虫初学者入门的好选择。通过实践和理解这个过程,你将能更好地理解和运用网页爬虫技术,为今后的项目打下坚实的基础。

    爬取糗事百科的段子然后进行汇总统计和分析

    在这个项目中,我们主要关注的是如何利用Python的Web爬虫技术从糗事百科网站获取热门段子,并对获取的数据进行处理,包括统计和分析。 首先,我们要了解Python中的Web爬虫框架。Python是爬虫开发中常用的语言,其...

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

    本实例将详细讲解如何使用Python实现多线程爬虫,以爬取糗事百科上的段子作为具体应用。 首先,我们需要了解普通爬虫的工作方式。在给定的代码片段中,一个简单的Python爬虫被用来获取糗事百科8小时热榜的段子。它...

    Python 制作糗事百科爬虫实例

    ### Python 制作糗事百科爬虫实例 #### 一、背景介绍 糗事百科作为一个知名的幽默内容分享平台,吸引了大量的用户浏览与分享各种有趣的段子。对于学习Python爬虫技术的同学来说,糗事百科是一个很好的实践平台。...

Global site tag (gtag.js) - Google Analytics