获取豆瓣读书所有热门标签并保存到mongodb数据库
目标url:https://book.douban.com/tag/?view=type&icn=index-sorttags-all
目的:抓取所有标签名称(tag_name),标签链接(tag_url),标签下的书籍数量(tag_book_num)

先创建一个config.py文件,设置mongpdb的一些配置信息:

抓取代码如下:
1 import requests
2 from requests.exceptions import RequestException
3 from bs4 import BeautifulSoup
4 import pymongo
5 from config import *
6
7 client = pymongo.MongoClient(MONGO_URL) # 申明连接对象
8 db = client[MONGO_DB] # 申明数据库
9
10 headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'}
11
12
13 def get_tag_url():
14 response = requests.get('https://book.douban.com/tag/?view=type&icn=index-sorttags-all', headers=headers)
15 soup = BeautifulSoup(response.text, 'lxml')
16 results = soup.find_all('table', {'class': 'tagCol'})
17 for result in results:
18 pattern = re.compile('<td><a href="(.*?)">(.*?)</a><b>(.*?)</b></td>')
19 tag_name_list = re.findall(pattern, str(result))
20 for tag_name in tag_name_list:
21 yield {
22 'tagname': tag_name[1], # 返回标签名称
23 'tag_url': 'https://book.douban.com/' + tag_name[0], # 返回标签对应链接
24 'tag_book_num': tag_name[2] # 返回标签中对应的书籍数量
25 }
26
27
28 # 将所有tagname、tag_url、tag_book_num存到mongodb中
29 def save_to_mongo(result):
30 if db[MONGO_TABLE].insert_one(result):
31 print('存储到mongodb成功', result)
32 return True
33 return False
34
35
36 def main():
37 results = get_tag_url()
38 for result in results:
39 save_to_mongo(result)
40
41
42 if __name__ == '__main__':
43 main()
顺利将145个标签保存到数据库啦!

下一步计划就是抓取每个标签下的书籍信息(书名,作者,出版社,出版日期,价格,评价人数,评分)
获取豆瓣读书所有热门标签并保存到mongodb数据库的更多相关文章
- 使用官方组件下载图片,保存到MySQL数据库,保存到MongoDB数据库
需要学习的地方,使用官方组件下载图片的用法,保存item到MySQL数据库 需要提前创建好MySQL数据库,根据item.py文件中的字段信息创建相应的数据表 1.items.py文件 from sc ...
- 5分钟掌握智联招聘网站爬取并保存到MongoDB数据库
前言 本次主题分两篇文章来介绍: 一.数据采集 二.数据分析 第一篇先来介绍数据采集,即用python爬取网站数据. 1 运行环境和python库 先说下运行环境: python3.5 windows ...
- vue+node+mongoDB 火车票H5(六)---城市列表保存到MongoDB数据库并且启用node.js服务
把车站列表保存到数据库,并且从本地创建服务 node.js创建httpserver 1.搭建基于express的运行环境 全局安装express-gengerator cnpm install -g ...
- 吴裕雄--天生自然PYTHON爬虫:安装配置MongoDBy和爬取天气数据并清洗保存到MongoDB中
1.下载MongoDB 官网下载:https://www.mongodb.com/download-center#community 上面这张图选择第二个按钮 上面这张图直接Next 把bin路径添加 ...
- 实现多线程爬取数据并保存到mongodb
多线程爬取二手房网页并将数据保存到mongodb的代码: import pymongo import threading import time from lxml import etree impo ...
- 将sparkStreaming结果保存到Redshift数据库
1.保存到redshift数据库的代码 package test05 import org.apache.log4j.{Level, Logger}import org.apache.spark.rd ...
- 吴裕雄--天生自然python数据清洗与数据可视化:MYSQL、MongoDB数据库连接与查询、爬取天猫连衣裙数据保存到MongoDB
本博文使用的数据库是MySQL和MongoDB数据库.安装MySQL可以参照我的这篇博文:https://www.cnblogs.com/tszr/p/12112777.html 其中操作Mysql使 ...
- php将图片以二进制保存到mysql数据库并显示
一.存储图片的数据表结构: -- -- 表的结构 `image` -- CREATE TABLE IF NOT EXISTS `image` ( `id` int(3) NOT NULL AUTO_I ...
- Python scrapy爬虫数据保存到MySQL数据库
除将爬取到的信息写入文件中之外,程序也可通过修改 Pipeline 文件将数据保存到数据库中.为了使用数据库来保存爬取到的信息,在 MySQL 的 python 数据库中执行如下 SQL 语句来创建 ...
随机推荐
- C#封装定时执行任务类
a.日常开发中经常会遇到定时去执行一些操作,比如定时更新数据.A类需要做我们写个Timer定时去取数据,这时候B类,C类也需要做这样的事情,是不是需要写三次重复代码? 这时候把timer封装成一个帮助 ...
- Fitness - 05.11
倒计时234天 从本周开始改变运动模式 跑步换到每周二.四.六进行. 每周一.三.五增加瑜伽的练习,周日山地车骑行~~~~ 久违的瑜伽课,瑜伽老师居然是男的,第一次看到这么柔软的男生~! 平时感觉不到 ...
- 【转】mac上安装gradle
http://www.douban.com/note/311599602/ 首先,先download最新版本的gradle,网址如下:http://www.gradle.org/get-started ...
- vue bus 中央事件总线
1.全局定义bus 新建src/eventBus.js 文件 import Vue from 'vue' export default new Vue() // 全局引入mai.jsvue中央事件总 ...
- Mybatis源码学习第七天(插件开发原理)
插件概述: 插件是用来改变或者扩展mybatis的原有功能,mybatis的插件就是通过继承Interceptor拦截器实现的,在没有完全理解插件之前j禁止使用插件对mybatis进行扩展,有可能会导 ...
- Docker启动失败
报错信息: Job for docker.service failed because the control process exited with error code. See "sy ...
- TaskContinuationsOptions.ExecuteSynchronously探秘
TPL - Task Parallel Library为我们提供了Task相关的api,供我们非常方便的编写并行代码,而不用自己操作底层的Thread类.使用Task的优势是显而易见的: 提供返回值 ...
- React和Vue的异同
Vue和React是时下比较受欢迎的三巨头之二,对Angular不慎了解,就不在赘述. React是由Facebook开发的一个js ui框架,其最大的变化就是VirtualDOM和新语法JSX vu ...
- 【Flutter 实战】1.20版本更新及新增组件
老孟导读:Flutter 1.20 更新了 Slider.RangeSlider.日期选择器组件.时间选择器组件的样式,新增了交换组件:InteractiveViewer,下面详细介绍其用法. 滑块 ...
- 生成token和获取token
1.先安装模块pip install itsdangerous 举个例子:一个用户登录成功后,讲username和token作为key,value写到redis里面,判断是否失效(1.时间到了失效,2 ...