#python爬虫:爬取糗事百科段子

#出处:http://python.jobbole.com/81351/#确定url并抓取页面代码,url自己写一个import urllib,urllib2def getUrl():    page=1    url="http://www.qiushibaike.com/hot/page/"+str(page)    try:        request=urllib2.Request(url)        response=urllib2.urlopen(request)        print response.read()    except urllib2.URLError,e:        if hasattr(e,‘code‘):            print e.code        if hasattr(e,‘reason‘):            print e.reason#getUrl()#运行错误def getUrl():    page=1    url="http://www.qiushibaike.com/hot/page/"+str(page)    user_age=‘Mozilla/4.0(compatible;MSIE5.5;Windows NT)‘    headres={‘User-Agent‘:user_age}    try:        request=urllib2.Request(url,headers=headres)        response=urllib2.urlopen(request)        print response.read()    except urllib2.URLError,e:        if hasattr(e,‘code‘):            print e.code        if hasattr(e,‘reason‘):            print e.reason#这样打印出页面的源代码#提取某一页的所有段子#要求:获取发布人,发布日期,段子内容,点赞的个数,但是有些段子是带图片,在控制台不能显示图片,所以需要把带有图片的段子给删除掉,只保存仅文本段子#目的通过正则匹配来寻找所有要求的内容,方法如下import redef getUrl1():    page=1    url="http://www.qiushibaike.com/hot/page/"+str(page)    user_age=‘Mozilla/4.0(compatible;MSIE5.5;Windows NT)‘    headres={‘User-Agent‘:user_age}    try:        request=urllib2.Request(url,headers=headres)        response=urllib2.urlopen(request)

        content=response.read().decode(‘utf-8‘)

        pattern=re.compile(‘<div.*?class="author.*?>.*?<a.*?</a>.*?<a.*?>(.*?)</a>.*?<div.*?class‘+                         ‘="content".*?title="(.*?)">(.*?)</div>(.*?)<div class="stats.*?class="number">(.*?)</i>‘,re.S)        items=re.findall(pattern,content)        for i in items:            haveImg=re.search(‘img‘,i[3])            if not haveImg:                print i[0],i[1],i[2],i[4]    except urllib2.URLError,e:        if hasattr(e,‘code‘):            print e.code        if hasattr(e,‘reason‘):            print e.reason#利用面向对象模式编程import urllib,urllib2,re,thread,timeclass QSBK:    def __init__(self):        self.pageIndex=1        self.user_agent="Mozilla/4.0(compatible;MSIE5.5;Windows NT)"        self.headres={‘User-Agent‘:self.user_agent}#初始化        self.stories=[]#存入变量        self.enable=False#是否继续运行变量    def getPage(self,pageIndex):#传入某个一页索引获得页面代码        try:            url=‘http://www.qiushibaike.com/hot/page/‘+str(pageIndex)            request=urllib2.Request(url,headers=self.headres)#构建请求            response=urllib2.urlopen(request)#利用urlopen获取页面代码            pageCode=response.read().decode(‘utf-8‘)#编码为utf-8            return pageCode        except urllib2.URLError as e:            if hasattr(e,‘reason‘):                print u‘连接失败:{0}‘.format(e.reason)                return None    #传入某一页代码,返回本页不带图片的段子列表    def getPageItems(self,index):        pageCode=self.getPage(index)        if not pageCode:            print u‘加载页面失败.....‘            return None        pattern=re.compile(‘<div.*?class="author.*?>.*?<a.*?</a>.*?<a.*?>(.*?)</a>.*?<div.*?class‘+                         ‘="content".*?title="(.*?)">(.*?)</div>(.*?)<div class="stats.*?class="number">(.*?)</i>‘,re.S)        items=re.findall(pattern,pageCode)        #用来存储每页段子们        pageStories=[]        #遍历正则表达式匹配信息        for i in items:            #是否含有图片            haveImg=re.search(‘img‘,i[3])            if not haveImg:#如果不含有图片,把它加入到列表中                #i[0]是一个段子的发布者,i[1]发布时间,i[2]内容,i[4]点赞数                pageStories.append([i[0].strip(),i[1].strip(),i[2].strip(),i[4].strip()])        return  pageStories    #加载并提取页面内容,加入到列表中    def loadPage(self):#如果当前来看的页面小于2页,则加载新一页        if self.enable==True:            if len(self.stories)<2:#获取新一页                pageS=self.getPageItems(self.pageIndex)                if pageS:                    #将该页面的段子放到全局列表中                    self.stories.append(pageS)                    self.pageIndex+=1#获取完之后页面索引加1,表示下次读取下一页    #调用该方法,每次敲回车打印输出一个段子    def getOneStory(self,page1,page):        for story in page1:#遍历一页            _input=raw_input()#等待用户输入            self.loadPage()#每当输入回车一次,判断一下是否要加载新页面            if _input==‘Q‘:#如果输入为Q则结束                self.enable=False                return            print u‘第{0}页\t发布人:{1}\t发布时间:{2}\n{3}赞:{4}\n‘.format(page,story[0],story[1],story[2],story[3])    #开始    def start(self):        print u‘正在读取信息,按回车查看新段子,Q退出>>>‘        self.enable=True#变量为真,程序可以正常运行        self.loadPage()#先加载一页内容        howpage=0#局部变量,控制当前讲到了第几页        print 11        while self.enable:            if len(self.stories)>0:                pageStories=self.stories[0]#从全局列表中获取一页段子                howpage+=1#当前读到页面加1                del self.stories[0]#传全局列表中第一个元素删除,因为已经取出                self.getOneStory(pageStories,howpage)#输出spider=QSBK()spider.start()
