[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 ...
随机推荐
- Twitter开源的Heron快速安装部署教程
什么是Heron? Twitter使用Storm实时分析海量数据已经有好几年了,并在2011年将其开源.该项目稍后开始在Apache基金会孵化,并在2015年秋天成为顶级项目.Storm以季度为发布周 ...
- LeetCode(63):不同路径 II
Medium! 题目描述: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“F ...
- java List.subList方法中的超级大陷阱
ArrayList 中 subList 的基本用法: subList(fromIndex:int,toIndex:int):List<E> 返回从fromIndex到toindex-1 的 ...
- lldp
https://wenku.baidu.com/view/b9d831f26294dd88d0d26b20.html
- day17--JQuery
JQuery(中文社区:http://jquery.cuishifeng.cn/) 模块 类库 在不同语言叫法不一样而已 DOM/BOM/JavaScript的类库 一.查找元素 JQue ...
- 多线程中使用CheckForIllegalCrossThreadCalls = false访问窗口
在多线程程序中,新创建的线程不能访问UI线程创建的窗口控件,如果需要访问窗口中的控件,可以在窗口构造函数中将CheckForIllegalCrossThreadCalls设置为 false publi ...
- Codeforces 744C Hongcow Buys a Deck of Cards 状压dp (看题解)
Hongcow Buys a Deck of Cards 啊啊啊, 为什么我连这种垃圾dp都写不出来.. 不是应该10分钟就该秒掉的题吗.. 从dp想到暴力然后gg, 没有想到把省下的红色开成一维. ...
- jquery数组(sort() 排序)
HTML: <h3>字符串数组排序前</h3> <div id="show5"></div> <h3>排序后</h ...
- 7-4素数环 uva 524
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> using ...
- 编译linux内核以及添加系统调用的全过程
参考链接: https://www.zybuluo.com/hakureisino/note/514321# 北京邮电大学操作系统实验: https://wenku.baidu.com/view/6d ...