为了收集笑话也是挺拼的,我就不相信你所有的都看过了。还有,请问哪位仁兄能指点之下怎么把网上抓取到的图片写到word里面,捉摸了好久都没弄出来。

  糗百不需要登录,html直接解析,只要在request的时候加上header就行了,是本菜鸟入手的最佳选择。重点就是正则表达式的匹配上花了很多时间,然后利用bs4获取了热点笑话的页面总数,最后为了方便,就封装成类。该代码抓取了今天24小时内的网站所有热点笑话(当然,图片的笑话就还没实现,有时间在捉摸一下~),写到文件中。
代码(文件参见:https://github.com/zgcao/Claw):
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 10 10:40:03 2015
 
@author: zhigang
"""
 
import urllib
import re   
from bs4 import BeautifulSoup 
import time
 
class my_qiubai:
    def __init__(self):        
        self.stories = []
        self.output ="D:\\qiubai_hot_"+time.strftime('%Y-%m-%d',time.localtime(time.time()))+".txt"
        self.user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
        self.headers = { 'User-Agent' : self.user_agent }
        self.pagecount = 1
        print('Spider has started...')
        
    def getPageCount(self):
        url = 'http://www.qiushibaike.com/hot/page/1'
        nowcontent = urllib.request.urlopen(urllib.request.Request(url,headers = self.headers)).read().decode('utf-8') 
        soup = BeautifulSoup(nowcontent)
        pagelist = soup.find("div", {"class": "pagenumber"}).stripped_strings
        for page in pagelist:            
           self.pagecount = int(page)             
        
    
    def getPageContent(self,pagenumber):
        url = 'http://www.qiushibaike.com/hot/page/' + str(pagenumber)
        #prepare the headers which will be needed when get request for quishibaike    
        request = urllib.request.Request(url,headers = self.headers)
        response = urllib.request.urlopen(request)
        try:
            content = response.read().decode('utf-8')
            
            pattern = re.compile('.*?(.*?).*?(.*?)

(.*?)

',re.S)
            items = re.findall(pattern,content)  
            
            for item in items:
                #item0:author_name;item1:content;item2:img
                hasImg = re.search('img',item[2])
                if not hasImg:
                    story=(item[0].strip()+":\n"+item[1].strip()+'\n')                   
                    self.stories.append(story)
        except urllib.error.HTTPError as e:
            if(e.code=='404'):
                return
            else:
                print(e.code)
                return
                
    def loadPage(self):
        self.getPageContent(1)
        
    def write(self):
        with open(self.output,'w+',encoding='utf-8') as f:
            for story in self.stories:               
                f.write(story)
        print(self.output+' has been stored.')
        
    def viewAll(self):
        startindex = 1
        self.getPageCount()
        for i in range(startindex,self.pagecount+1):
            self.getPageContent(1)            
            print('Page:'+str(i)+' has been fetched...')
        print('All pages have been fetched...')
    
        
spider = my_qiubai()
spider.viewAll()
spider.write()
print('Spider program stoped...')

Python爬虫:获取糗事百科笑话的更多相关文章

  1. Python爬虫_糗事百科

    本爬虫任务: 爬虫糗事百科网站(https://www.qiushibaike.com/)--段子版块中所有的[段子].[投票数].[神回复]等内容 步骤: 通过翻页寻找url规律,构造url列表 查 ...

  2. python scrapy实战糗事百科保存到json文件里

    编写qsbk_spider.py爬虫文件 # -*- coding: utf-8 -*- import scrapy from qsbk.items import QsbkItem from scra ...

  3. 爬虫_糗事百科(scrapy)

    糗事百科scrapy爬虫笔记 1.response是一个'scrapy.http.response.html.HtmlResponse'对象,可以执行xpath,css语法来提取数据 2.提取出来的数 ...

  4. Python抓取糗事百科成人版图片

    最近开始学习爬虫,一开始看的是静觅的爬虫系列文章,今天看到糗事百科成人版,心里就邪恶了一下,把图片都爬下来吧,哈哈~ 虽然后来实现了,但还是存在一些问题,暂且不提,先切入正题吧,没什么好说的,直接上代 ...

  5. python 爬取糗事百科 gui小程序

    前言:有时候无聊看一些搞笑的段子,糗事百科还是个不错的网站,所以就想用Python来玩一下.也比较简单,就写出来分享一下.嘿嘿 环境:Python 2.7 + win7 现在开始,打开糗事百科网站,先 ...

  6. python爬取糗事百科段子

    初步爬取糗事百科第一页段子(发布人,发布内容,好笑数和评论数) #-*-coding:utf--*- import urllib import urllib2 import re page = url ...

  7. Python爬取糗事百科

    import urllib import urllib.request from bs4 import BeautifulSoup """     1.抓取糗事百科所有纯 ...

  8. python 抓取糗事百科糗图

    1 首先看下要抓取的页面 这是糗事百科里面的糗图页面,每一页里面有很多的图片,我们要做的就是把这些图片抓取下来. 2 分析网页源代码 发现源代码里面的每张图是这样储存的,所以决定使用正则匹配出图片的u ...

  9. <爬虫实战>糗事百科

    1.糗事百科段子.py # 目标:爬取糗事百科段子信息(文字) # 信息包括:作者头像,作者名字,作者等级,段子内容,好笑数目,评论数目 # 解析用学过的几种方法都实验一下①正则表达式.②Beauti ...

随机推荐

  1. angular 实现总价满100折扣

    <div ng-controller="CartController"> <div ng-repeat="item in items"> ...

  2. Keil的使用-1创建项目和工程

    下载keil,注意不要使用MDK版本(主要是arm开发使用),大小约54M 安装过程不再详述 安装Keil成功并运行后,新建项目,   创建新项目,然后弹出下图,选择对应的单片机芯片(双击)     ...

  3. 那些年被我坑过的Python——牵一发动全身 第十一章MySQL、ORM

    #!/usr/bin/env python # -*- coding:utf-8 -*- __Author__ = "Zhang Xuyao" from sqlalchemy im ...

  4. Zookeeper的设计模式之观察者模式(十)

    Watcher是Zookeeper用来实现distribute lock, distribute configure, distribute queue等应用的主要手段.要监控data_tree上的任 ...

  5. Standard Numeric Format Strings

    The following table describes the standard numeric format specifiers and displays sample output prod ...

  6. Promise 让异步更优

    每个异步方法都返回一个Promise 更优雅. then方法 每一个Promise  都有一个叫then 的方法, 接受一对callback    被解决时调用,resolve, 被拒绝   reje ...

  7. Unity OF 3DMax毛坯房制作标准

    Unity OF 3DMax毛坯房制作标准 1.模型 2.贴图 3.模型塌陷展UV 4.灯光 5.Radiosity 6.Render  To   Texture 7.烘焙 8.导出 1.模型回目录 ...

  8. Unity网络斗地主 服务端

    Unity网络斗地主  服务端 @by梦想之家2工作室 阿龙 已经做好了服务器框架,并且能实现服务器给客户端分牌的问题!

  9. 关于javaBean中boolean类型变量的set和get注入后传到前端JS中的问题

    set和get方法如下: public boolean isLine() {        return isLine;    } public void setLine(boolean isLine ...

  10. github Travis CI 持续集成

    一个项目如何保证代码质量是开发中非常重要的环节,对于开源项目来说更是如此,因为开源项目要面对的是来自不同水平开发者提交的代码.所以围绕开源做持续集成(Continuous Integration)变得 ...