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()
分享到:
相关推荐
糗事百科的爬虫,是主要用来介绍爬虫的一些基本知识,方便大家爬取简单的糗事百科的内容,利用的是beautifulsoup
【Python-scrapy抓取糗事百科热门】 在Python开发领域,Web爬虫是一个重要的技术分支,用于自动收集网络上的信息。Scrapy是一个强大的、高效的爬虫框架,它为开发者提供了构建爬虫项目的便利。本教程将详细介绍如何...
代码中使用这个网址获取网页中的信息的。...每一页显示20条糗事,每条糗事有头像,用户姓名,糗事内容,糗事内容图片(该图片可有可无,没有图片的话,糗事内容就是纯文本形式),以及点赞或者好笑数量。
在实际操作中,抓取糗事百科、不得姐和kanqu.com这类网站的数据时,我们需要注意以下几点: 1. **反爬策略**:许多网站为了防止爬虫,会设置各种反爬机制,如验证码、IP限制、User-Agent检测等。在编写爬虫时,我们...
在本篇关于Python爬虫爬取糗事百科段子的实例中,我们将学习如何使用Python进行网络数据抓取,特别是针对网页结构简单的站点,如糗事百科。首先,我们需要了解爬虫的基本工作原理:通过发送HTTP请求到指定的URL获取...
本教程将深入探讨如何使用Scrapy与BeautifulSoup来爬取糗事百科上的段子。 首先,我们需要了解Scrapy的基本结构。Scrapy项目通常包含几个关键组件:spiders、items、pipelines、settings和 middlewares。Spiders是...
用Python写的糗事百科的网络爬虫。 使用方法: 新建一个Bug.py文件,然后将代码复制到里面后,双击运行。 程序功能: 在命令提示行中浏览糗事百科。 原理解释: 首先,先浏览一下糗事百科的主页:...
例如,要抓取糗事百科的主页,我们需要知道其URL,并向该URL发送GET请求。在收到响应后,我们可以通过.text属性获取HTML内容。 接着,解析HTML文档是爬虫的另一关键步骤。BeautifulSoup是一个强大的库,它可以解析...
在这个"python爬虫实战入门爬取糗事百科"项目中,我们将学习如何使用Python来爬取网络上的数据,并将其存储到MySQL数据库中。 首先,我们需要了解Python中的几个核心库,它们是实现爬虫的关键工具。requests库用于...
本教程将详细介绍如何利用Scrapy和BeautifulSoup结合,从糗事百科网站上抓取多页的段子内容。 **Scrapy框架介绍** Scrapy是一个强大的Python爬虫框架,它提供了完整的爬虫项目结构和丰富的功能模块,包括请求调度、...
2. **编写视图函数**:在`views.py`文件中,创建一个视图函数,使用requests库抓取糗事百科的网页内容。接着,使用pyquery解析HTML,提取出糗事数据,并可能将其存储到数据库中。 3. **创建模板**:使用Django的...
在Python编程领域,爬虫是一项重要的技能,它允许我们自动抓取互联网上的数据。在这个案例中,我们将讨论如何使用Python来爬取“糗百”网站的段子,这是一个流行的中文幽默社区。首先,我们需要理解爬虫的基本原理...
本示例主要讲解如何使用Python实现一个简单的爬虫,抓取糗事百科上的热门内容,并将抓取到的数据存储到Excel文件中进行读写和追加操作。 首先,我们需要了解Python中的几个关键库: 1. `requests` 库用于发送HTTP...
通过以上步骤,我们可以构建一个基本的Python爬虫,从糗事百科抓取并显示无图段子。然而,实际的爬虫可能需要更复杂的功能,如动态加载、登录验证、反爬策略处理等。在进一步的实践中,可以考虑使用如Scrapy这样的...
标题中的“糗事百科爬虫_by Akang.zip”表明这是一个关于使用Python编写的爬虫程序,目标是抓取糗事百科网站上的数据。这个压缩包可能包含了实现这一功能的所有源代码,作者为Akang。从描述来看,作者是初学者,通过...
这不仅适用于糗事百科,还可以应用于其他任何具有类似结构的网页,是Python爬虫初学者入门的好选择。通过实践和理解这个过程,你将能更好地理解和运用网页爬虫技术,为今后的项目打下坚实的基础。
在这个项目中,我们主要关注的是如何利用Python的Web爬虫技术从糗事百科网站获取热门段子,并对获取的数据进行处理,包括统计和分析。 首先,我们要了解Python中的Web爬虫框架。Python是爬虫开发中常用的语言,其...
本实例将详细讲解如何使用Python实现多线程爬虫,以爬取糗事百科上的段子作为具体应用。 首先,我们需要了解普通爬虫的工作方式。在给定的代码片段中,一个简单的Python爬虫被用来获取糗事百科8小时热榜的段子。它...
### Python 制作糗事百科爬虫实例 #### 一、背景介绍 糗事百科作为一个知名的幽默内容分享平台,吸引了大量的用户浏览与分享各种有趣的段子。对于学习Python爬虫技术的同学来说,糗事百科是一个很好的实践平台。...