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

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

创建数据库

pymysql 模块

具体操作

预知后事如何

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

创建数据库

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

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

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

a199130582c49801dd4496db83aff609.png

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

67aab2f09d1ac6e0a8e3d466617990f1.png

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

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/

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

2244439bb5f4185bf7faea714c8395e3.png

可以看见,我们需要的几个信息,文章的标题和站内链接地址都可以在 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() # 关闭连接

运行结果

4d977e1d7ec39e91710f62814b9702bd.png

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

预知后事如何

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

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]

这就是我下一篇要写的

(感觉好装啊,别打我)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值