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

Python 爬虫 专栏收录该内容
7 篇文章 0 订阅

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


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

创建数据库

我们使用的是 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/

还是先打开网页,查看源码进行分析
网页源码1
可以看见,我们需要的几个信息,文章的标题和站内链接地址都可以在 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 <module>
    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]

这就是我下一篇要写的
(感觉好装啊,别打我)

  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

<p style="font-size:16px;color:#666666;"> <img src="https://img-bss.csdn.net/202001311426171105.png" alt="" /> </p> <p style="font-size:16px;color:#666666;"> <strong><span style="font-size:20px;">课程目标</span></strong> </p> <p style="font-size:16px;color:#666666;"> 《从零开始学Scrapy网络爬虫》从零开始,循序渐进地介绍了目前流行网络爬虫框架Scrapy。即使你没有任何编程基础,学习起来也不会有压力,因为我们有针对性地介绍了Python编程技术。另外,《从零开始学Scrapy网络爬虫》在讲解过程中以案例为导向,通过对案例不断迭代、优化,让读者加深对知识理解,并通过14个项目案例,提高学习者解决实际问题能力。 </p> <p style="font-size:16px;color:#666666;"> <br /> </p> <p style="font-size:16px;color:#666666;"> <strong><span style="font-size:20px;">适合对象</span></strong> </p> <p style="font-size:16px;color:#666666;"> 爬虫初学者、爬虫爱好者、高校相关专业学生、数据爬虫工程师。 </p> <p style="font-size:16px;color:#666666;"> <br /> </p> <p style="font-size:16px;color:#666666;"> <span style="font-size:20px;"><strong>课程介绍</strong></span> </p> <p style="font-size:16px;color:#666666;"> 《从零开始学Scrapy网络爬虫》共13章。其中,第1~4章为基础篇,介绍了Python基础、网络爬虫基础、Scrapy框架及基本爬虫功能。第5~10章为进阶篇,介绍了如何将爬虫数据存储于MySQL、MongoDB和Redis数据库中;如何实现异步AJAX数据爬取;如何使用Selenium和Splash实现动态网站爬取;如何实现模拟登录功能;如何突破反爬虫技术,以及如何实现文件和图片下载。第11~13章为高级篇,介绍了使用Scrapy-Redis实现分布式爬虫;使用Scrapyd和Docker部署分布式爬虫;使用Gerapy管理分布式爬虫,并实现了一个抢票软件综合项目。 </p> <p style="font-size:16px;color:#666666;"> <span style="color:#FF0000;">      由于目标网站可能会对页面进行改版或者升级反爬虫措施,如果发现视频中方法无法成功爬取数据,敬请按照页面实际情况修改XPath路径表达式。视频教程主要提供理论、方法支撑。我们也会在第一时间更新源代码,谢谢!</span> </p> <p style="font-size:16px;color:#666666;"> <img src="https://img-bss.csdn.net/202001311426306665.png" alt="" /> </p> <p style="font-size:16px;color:#666666;"> <strong><span style="font-size:20px;">课程特色</span></strong> </p> <p style="font-size:16px;"> <img src="https://img-bss.csdn.net/202001311426415123.png" alt="" /> </p> <div> <br /> </div>
相关推荐
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值