关于爬虫学习的一些小小记录(四)——爬取数据存入数据库

创建数据库

pymysql 模块

具体操作

预知后事如何

前面我们已经讲了怎么访问网页,并且从网页源码中提取数据。既然数据有了,怎样管理就是下一个需要考虑的问题。这次我们就简单讲讲怎么把爬虫爬取到的数据存入数据库中,以爬取简书文章为例

创建数据库

我们使用的是 MySQL 数据库,不同于 NoSQL 可以直接插入数据,MySQL 需要预先定义数据模式。所以,我们需要先创建一个数据库用于存储爬虫数据

我所使用的数据库图形界面管理工具是 Navicat for MySQL,创建过程如下

打开连接,右键,新建数据库。数据库命名为 pypc,字符集选择 utf-8,排序规则选 utf8_general_ci

打开刚才新建的数据库,新建一张数据表,命名为simplebook,添加四个栏位,分别为 id、title、url、abstract。除了 id 作为主键,剩余的栏位依次存储文章的标题、链接、摘要

好了,这样就可以存入数据了

pymysql 模块

再说一下 Python 脚本与 MySQL 数据库的连接

pymysql是一个很常用 Python 的第三方库,它提供了与 MySQL 数据库连接、执行操作的方法

GitHub 源码地址

菜鸟教程中 pymysql 的部分

我们可以使用pymysql.connect()方法连接数据库,主要参数有

host,MySQL 服务器地址

port,MySQL 服务器端口号

user,登录数据库的用户名

passwd,登录数据库的用户口令

db,待连接的数据库名称

charset,连接的编码方式

connect()方法返回一个 connection 对象,我们主要用到该对象中的方法创建连接 cursor,进而调用execute()方法执行 SQL 语句,可以对数据库进行查询、增删等操作

所以,还需要去学习一点点 SQL……当然,在这里,你会一句就够了

除了 pymysql 模块,Python 中还有 MySQL 官方提供的 mysql-connector 模块可以连接并管理数据库,这里不做多讲,需要可自取:菜鸟教程

具体操作

简书首页地址:https://www.jianshu.com/

还是先打开网页,查看源码进行分析

可以看见,我们需要的几个信息,文章的标题和站内链接地址都可以在 CSS 类名为 title 的 a 标签中获取,文章摘要在 CSS 类名为 abstract 的 p 标签中

可以直接编写爬虫代码

# 爬虫--爬取简书文章存到数据库

import pymysql

from urllib import request

from bs4 import BeautifulSoup

# mysql连接信息

db_config = {

'host': 'localhost', # MySQL 服务器为本地主机

'port': 3306, # 端口号

'user': 'root', # 用户名 root

'password': 'xxxxxxxx', # 口令(才不告诉你)

'db': 'pypc',

'charset': 'utf8'

}

mydb = pymysql.connect(**db_config) # 连接数据库

url = 'https://www.jianshu.com/' # 简书首页

page = request.Request(url)

page.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0')

page_info = request.urlopen(page).read().decode() # 访问连接

soup = BeautifulSoup(page_info, 'html.parser')

titles = soup.find_all('a', 'title') # 搜索标题和链接

abstracts = soup.find_all('p', 'abstract') # 搜索摘要

with mydb.cursor() as cs: # 获取数据库游标

sql = 'insert into simplebook(title, url, abstract) values(%s, %s, %s)' # 待执行的sql语句,把元组数据插入title、url、abstract栏

i = 0

while i < len(titles):

t_url = r'http://www.jianshu.com' + titles[i].attrs['href'] # 提取到的是站内链接,完整链接需加上域名地址

cs.execute(sql, (titles[i].string, t_url, abstracts[i].string)) # 执行 sql 语句

i += 1

mydb.commit() # 提交当前事务

mydb.close() # 关闭连接

运行结果

因为简书首页文章列表刷新的时间间隔比较短,所以我们运行时爬下来的数据和刚才我们分析时的数据并不一样(手残党伤不起),不过这并不影响我们的效果

预知后事如何

不同于之前几篇的爬虫,刚刚我们的代码中有这么两行

page = request.Request(url)

page.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0')

如果去掉这两行,直接 open 我们的 url,会怎样?

Traceback (most recent call last):

File "E:\Python\爬虫\爬虫-爬取简书文章存到数据库.py", line 23, in page_info = request.urlopen(url).read().decode()

File "E:\Python\Python37-32\lib\urllib\request.py", line 222, in urlopen

return opener.open(url, data, timeout)

File "E:\Python\Python37-32\lib\urllib\request.py", line 531, in open

response = meth(req, response)

File "E:\Python\Python37-32\lib\urllib\request.py", line 641, in http_response

'http', request, response, code, msg, hdrs)

File "E:\Python\Python37-32\lib\urllib\request.py", line 569, in error

return self._call_chain(*args)

File "E:\Python\Python37-32\lib\urllib\request.py", line 503, in _call_chain

result = func(*args)

File "E:\Python\Python37-32\lib\urllib\request.py", line 649, in http_error_default

raise HTTPError(req.full_url, code, msg, hdrs, fp)

