上次介绍了beautifulsoup的使用,那就来进行运用下吧。本篇将主要介绍通过爬取豆瓣图书的信息,存储到sqlite数据库进行分析。

1.sqlite

SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。

就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。

在Mac是自带sqlite的,不需要重新安装,它的语法也和mysql很像,但存储的是文本文件的格式。下边简单介绍下使用。

创建数据库

sqlite3 spider.db

查看数据库

sqlite> .databases
main: /Users/kumufengchun/Documents/python/douban/spider.db

创建数据表,我们把爬取的数据表存储到douban的表里,结构如下

CREATE TABLE douban(
id integer PRIMARY KEY autoincrement NOT NULL,
tag VARCHAR(50) NOT NULL,
title VARCHAR(50) NOT NULL,
author VARCHAR(50) NOT NULL,
price NUMERIC NOT NULL,
rating NUMERIC NOT NULL,
number INTEGER(10) NOT NULL,
pub_info TEXT NOT NULL
);

查看数据表结构

sqlite> .schema douban
CREATE TABLE douban(
id integer PRIMARY KEY autoincrement NOT NULL,
tag VARCHAR(50) NOT NULL,
title VARCHAR(50) NOT NULL,
author VARCHAR(50) NOT NULL,
price NUMERIC NOT NULL,
rating NUMERIC NOT NULL,
number INTEGER(10) NOT NULL,
pub_info TEXT NOT NULL
);

退出数据库

sqlite> .quit

好的,简单介绍就是上边把,如果想要了解更详细的用法,可以到菜鸟教程看,https://www.runoob.com/sqlite/sqlite-intro.html

2.python爬取代码

import sys
import time
import urllib3
import requests
import numpy as np
import sqlite3
from bs4 import BeautifulSoup
from urllib import parse headers=[{'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'},\
{'User-Agent':'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11'},\
{'User-Agent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'}] def do_spider(book_tag_lists):
for book_tag in book_tag_lists:
book_spider(book_tag) def book_spider(book_tag):
page_num = 0;
page_size = 20
total_size = 0;
while(1):
url = "https://book.douban.com/tag/"+parse.quote(book_tag)+"?start="+str(page_num*page_size)+"&type=T"
print(url)
http = urllib3.PoolManager()
time.sleep(np.random.rand()*5)
try:
r = http.request("GET", url, headers=headers[page_num%len(headers)])
plain_text = r.data.decode()
print(plain_text)
except Exception as e:
print(e)
continue soup = BeautifulSoup(plain_text, features="lxml")
ligroup = soup.find_all("li", class_="subject-item") for item in ligroup:
try:
name = list(item.find("div", class_="info").a.stripped_strings)
title = name[0]
pubinfo = item.find("div", class_="pub").string.strip().split("/")
author = pubinfo[0]
price = pubinfo[-1]
pubinfo = pubinfo[-3]
commentnumber = list(filter(str.isdigit, item.find("span", class_="pl").string))
number = ''.join(commentnumber)
rating = item.find("span", class_="rating_nums").string.strip()
add_record(book_tag, title, author, price, number, rating, pubinfo)
except Exception as e:
print(e)
continue
page_num+=1
total_size+=page_size
if total_size > 100:
break def add_record(tag, title, author, price, commentnumber, rating, pubinfo):
conn = sqlite3.connect("spider.db")
cursor = conn.cursor()
cursor.execute("insert into douban values (null, ?, ?, ?, ?, ?, ?, ?)", (tag, title, author, price, rating, commentnumber, pubinfo))
cursor.close()
conn.commit()
conn.close() if __name__=='__main__':
book_tag_lists=['传记', '职场', '管理', '互联网', '经典']
book_result=do_spider(book_tag_lists)

3.查询分析

上述代码执行完,就会在数据库中存储数据,我们可以像查询mysql那样来查询分析。

查询总条数

sqlite> select count(1) from douban;
879

查询评分9.5以上的

