[Python] 糗事百科文本数据的抓取
[Python] 糗事百科文本数据的抓取
源码
https://github.com/YouXianMing/QiuShiBaiKeText
- import sqlite3
- import time
- import requests
- from regexp_string import *
- class QiuShiBaiKeText35:
- db_name = 'qiu_shi_bai_ke_text35.db'
- conn = None
- def prepare(self):
- """
- 开始准备数据库相关准备工作
- :return: PiuShiBaiKeText35对象本身
- """
- # 连接数据库,不存在则创建
- self.conn = sqlite3.connect(self.db_name)
- # 不存在表则创建表
- sql_str = """CREATE TABLE IF NOT EXISTS qiu_shi_bai_ke_text (articleId INT8 PRIMARY KEY NOT NULL,
- content TEXT, date TIMESTAMP); """
- self.conn.execute(sql_str)
- # 关闭数据库
- self.conn.close()
- self.conn = None
- return self
- def start(self, max_page=99999):
- """
- 开始爬数据
- :param max_page: 最大页码,不设置则为99999
- :return: PiuShiBaiKeText35对象本身
- """
- self.conn = sqlite3.connect(self.db_name)
- self.__qiu_shi_text(max_page)
- self.conn.close()
- self.conn = None
- return self
- def __qiu_shi_text(self, max_page=99999):
- """
- 开始扫描
- :param max_page: 最大页码,不设置则为99999
- :return: None
- """
- for i in range(1, max_page):
- url = "http://www.qiushibaike.com/text/page/%s/" % i
- print(url)
- time.sleep(0.5)
- request = requests.get(url)
- if i != 1:
- request = requests.get(url)
- if request.url != url:
- break
- self.__convert_from_web_string(request.text)
- def __convert_from_web_string(self, web_string):
- """
- 获取网页字符串,并用正则表达式进行解析
- :param web_string: 网页字符串
- :return: None
- """
- # 获取列表
- pattern = r"""\d+" target="_blank" class='contentHerf' >.+?</span>"""
- item_list = RegExpString(web_string).get_item_list_with_pattern(pattern)
- # 如果存在列表,则遍历列表
- if item_list:
- for item in item_list:
- # 内容id
- article_id = RegExpString(item).search_with_pattern(r'^\d+').search_result
- # 内容
- article_content = RegExpString(item).search_with_pattern(
- r'(?<=<span>).+(?=</span>)').search_result
- article_content = RegExpString(article_content).replace_with_pattern(r'<br/>',
- "\n").replace_result
- # 打印内容
- print("http://www.qiushibaike.com/article/%s\n%s\n\n" % (article_id, article_content))
- # 先查找有没有这个id的数据
- cursor = self.conn.execute("""SELECT COUNT(*) FROM qiu_shi_bai_ke_text WHERE articleId = '%s';""" % article_id)
- for row in cursor:
- # 如果查不到数据,则插入数据
- if row[0] == 0:
- # 插入语句
- sql_str = """INSERT INTO qiu_shi_bai_ke_text (articleId, content, date) VALUES ('%s', '%s', '%s');""" % (
- article_id, article_content, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
- self.conn.execute(sql_str)
- 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] 糗事百科文本数据的抓取的更多相关文章
- python 糗事百科实例
爬取糗事百科段子,假设页面的URL是 http://www.qiushibaike.com/8hr/page/1 要求: 使用requests获取页面信息,用XPath / re 做数据提取 获取每个 ...
- Python爬虫--抓取糗事百科段子
今天使用python爬虫实现了自动抓取糗事百科的段子,因为糗事百科不需要登录,抓取比较简单.程序每按一次回车输出一条段子,代码参考了 http://cuiqingcai.com/990.html 但该 ...
- python爬虫之爬取糗事百科并将爬取内容保存至Excel中
本篇博文为使用python爬虫爬取糗事百科content并将爬取内容存入excel中保存·. 实验环境:Windows10 代码编辑工具:pycharm 使用selenium(自动化测试工具)+p ...
- 糗事百科python爬虫
# -*- coding: utf-8 -*- #coding=utf-8 import urllib import urllib2 import re import thread import ti ...
- 5 使用ip代理池爬取糗事百科
从09年读本科开始学计算机以来,一直在迷茫中度过,很想学些东西,做些事情,却往往陷进一些技术细节而蹉跎时光.直到最近几个月,才明白程序员的意义并不是要搞清楚所有代码细节,而是要有更宏高的方向,要有更专 ...
- 初识python 之 爬虫:使用正则表达式爬取“糗事百科 - 文字版”网页数据
初识python 之 爬虫:使用正则表达式爬取"古诗文"网页数据 的兄弟篇. 详细代码如下: #!/user/bin env python # author:Simple-Sir ...
- python 抓取糗事百科糗图
1 首先看下要抓取的页面 这是糗事百科里面的糗图页面,每一页里面有很多的图片,我们要做的就是把这些图片抓取下来. 2 分析网页源代码 发现源代码里面的每张图是这样储存的,所以决定使用正则匹配出图片的u ...
- Python抓取糗事百科成人版图片
最近开始学习爬虫,一开始看的是静觅的爬虫系列文章,今天看到糗事百科成人版,心里就邪恶了一下,把图片都爬下来吧,哈哈~ 虽然后来实现了,但还是存在一些问题,暂且不提,先切入正题吧,没什么好说的,直接上代 ...
- Python爬虫(十八)_多线程糗事百科案例
多线程糗事百科案例 案例要求参考上一个糗事百科单进程案例:http://www.cnblogs.com/miqi1992/p/8081929.html Queue(队列对象) Queue是python ...
随机推荐
- Python-html css 盒模型
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>ht ...
- PYTHON-模块 sys os random shutil-练习
# 作业:# 添加工程根目录至环境变量 要求可以跨平台# import sys,os# BATH_DIR=os.path.dirname(os.path.dirname(__file__))# sys ...
- 步步为营-68-asp.net简单练习(get set)
1 加法计算器 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- .NetCore源码阅读笔记系列之HttpAbstractions(五) Authentication
说道认证&授权其实这块才是核心,这款跟前面Security这块有者紧密的联系,当然 HttpAbstractions 不光是认证.授权.还包含其他Http服务和中间价 接下来先就认证这块结合前 ...
- [转]Mysql 存储过程和函数区别
http://blog.csdn.net/wangsifu2009/article/details/6725213 存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用 ...
- BZOJ1192 [HNOI2006]鬼谷子的钱袋 数学推理
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1192 题意概括 把一个数m拆成很多数字. 问至少拆成多少个数字,1~m中的所有数字才可以用这些数字 ...
- TensorFlow 核心——数据流图
1 计算模型 -- 计算图(Graph) 更多参考:数据流图 TensorFlow 中的所有计算都会被转化为计算图上的节点.TensorFlow 是一个通过计算图的形式来表述计算的编程系统.Tenso ...
- Python3 图片水平镜像实现
# -*- coding: utf-8 -*- """ Created on Sun Feb 4 12:15:38 2018 @author: markli " ...
- PHP7和PHP5在安全上的区别[更新]
0X01 前言 本篇文章大多为转载,但是修正了一些不正确的说法,对某些功能点的变更指出具体是哪个版本变更,加入了一些小更新. (原文地址:https://www.freebuf.com/article ...
- GCC&&GDB在OI中的介绍
序言 这本来是用Word写的,但是后来我换了系统所以只能用markdown迁移然后写了...... $\qquad$本文主要投食给那些在Windows下活了很久然后考试时发现需要用命令行来操作时困惑万 ...