urllib.error.HTTPError: HTTP Error 403: Forbidden

[Finished in 0.6s with exit code 1]

这就是我下一篇要写的

(感觉好装啊,别打我)

把爬取信息导出到mysql,关于爬虫学习的一些小小记录(四)——爬取数据存入数据库...相关推荐

  1. python爬取InterfaceLIFT壁纸,下载到本地,数据存入数据库(mysql,mongodb)

    github地址 欢迎star,欢迎拍砖 适用pythopn版本 Python 2.7 or Python 3.6 只在这两个版本之下测试过,正常运行 项目文件说明 main.py 主要文件 mysq ...

  2. python爬取微博数据存入数据库_Python爬取微博数据并存入mysql,excel中

    寒假期间做微博数据统计,由于是部门要求,也没办法,自己又是一个懒人,直接用python实现吧.写的很粗糙,也很差,请大家别介意. 总的来说分成两个模块:一个爬取微博数据存入数据库,一个从数据库调取数据 ...

  3. python爬取新闻存入数据库_python爬取数据存入数据库

    昨天本来写了一篇关于python爬取的文章,结果没通过,正好今天一起吧.用python同时实现爬取,和存入数据库,算是复习一下前面操作数据库的知识. 1.准备工作 既然是爬取,那自然要连接到爬取的页面 ...

  4. 爬虫小案例-爬取当当网TOP500的图书并将数据存入数据库

    在这里分享一个刚刚学习爬虫时自己做的一个小案例,爬取了当当网TOP500的图书信息,包括图书名称.作者名称和出版社的名称. 1.分析网页 url:http://bang.dangdang.com/bo ...

  5. [python爬虫] 招聘信息定时系统 (一).BeautifulSoup爬取信息并存储MySQL

    这系列文章主要讲述,如何通过Python爬取招聘信息,且爬取的日期为当前天的,同时将爬取的内容保存到数据库中,然后制作定时系统每天执行爬取,最后是Python调用相关库发送短信到手机.         ...

  6. 利用python+scrapy+mysql爬取虎扑NBA球员数据存入数据库

      大家好,这是我的第一篇博客,写的不好请见谅. 小编是个多年的NBA观众,最近正值季后赛的比赛,闲来无事,突发奇想,想利用刚刚所学的python著名爬虫框架scrapy采集一下全NBA的球员基本信息 ...

  7. 实战:爬取数据存入数据库并做可视化分析

    本文选用天气预报数据作为本次文章的主题. 本文大致思维:首先登录网站,查看网页内容及数据格式(使用代码查看内容),选择两个城市及对应月份,爬取对应天气数据,进行数据预处理(如缺失值处理.数据类型转换. ...

  8. python抓取数据库_Python-7.爬取大量数据存入数据库

    本章包含内容: 前言 mongodb环境配置 爬取数据的代码分析 一.前言 在更新完上一篇python文章时,就一直想爬取一个10万量级的数据.在解了mongodb的基本用法和环境配置后,第一次测试的 ...

  9. python爬取微博数据存入数据库_Python爬取新浪微博评论数据,写入csv文件中

    因为新浪微博网页版爬虫比较困难,故采取用手机网页端爬取的方式 操作步骤如下: 1. 网页版登陆新浪微博 2.打开m.weibo.cn 3.查找自己感兴趣的话题,获取对应的数据接口链接 4.获取cook ...

最新文章

  1. express+ejs搭建的留言
  2. 解决transition动画与display冲突的几种方法
  3. dockfile应用(二)
  4. uart串口通信_听说UART与STM32的HAL库更配哦
  5. 西瓜书读书笔记4-Sigmoid函数
  6. POJ--3984--迷宫问题
  7. 服务器后端开发系列——《实战Nginx高性能Web服务器》 (转载)
  8. excel生成二维码
  9. 火狐浏览器 Mozilla Firefox v36.0.3 便携增强版
  10. 如何调整硬盘分区大小
  11. 来自一枚初生牛犊不怕虎的小菜鸟的Mock.js使用,不足之处欢迎读者的指出 谢谢...
  12. MySQL Deamon少量解读
  13. 如何在Abaqus中用扫掠的方法画六面体网格
  14. kd树搜索(k邻近法)
  15. 成功案例丨荣联助力中科院上海有机所冷冻电镜大数据计算系统建设
  16. 监督学习--分类之决策树
  17. Java多进程从头讲到尾,值得收藏!
  18. Python:subprocess模块
  19. 字符串全排列与组合算法以及八皇后问题
  20. 【Unity 3D 从入门到实战】Unity 3D 导航系统

热门文章

  1. NYOJ-571 整数划分(三)
  2. tlplayer for ios V1.0
  3. [转载]SIFT(尺度不变特征变换)算法小结
  4. Oracle认证体系的重大变化,你需要知道这些...
  5. 【警惕】大量未修复WebLogic WSAT组件RCE漏洞的主机被挖矿程序攻击
  6. 什么是网络单纯型算法
  7. 6种常见的地标识别算法整理和总结
  8. LiteOS内核源码分析:任务LOS_Schedule
  9. Go语言微服务开发框架:Go chassis
  10. 华为云车联网解决方案