sqlite> select * from douban where rating > 9.5;
10|小说|红楼梦|[清] 曹雪芹 著、高鹗 续 | 59.70元|9.6|235724| 人民文学出版社
71|金融|金融经济学二十五讲|徐高 |52|9.7|94| 中国人民大学出版社有限公司
98|金融|经济学原理|N.格里高利•曼昆 | 64.00元|9.6|1611| 北京大学出版社
177|计算机|深入理解计算机系统(原书第3版)|Randal E.Bryant、David O'Hallaron | 139.00元|9.7|802| 机械工业出版社
187|计算机|深入理解计算机系统(原书第2版)|(美)Randal E.Bryant、David O'Hallaron | 99.00元|9.7|2403| 机械工业出版社
195|计算机|数据密集型应用系统设计|Martin Kleppmann |128|9.7|253| 中国电力出版社
213|计算机|具体数学|Ronald L.Graham、Oren Patashnik、Donald E.Knuth | 99.00元|9.6|280| 人民邮电出版社
249|历史|20世纪思想史|[英] 彼得·沃森 |248|9.6|108| 译林出版社
275|历史|西方哲学史(第9版)|[美] 撒穆尔·伊诺克·斯通普夫、[美] 詹姆斯·菲泽 | 99.80元|9.7|193| 后浪丨北京联合出版公司
279|历史|艺术的故事|[英] 贡布里希 (Sir E.H.Gombrich) |280|9.6|11761| 广西美术出版社
361|传记|拿破仑传|埃米尔・路德维希 |68|9.6|126| 江西人民出版社
390|传记|纳博科夫传|[新西兰]布赖恩·博伊德 | 158.00元(全二册)|9.6|22| 广西师范大学出版社
401|传记|希特勒|伊恩·克肖 (Ian Kershaw) | CNY 168.00|9.6|31| 世界知识出版社
762|经典|红楼梦|[清] 曹雪芹 著、高鹗 续 | 59.70元|9.6|235729| 人民文学出版社
867|经典|西方哲学史(第9版)|[美] 撒穆尔·伊诺克·斯通普夫、[美] 詹姆斯·菲泽 | 99.80元|9.7|193| 后浪丨北京联合出版公司
877|经典|艺术的故事|[英] 贡布里希 (Sir E.H.Gombrich) |280|9.6|11761| 广西美术出版社

查询每个tag的数量

sqlite> select tag,count(1) from douban group by tag;
互联网|118
传记|118
历史|67
小说|40
科幻|17
管理|120
经典|120
职场|119
计算机|46
金融|114

查询每个作家的数量及大于3本的量的作家

sqlite> select author,count(1) from douban group by author having count(1)>3 order by count(1) desc;
吴军 |15
刘慈欣 |12
余华 |6
吴晓波 |6
金庸 |6
[哥伦比亚] 加西亚·马尔克斯 |5
[日] 东野圭吾 |5
[英] J. K. 罗琳 |5
当年明月 |5
陈忠实 |5
[日] 村上春树 |4
[美] 凯文·凯利 |4
[美] 彼得·德鲁克 |4
[美] 沃尔特·艾萨克森 |4
[英] 乔治·奥威尔 |4
张宏杰 |4
路遥 |4

等等,还可以查询其他的。

4.问题

为啥建了表却找不到?

进入到创建表的目录,然后执行 sqlite3 spider.db

python环境?

用的是python3.6版本

豆瓣网址?

https://book.douban.com/tag/%E6%96%87%E5%AD%A6

