[Python] 糗事百科文本数据的抓取

源码

https://github.com/YouXianMing/QiuShiBaiKeText

  1. import sqlite3
  2. import time
  3. import requests
  4. from regexp_string import *
  5.  
  6. class QiuShiBaiKeText35:
  7.  
  8. db_name = 'qiu_shi_bai_ke_text35.db'
  9. conn = None
  10.  
  11. def prepare(self):
  12. """
  13. 开始准备数据库相关准备工作
  14. :return: PiuShiBaiKeText35对象本身
  15. """
  16.  
  17. # 连接数据库,不存在则创建
  18. self.conn = sqlite3.connect(self.db_name)
  19.  
  20. # 不存在表则创建表
  21. sql_str = """CREATE TABLE IF NOT EXISTS qiu_shi_bai_ke_text (articleId INT8 PRIMARY KEY NOT NULL,
  22. content TEXT, date TIMESTAMP); """
  23. self.conn.execute(sql_str)
  24.  
  25. # 关闭数据库
  26. self.conn.close()
  27. self.conn = None
  28.  
  29. return self
  30.  
  31. def start(self, max_page=99999):
  32. """
  33. 开始爬数据
  34. :param max_page: 最大页码,不设置则为99999
  35. :return: PiuShiBaiKeText35对象本身
  36. """
  37.  
  38. self.conn = sqlite3.connect(self.db_name)
  39. self.__qiu_shi_text(max_page)
  40. self.conn.close()
  41. self.conn = None
  42.  
  43. return self
  44.  
  45. def __qiu_shi_text(self, max_page=99999):
  46. """
  47. 开始扫描
  48. :param max_page: 最大页码,不设置则为99999
  49. :return: None
  50. """
  51.  
  52. for i in range(1, max_page):
  53.  
  54. url = "http://www.qiushibaike.com/text/page/%s/" % i
  55. print(url)
  56. time.sleep(0.5)
  57.  
  58. request = requests.get(url)
  59.  
  60. if i != 1:
  61. request = requests.get(url)
  62. if request.url != url:
  63. break
  64.  
  65. self.__convert_from_web_string(request.text)
  66.  
  67. def __convert_from_web_string(self, web_string):
  68. """
  69. 获取网页字符串,并用正则表达式进行解析
  70. :param web_string: 网页字符串
  71. :return: None
  72. """
  73.  
  74. # 获取列表
  75. pattern = r"""\d+" target="_blank" class='contentHerf' >.+?</span>"""
  76. item_list = RegExpString(web_string).get_item_list_with_pattern(pattern)
  77.  
  78. # 如果存在列表,则遍历列表
  79. if item_list:
  80.  
  81. for item in item_list:
  82.  
  83. # 内容id
  84. article_id = RegExpString(item).search_with_pattern(r'^\d+').search_result
  85.  
  86. # 内容
  87. article_content = RegExpString(item).search_with_pattern(
  88. r'(?<=<span>).+(?=</span>)').search_result
  89. article_content = RegExpString(article_content).replace_with_pattern(r'<br/>',
  90. "\n").replace_result
  91.  
  92. # 打印内容
  93. print("http://www.qiushibaike.com/article/%s\n%s\n\n" % (article_id, article_content))
  94.  
  95. # 先查找有没有这个id的数据
  96. cursor = self.conn.execute("""SELECT COUNT(*) FROM qiu_shi_bai_ke_text WHERE articleId = '%s';""" % article_id)
  97.  
  98. for row in cursor:
  99.  
  100. # 如果查不到数据,则插入数据
  101. if row[0] == 0:
  102. # 插入语句
  103. sql_str = """INSERT INTO qiu_shi_bai_ke_text (articleId, content, date) VALUES ('%s', '%s', '%s');""" % (
  104. article_id, article_content, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
  105. self.conn.execute(sql_str)
  106.  
  107. self.conn.commit()

细节

1. 抓取 http://www.qiushibaike.com/text/ 所有35个页面的文本数据

2. 抓取的数据写进数据库,数据库用的是sqlite3

3. 基于Python3.60版本,其他版本未测试

4. 网络库使用过的 requests (https://github.com/kennethreitz/requests) ,如果没有安装,请使用 pip install requests 安装

效果

[Python] 糗事百科文本数据的抓取的更多相关文章

  1. python 糗事百科实例

    爬取糗事百科段子,假设页面的URL是 http://www.qiushibaike.com/8hr/page/1 要求: 使用requests获取页面信息,用XPath / re 做数据提取 获取每个 ...

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

    今天使用python爬虫实现了自动抓取糗事百科的段子,因为糗事百科不需要登录,抓取比较简单.程序每按一次回车输出一条段子,代码参考了 http://cuiqingcai.com/990.html 但该 ...

  3. python爬虫之爬取糗事百科并将爬取内容保存至Excel中

    本篇博文为使用python爬虫爬取糗事百科content并将爬取内容存入excel中保存·. 实验环境:Windows10   代码编辑工具:pycharm 使用selenium(自动化测试工具)+p ...

  4. 糗事百科python爬虫

    # -*- coding: utf-8 -*- #coding=utf-8 import urllib import urllib2 import re import thread import ti ...

  5. 5 使用ip代理池爬取糗事百科

    从09年读本科开始学计算机以来,一直在迷茫中度过,很想学些东西,做些事情,却往往陷进一些技术细节而蹉跎时光.直到最近几个月,才明白程序员的意义并不是要搞清楚所有代码细节,而是要有更宏高的方向,要有更专 ...

  6. 初识python 之 爬虫:使用正则表达式爬取“糗事百科 - 文字版”网页数据

    初识python 之 爬虫:使用正则表达式爬取"古诗文"网页数据 的兄弟篇. 详细代码如下: #!/user/bin env python # author:Simple-Sir ...

  7. python 抓取糗事百科糗图

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

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

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

  9. Python爬虫(十八)_多线程糗事百科案例

    多线程糗事百科案例 案例要求参考上一个糗事百科单进程案例:http://www.cnblogs.com/miqi1992/p/8081929.html Queue(队列对象) Queue是python ...

随机推荐

  1. Python-html css 盒模型

    <!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>ht ...

  2. PYTHON-模块 sys os random shutil-练习

    # 作业:# 添加工程根目录至环境变量 要求可以跨平台# import sys,os# BATH_DIR=os.path.dirname(os.path.dirname(__file__))# sys ...

  3. 步步为营-68-asp.net简单练习(get set)

    1 加法计算器 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  4. .NetCore源码阅读笔记系列之HttpAbstractions(五) Authentication

    说道认证&授权其实这块才是核心,这款跟前面Security这块有者紧密的联系,当然 HttpAbstractions 不光是认证.授权.还包含其他Http服务和中间价 接下来先就认证这块结合前 ...

  5. [转]Mysql 存储过程和函数区别

    http://blog.csdn.net/wangsifu2009/article/details/6725213 存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用 ...

  6. BZOJ1192 [HNOI2006]鬼谷子的钱袋 数学推理

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1192 题意概括 把一个数m拆成很多数字. 问至少拆成多少个数字,1~m中的所有数字才可以用这些数字 ...

  7. TensorFlow 核心——数据流图

    1 计算模型 -- 计算图(Graph) 更多参考:数据流图 TensorFlow 中的所有计算都会被转化为计算图上的节点.TensorFlow 是一个通过计算图的形式来表述计算的编程系统.Tenso ...

  8. Python3 图片水平镜像实现

    # -*- coding: utf-8 -*- """ Created on Sun Feb 4 12:15:38 2018 @author: markli " ...

  9. PHP7和PHP5在安全上的区别[更新]

    0X01 前言 本篇文章大多为转载,但是修正了一些不正确的说法,对某些功能点的变更指出具体是哪个版本变更,加入了一些小更新. (原文地址:https://www.freebuf.com/article ...

  10. GCC&&GDB在OI中的介绍

    序言 这本来是用Word写的,但是后来我换了系统所以只能用markdown迁移然后写了...... $\qquad$本文主要投食给那些在Windows下活了很久然后考试时发现需要用命令行来操作时困惑万 ...