Python整站式爬虫并存储数据库练习

来源:互联网 发布:python raw input 编辑:程序博客网 时间:2024/06/03 20:47

第一篇博客,那开始就先说点别的吧,本人是一只大三狗,大一大二玩了两年的单片机,大二暑假参加了电赛,放松了一阵子之后开始怀疑人生,迷茫了数日之后决定转行学软件,之前玩openmv的时候接触到了python,觉得很有趣,所以就将决定将python作为我转行软件的‘入门语言’,开学已经一个月又19天了,我花了太多时间在怀疑人生上面,真是虚度啊,现在想来自己真是个笨蛋,想好了就不要犹豫,just do it,那些个什么安全感、归属感、快乐幸福什么的都可以在努力学习的过程当中得到,真正开始学习python可能真的是从这个周末开始的,之前那都是飘着的,所以这次开始的这个小项目很多次崩溃生无可恋到吃起了板栗,寝室传来一阵阵咆哮……对,是我被自己蠢哭了,好了,接下来就来说说这个小项目吧

我的学习和操作步骤是:数据库操作 ----- 正则表达式 ----- 将爬取到的数据存储到数据库

数据库操作:

步骤:1、导入MySQLdb模块:

这是python2进行数据库操作的基本模块,在这里要特别注意一个事情,我在这里折腾了很久,我的python版本是64位的但是我在网上下载安装的MySQLdb版本是32位的所以编译器报错了,在这里安利一个超级赞的网站,里面有很多python包,废话不多说,上链接:http://www.lfd.uci.edu/~gohlke/pythonlibs/    就在里面,吼吼,自己找去吧,找不到就搜索一下。下载完了以后就要开始安装了,我是用的anoconda 而且电脑里面还下了2和3两个版本,所以我是直接在anoconda2里面的anoconda  prompt里面操作的,先将下好的MySQL_python-1.2.5-cp27-none-win_amd64.whl拷贝到 anoconda2的 scripts 目录下,然后使用命令提示符到达文件目录下,使用pip对他进行安装,然后就成功啦,好好看,我可是折腾了一个晚上加一个上午才折腾出来的,真是可歌可泣……具体操作如下图:

在编译器里面验证是否安装成功这样就证明安装成功啦~

当然,数据库操作要先有自己的数据库(我一开始没有装……),在oracle官网上有mysql的包下载,附上mysql详细的安装和配置步骤:https://jingyan.baidu.com/article/3052f5a1dad91197f21f8610.html,还有一款很好的处理数据库的工具:Navicat for MySQL,关于他的安装和使用网上教程一大把,在这里就不说了。

2、创建数据库连接:

Like this:

    conn = MySQLdb.connect(        host='localhost',        port=3306,        user='root',        passwd='1549331363@qq.com',        charset='utf8',        db='demo1'    )

就是把你自己的数据库信息写上,详细信息可以在Navicat forMySQL进行查看,在这里,一定要特别注意端口port,一定要是整数,不能加‘’东西啊,我找了半个多小时的错误,就他给我整的。

为了方便,我们可以在.py的并列文件目录下创建一个config.ini配置文件,配置文件里面就写数据库的连接信息:

[mysql]host = localhostuser = rootpasswd = 123456port = 3306db = demo1charset = utf8

然后在.py文件下对配置文件进行读取,如下:

import configparserconfig = configparser.ConfigParser()config.read('config.ini')host = config.get('mysql', 'host')user = config.get('mysql', 'user')passwd = config.get('mysql', 'passwd')db = config.get('mysql', 'db')port = config.getint('mysql', 'port')charset = config.get('mysql', 'charset')

3、创建游标:

cursor = conn.cursor()

一句话就行了。

4、通过游标执行SQL语句并提交:

SQL_insert1_demo1 = "insert into lol(topic,author_name, vote_num) values(%s, %s, %s) "data = (topic, author_name, vote_num)cursor.execute(SQL_insert1_demo, data)conn.commit()

在这里使用预定义的方法可以有效的解决SQL注入问题。

如果data里面的内容有几组的话可以使用cursor.executemany(SQL_insert1_demo,data)。

在这里要特别注意,插入的那些数据操作只能是一列,如果超过一列就会报错,所以如果要求同时插入的数据比较多就把变量命名的短一点……这是我目前的解决办法,虽然有点蠢的但是有效。

5、关闭连接以及游标

conn.close()cursor.close()

正则表达式:

这个太太太复杂涉及到的内容太多了,我目前还没搞透彻,只会简单的使用.*?,哈哈哈,感觉目前他可以帮我搞定一切爬虫匹配的问题,因为现在我接触的很窄,吼吼,慢慢来,有一篇关于正则表达式的很好的博文分享给大家:http://m.blog.csdn.net/carolzhang8406/article/details/6335072

讲讲我总结的几句精辟的话,ahiahiahai:第一句:先自己在网页上数数有多少条,然后找一个你觉得唯一性比较强的关键字,搜索一下,如果出现的次数和你之前数的一致,那就他了,选最简单的又包括他的那句话进行匹配就成了。

第二句:在正则匹配里面,如果有一段很奇葩的代码,夹在了你关键字中间了,有些你要提取的内容里面又包含了这些奇葩的东西,有些又没有包含,那就一个.*?带过去吧,啊哈哈哈

将爬取到的内容存储到数据库,以上两个会了,那这个简直就是so easy啊,我在爬知乎的一个帖子 https://www.zhihu.com/topic/19605346/hot

大佬要我爬这些东西:还只是爬

还没有爬完,哇,这周末过的可真是爽啊,觉得自己特别厉害啊,我经常一遇到难题就去问大佬们,这个周末也是神奇啊,大佬们都不见了,只能自己搞自己解决问题,虽然崩溃爆炸神经病了无数次,但是问题解决了还是很开心的,还有啊,拜托自己每次要大改的时候先保存备份一下,虽然说pycharm里面右键有local history 再也不用担心代码被误删了,but but !不是什么都给你local history的,昨天mysql上误删了一个表,花了半个多小时才复原……真是有劳心费力还浪费时间……

今天又看了一篇文章:我为什么放弃了 Python ,选择了 Go? - CSDN博客http://blog.csdn.net/csdnnews/article/details/78293757   吼吼 发现要学习的东西琳琅满目令人眼花缭乱,里面还有好多高级的东西我听都没听过,但总而言之现在觉得python挺好玩的,所以坚持下去吧,不要再三心二意了,有句话说得好啊,从现在开始好好努力吧,最坏的结果不过是大器晚成而已~得意


原创粉丝点击