python系列之(3)爬取豆瓣图书数据的更多相关文章

  1. Scrapy爬取豆瓣图书数据并写入MySQL

    项目地址 BookSpider 介绍 本篇涉及的内容主要是获取分类下的所有图书数据,并写入MySQL 准备 Python3.6.Scrapy.Twisted.MySQLdb等 演示 代码 一.创建项目 ...

  2. Python 2.7_利用xpath语法爬取豆瓣图书top250信息_20170129

    大年初二,忙完家里一些事,顺带有人交流爬取豆瓣图书top250 1.构造urls列表 urls=['https://book.douban.com/top250?start={}'.format(st ...

  3. requests+正则爬取豆瓣图书

    #requests+正则爬取豆瓣图书 import requests import re def get_html(url): headers = {'User-Agent':'Mozilla/5.0 ...

  4. 【python数据挖掘】爬取豆瓣影评数据

    概述: 爬取豆瓣影评数据步骤: 1.获取网页请求 2.解析获取的网页 3.提速数据 4.保存文件 源代码: # 1.导入需要的库 import urllib.request from bs4 impo ...

  5. Scrapy 通过登录的方式爬取豆瓣影评数据

    Scrapy 通过登录的方式爬取豆瓣影评数据 爬虫 Scrapy 豆瓣 Fly 由于需要爬取影评数据在来做分析,就选择了豆瓣影评来抓取数据,工具使用的是Scrapy工具来实现.scrapy工具使用起来 ...

  6. Python爬虫-爬取豆瓣图书Top250

    豆瓣网站很人性化,对于新手爬虫比较友好,没有如果调低爬取频率,不用担心会被封 IP.但也不要太频繁爬取. 涉及知识点:requests.html.xpath.csv 一.准备工作 需要安装reques ...

  7. Python爬虫实例:爬取豆瓣Top250

    入门第一个爬虫一般都是爬这个,实在是太简单.用了 requests 和 bs4 库. 1.检查网页元素,提取所需要的信息并保存.这个用 bs4 就可以,前面的文章中已经有详细的用法阐述. 2.找到下一 ...

  8. 爬虫之爬取豆瓣图书名字及ID

    from urllib import request from bs4 import BeautifulSoup as bs #爬取豆瓣最受关注图书榜 resp = request.urlopen(' ...

  9. Python爬虫入门:爬取豆瓣电影TOP250

    一个很简单的爬虫. 从这里学习的,解释的挺好的:https://xlzd.me/2015/12/16/python-crawler-03 分享写这个代码用到了的学习的链接: BeautifulSoup ...

随机推荐

  1. 009-python一些问题整理

    1. Python中的 // 与 / 的区别 " / "  表示浮点数除法,返回浮点结果 >>> 90/30 3.0 " // " 表示整数除 ...

  2. day67test

    作业 1.按照上方 知识点总结 模块,总结今天所学知识点: 2.有以下广告数据(实际数据命名可以略做调整) ad_data = { tv: [ {img: 'img/tv/001.png', titl ...

  3. css3之弹性盒模型(Flex Box)

    CSS3 弹性盒子(Flex Box) 弹性盒子是 CSS3 的一种新的布局模式. CSS3 弹性盒( Flexible Box 或 flexbox),是一种当页面需要适应不同的屏幕大小以及设备类型时 ...

  4. HBase的一些关于CRUD方法

    配置内容 static{configuration = HBaseConfiguration.create();  //创建配置文件(也就是load工程包目录下的配置文件hbase-site.xml) ...

  5. 【vue】vue-znly

    老规矩,放下博主的项目地址:https://github.com/wohaiwo/vue-znly 我一直在想给那些开源者取什么名字比较好,怎样才对得起他们开源项目的精神,后来想想,还是叫博主吧.有的 ...

  6. 字符串常用方法(转载--https://www.cnblogs.com/ABook/p/5527341.html)

    一.String类String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象.java把String类声明的final类,不能有类.String类对象创建 ...

  7. H5C3--仿京东首页(包含轮播图,倒计时)

    !!!很抱歉,之前的域名已经过期了,已经被别人购买了拿去做菠菜了,现在的话,京东页面我重新发布一下代码 #请看注意事项,因为有模拟请求,请在本地服务器或者IDEA类编译器打开(2019年10月10日0 ...

  8. URI、URL 和 URN的区别

        关于URI:URL类似于住址,它告诉你一种寻找目标的方式.    URL和URN都是URI的子集. URI规范:协议名称://域名.根域名/目录/文件名.后缀#sddf URI :Unifor ...

  9. Struts Tiles框架使用(转)

    原文:Struts Tiles框架使用 Tiles框架 ++YONG原创,转载请声明 Tiles框架为创建Web页面提供了一种模板机制,它能将网页的布局和内容分离.它用模板定义网页布局,每个页面模板都 ...

  10. 网页上PNG透明图片的运用(ie6+滤镜)

    PNG ( Portable Network Graphics ) 格式的无损压缩和半透明特性对增强网页效果减少网页体积有着重要的作用,但由于 IE6 不支持 PNG,所以一直未能得到广泛的应用. 虽 ...