[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. 洛谷p1072 gcd,质因数分解

    /* 可以得a>=c,b<=d,枚举d的质因子p 那么a,b,c,d,x中包含的p个数是ma,mb,mc,md,mx 在gcd(a,x)=c中 ma<mc => 无解 ma=m ...

  2. Django项目部署在Linux下以进程方式启动

    Django项目部署在Linux下以进程方式启动 这是一篇关于如何在linux下,以后台进程的方式运行服务,命令改改基本上就通用了. 开发完Django项目后,需要把项目部署到linux环境下.当然, ...

  3. python 全栈开发,Day110(django ModelForm,客户管理之 编辑权限(一))

    昨日内容回顾 1. 简述权限管理的实现原理. 粒度控制到按钮级别的权限控制 - 用户登陆成功之后,将权限和菜单信息放入session - 每次请求时,在中间件中做权限校验 - inclusion_ta ...

  4. MVCJSONJQuery分页实现

    思路: 1.用Ado.NET获取数据 2.控制器中创建一个方法参数为搜索条件 3.返回前台一个Json对象,把对象用一个类封装 4.用JQuery接收数据 public ActionResult In ...

  5. ERP合同审核流程处理(二十九)

    合同审批流程: 前端的代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=" ...

  6. A. 【UR #16】破坏发射台

    题解: 首先看n是偶数的 那么就是不需要满足对面这个性质的 这样就可以dp了 f[i][0/1]表示dp到第i位,当前数等于或不等于第一位的方案数 然后显然可以用矩阵优化 再考虑n为奇数 用一样的思路 ...

  7. css盒子模型和定位

    content padding border margin 可以理解为在商场上看到的电视机. 电视机------content 装电视机的箱子边框有粗细------border 电视机与箱子之间的泡沫 ...

  8. openstack安装-计算节点-nova计算服务安装

    一.基础服务安装 先安装基础工具 yum install net-tools vim telnet wget lrzsz 1.添加hosts解析 cat << EOF >/etc/h ...

  9. 【AtCoder】ARC078

    C - Splitting Pile 枚举从哪里开始分的即可 #include <bits/stdc++.h> #define fi first #define se second #de ...

  10. python全栈开发day13-迭代器、生成器、列表推导式等

    昨日内容:函数的有用信息.带参数的装饰器.多个装饰器修饰一个函数 迭代器 可迭代对象:内部含有__iter__方法 迭代器 定义:可迭代对象.__iter__()就是迭代器,含有__iter__且__ ...