[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] 糗事百科文本数据的抓取的更多相关文章

  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. Transformer+BERT+GPT+GPT2

    Transformer: https://jalammar.github.io/illustrated-transformer/ BERT: https://arxiv.org/pdf/1810.04 ...

  2. 【mysql】表备份

    几个讲得比较好的资料: http://www.cnblogs.com/liangshaoye/p/5464794.html:讲解了热备,温备,冷备,增量备份,差异备份等多种概念. http://www ...

  3. sharding-jdbc结合mybatis实现分库分表功能

    最近忙于项目已经好久几天没写博客了,前2篇文章我给大家介绍了搭建基础springMvc+mybatis的maven工程,这个简单框架已经可以对付一般的小型项目.但是我们实际项目中会碰到很多复杂的场景, ...

  4. SPLAY,LCT学习笔记(四)

    前三篇好像变成了SPLAY专题... 这一篇正式开始LCT! 其实LCT就是基于SPLAY的伸展操作维护树(森林)连通性的一个数据结构 核心操作有很多,我们以一道题为例: 例:bzoj 2049 洞穴 ...

  5. python 全栈开发,Day35(TCP协议 粘包现象 和解决方案)

    一.TCP协议 粘包现象 和解决方案 黏包现象让我们基于tcp先制作一个远程执行命令的程序(命令ls -l ; lllllll ; pwd)执行远程命令的模块 需要用到模块subprocess sub ...

  6. pyinstaller将py文件转成exe格式

    首先要注意一下:打包python文件成exe格式这个过程只能在windows环境下运行 1. 直接在命令行用pip安装 pyinstaller pip install pyinstaller 2. 下 ...

  7. hdu 2717 从n点走到k点 (BFS)

    在横坐标上 从n点走到k点 至少要几步 可以到 n+1 n-1 n*2这3个点 Sample Input5 17 Sample Output4 #include <iostream> #i ...

  8. CSP 地铁修建 Kruskal (最小生成树+并查集)

    问题描述 A市有n个交通枢纽,其中1号和n号非常重要,为了加强运输能力,A市决定在1号到n号枢纽间修建一条地铁. 地铁由很多段隧道组成,每段隧道连接两个交通枢纽.经过勘探,有m段隧道作为候选,两个交通 ...

  9. Python hashlib、hmac加密模块

    #用于加密的相关操作,3.x里代替了md5模块和sha模块,主要提供sha1,sha224,sha256,sha384,sha512,md5算法 #sha2为主流加密算法,md5加密方式不如sha2 ...

  10. BZOJ1180 [CROATIAN2009]OTOCI LCT

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1180 本题和BZOJ2843一样. BZOJ2843 极地旅行社 LCT 题意概括 有n座岛 每座 ...