文档章节

Python3.x爬取糗事百科—优化

xinxin_
 xinxin_
发布于 2016/10/26 16:59
字数 370
阅读 27
收藏 1

爬取糗事百科,优化代码,使用Python类,函数,面向对象编程。

import re
import urllib.request
from urllib.error import URLError


class QiuShiBaiKe(object):

    def __init__(self):     # 初始化变量(页数, 每页的所有段子信息, 程序是否运行状态标识)
        self.page = 1
        self.message = []
        self.enable = False
        self.pattern = re.compile(
            '<div class="author clearfix">.*?<h2>(.*?)</h2>.*?<div class="content">(.*?)</div>.*?<div class="stats"'
            '.*?i class="number">(.*?)</i>(.*?)</span>.*?<span class="dash">.*?i class="number">(.*?)</i>(.*?)</a>',
            re.S)

    def get_pagelist(self, page):  # 抓取对应页数的所有段子,添加到列表种
        try:
            h = {
                'User-Agent': '(Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36',
            }
            baseurl = 'http://www.qiushibaike.com/hot/page/'
            url = baseurl + str(page)
            requ = urllib.request.Request(url, headers=h)
            response = urllib.request.urlopen(requ)
            content = response.read().decode('utf-8')
            item_list = re.findall(self.pattern, content)

            page_list = []
            for item in item_list:
                img = re.search('img', item[1])
                if not img:
                    text = re.sub('<(.*?)>', '', item[1].strip())
                    page_list.append([item[0], text, item[2], item[4]])
            return page_list

        except URLError as e:
            print('error:', e.reason)
            return None

    def load_page(self):  # 加载下一页
        if self.enable is True:
            if len(self.message) < 2:   # page小于2(此时正读取某页最后一条段子)
                page_list = self.get_pagelist(self.page)
                if page_list:
                    self.message.append(page_list)
                    self.page += 1

    def get_onepage(self, page, page_list):
        for paragraph in page_list:
            input_info = input()
            self.load_page()
            if input_info == 'Q':
                self.enable = False
                return
            print('{0}, {1}, {2}, {3}, {4}'.format(page, paragraph[0], paragraph[1], paragraph[2], paragraph[3]))

    def run(self):   # 程序运行...
        print('正在读取糗事百科热门段子...')
        print('按回车读取新段子,按Q退出')
        self.enable = True
        self.load_page()
        nowpage = 0   # 控制当前页
        while self.enable:   # 取出最新元素后,并删除
            if len(self.message) > 0:
                page_list = self.message[0]
                nowpage += 1
                del self.message[0]
                self.get_onepage(nowpage, page_list)
if __name__ == '__main__':
    spider = QiuShiBaiKe()
    spider.run()

注:参考此篇博客后总结,完成。

© 著作权归作者所有

xinxin_
粉丝 4
博文 82
码字总数 16427
作品 0
南京
程序员
私信 提问
加载中

评论(2)

xinxin_
xinxin_ 博主

引用来自“孤独的小猪”的评论

写的非常好,注释能在多一点就好了。
好的,我在需要的地方再加一下注释~
听风的小猪
听风的小猪
写的非常好,注释能在多一点就好了。
Python3.x实现简单爬虫—爬糗事百科

1、Python版本:3.5,urllib库, 2、爬取糗事百科24小时热门段子,第一页(网页地址:http://www.qiushibaike.com/hot/1) 3、使用正则匹配, re库 4、Python2的urllib、urllib2合并成pytoh...

大猩猩secrets
2016/10/25
76
0
python-20:爬取糗事百科段子源码

到这里,我们爬取糗事百科这个入门项目已经结束了,下面贴上源码: ---------------------------------爬取糗事百科段子源码---------------------------- #!/usr/bin/env python -- coding:...

达岭凹老大
2015/11/25
200
0
Ubuntu16.04下Scrapy环境的搭建

一、Scrapy简介与部署环境 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的第三方爬虫框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。 最初是为了页面抓取...

dyc2005
2017/10/24
0
0
推荐一个分享网站爬虫源码的gitbub项目

这是爬取京东商品信息和评论的爬虫源码: var keyword = "d3.js";//@input(keyword, 查询关键字, 爬取该关键字搜索出来的京东商品)var commentcount = 100;//@input(commentcount, 爬取的评论...

chuntianhao
2016/06/02
27
0
Python分分钟爬取糗事百科,让自己充满内涵

使用Python爬取糗事百科 代码如下: 必须加上head否则无法抓取. 学习资料也可以加下Python扣扣裙:四八三五四六四一六自己下载学习下 虽然核心部分已经完成了,但是还需要将代码更改为面向对...

python达人
2018/05/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

parseint和isNaN用法

本文转载于:专业的前端网站➭parseint和isNaN用法 <!doctype html><html><head><meta charset="utf-8"><title>无标题文档</title></head><body><script> var a='12'; alert......

前端老手
15分钟前
2
0
Kylin 精确去重在用户行为分析中的妙用

作者:史少锋,Apache Kylin committer & PMC,2019/10/11 在上次文章《如何在 1 秒内做到大数据精准去重》中,我们介绍了 Apache Kylin 为什么要支持大数据集上的精确去重,以及基于 Bitmap...

ApacheKylin
27分钟前
2
0
学习记录(二) es6基本语法(rest参数,模板化,axios模块,拦截器)

日常学习记录 模块化:把一个大文件分成多个小文件,按照一定规范进行拼接 es5写法: 导出:module.exports = 数据 导入:require("路径") /路径未添加后缀名时 //默认添加.js //把路径作为文件名...

Pole丶逐
30分钟前
2
0
以程序员的角度怎么购买一台「性价比高的电视」

前俩天有小伙伴在我的文章下留言,说能否把 【国内电视机都介绍一下】,今天我已在TV端开发多年的程序员的角度。谈谈已程序员的角度如何购买一台性价比高的电视。 国内大的电视机品牌介绍 长...

我们都很努力着
34分钟前
1
0
PhotoShop 色调:理解直方图/RGB通道信息

一、直方图:图表的形式,展示图像像素分布的情况 1.平均值:表示平均亮度 2.标准偏差值:表示亮度值范围内的中间值 3.像素: 表示用于计算直方图的像素总数 4.色阶:显示指针下面的区域亮度...

东方墨天
39分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部