时间: 2024-10-18 20:40:45

#python爬虫:爬取糗事百科段子的相关文章

Python爬虫爬取糗事百科段子内容

参照网上的教程再做修改,抓取糗事百科段子(去除图片),详情见下面源码: #coding=utf-8#!/usr/bin/pythonimport urllibimport urllib2import reimport threadimport timeimport sys #定义要抓取的网页#url = 'http://www.qiushibaike.com/hot/'#读取要抓取的网页#globalcontent = urllib.urlopen(url).read()#抓取段子内容#new_

Python爬虫-爬取糗事百科段子

闲来无事,学学python爬虫. 在正式学爬虫前,简单学习了下HTML和CSS,了解了网页的基本结构后,更加快速入门. 1.获取糗事百科url http://www.qiushibaike.com/hot/page/2/    末尾2指第2页 2.先抓取HTML页面 import urllib import urllib2 import re page = 2 url = 'http://www.qiushibaike.com/hot/page/' + str(page) #对应第2页的url

Python爬虫--抓取糗事百科段子

今天使用python爬虫实现了自动抓取糗事百科的段子,因为糗事百科不需要登录,抓取比较简单.程序每按一次回车输出一条段子,代码参考了 http://cuiqingcai.com/990.html 但该博主的代码似乎有些问题,我自己做了修改,运行成功,下面是代码内容: 1 # -*- coding:utf-8 -*- 2 __author__ = 'Jz' 3 import urllib2 4 import re 5 6 #糗事百科爬虫类 7 class QSBK: 8 #初始化 9 def __

python爬取糗事百科段子

初步爬取糗事百科第一页段子(发布人,发布内容,好笑数和评论数) 1 #-*-coding:utf-8-*- 2 import urllib 3 import urllib2 4 import re 5 page = 1 6 url ='http://www.qiushibaike.com/hot/page/'+str(page) #第一页URL 7 headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/

Python爬虫实战-爬取糗事百科段子

1.本文的目的是练习Web爬虫 目标: 1.爬去糗事百科热门段子 2.去除带图片的段子 3.获取段子的发布时间,发布人,段子内容,点赞数. 2.首先我们确定URL为http://www.qiushibaike.com/hot/page/10(可以随便自行选择),先构造看看能否成功 构造代码: 1 # -*- coding:utf-8 -*- 2 import urllib 3 import urllib2 4 import re 5 6 page = 10 7 url = 'http://www

芝麻HTTP:Python爬虫实战之爬取糗事百科段子

首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致之前的代码没法用了,会导致无法输出和CPU占用过高的情况,是因为正则表达式没有匹配到的缘故. 现在,博主已经对程序进行了重新修改,代码亲测可用,包括截图和说明,之前一直在忙所以没有及时更新,望大家海涵! 更新时间:2015/8/2 糗事百科又又又又改版了,博主已经没心再去一次次匹配它了,如果大家遇到长时间运行不出结果也不报错的情况,请大家参考最新的评

Python爬虫实战一之爬取糗事百科段子

参考资料:http://cuiqingcai.com/990.html 1.非面向对象模式 完整代码1: # -*- coding: utf-8 -*-import reimport urllib2import urllibimport threadimport time page = 1url = 'http://www.qiushibaike.com/hot/page/' + str(page)user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5;

爬虫二:爬取糗事百科段子

这一次我们利用BeautifulSoup进行网页的解析,方法其实跟前一次的差不多,只是这里我们爬取的是糗事百科,糗事百科有反爬机制,我们需要模拟用户来访问糗事百科网站,也就是加上头部信息headers,其实整体思路与上一篇所写爬虫的思路差不多,拿个速度可以共用. 1.首先我们在打开网页,并在网页空白处右击选择"检查"在弹出的网页里选择"Network" 2.然后按下"F5"刷新一下 3.在刷新后的页面里我们可以看到多条信息,任意选择一条信息点开

python3 爬虫---爬取糗事百科

这次爬取的网站是糗事百科,网址是:http://www.qiushibaike.com/hot/page/1 分析网址,参数'page/'后面的数字'1'指的是页数,第二页就是'/page/2',以此类推... 一.分析网页 网页图片 然后明确要爬取的元素:作者名.内容.好笑数.以及评论数量 每一个段子的信息存放在'div id="content-left"'下的div中 爬取元素的所在位置 二.爬取部分 工具: Python3 requests xpath 1.获取每一个段子 1 #

爬虫 爬取糗事百科热门板块的信息

分析: 1.先查看返回的内容是否与显示的内容一样 2.再看页数的变化,每次会加一,总共13页,因此可以一次性构造地址列表 3.因此可直接结合 chrome插件 xpath helper 与 elemetns显示的内容进行定位要爬取的内容 用到的模块 requests+json+lxml+xpath 下面是代码: import requests import json from lxml import etree class QiubaiSpider: def __init__(self): se