Python爬虫实战(2)——抓取知乎热门帖并存储到Mysql数据库

野性酷女 2023-10-17 09:16 145阅读 0赞

首先了解一些基础性的理解知识:

python基础知识——正则表达式,_MISAYAONE的博客-CSDN博客 正则表达式

Python基础知识——爬虫入门_MISAYAONE的博客-CSDN博客_python基础和网络爬虫 爬虫入门

http://blog.csdn.net/misayaaaaa/article/details/53079953mysql 数据库相关

样例代码(有详细注释):

  1. #coding=utf-8
  2. import urllib2
  3. import re
  4. import MySQLdb
  5. conn = MySQLdb.connect(host='localhost', db='test', user='root', passwd='root1',charset='utf8')
  6. #connect()方法用于创建与数据库的连接,里面可以指定参数,这一步只是连接到了数据库,操作数据库还需要下面的游标
  7. cur = conn.cursor()#通过获取到的conn数据库的cursor方法创建游标
  8. url = 'http://www.zhihu.com/topic/19607535/top-answers'
  9. netthings= urllib2.urlopen(url).read()
  10. print netthings #使用urllib2模块爬虫抓取了特定网页
  11. list = re.findall('<a class="question_link"(.*?)/a>', netthings, re.S)
  12. #re模块的findall方法可以以列表的形式返回匹配的字符串,re.S表示多行匹配
  13. print list #使用re模块的正则表达式,将目标字符串存入list
  14. #正则表达式的匹配也是一个难点
  15. p = '>(.*?)<'
  16. for x in list:
  17. title = re.search(p, x, re.S).group(1)
  18. hot = "insert into test(title) values('%s')" % title
  19. print hot
  20. cur.execute(hot)
  21. conn.commit() #提交数据进数据库
  22. conn.close() #关闭数据库连接

cmd中查看表单的结果:

Center

在这其中遇到了很多的问题,一一分享出来:

1、Mysql创建、查看、删除对应表单。

创建:create table命令用来创建数据表。

create table命令格式:create table <表名> (<字段名1> <类型1> [,..<字段名n> <类型n>]);

例如,建立一个名为MyClass的表:

















































字段名 数字类型 数据宽度 是否为空 是否主键 自动增加 默认值
id int 4 primary key auto_increment
name char 20
sex int 4 0
degree double 16

在这题中,创建了一个test表:create table test(title char(200)); (注意需要在use database之后)

查看表单内容 select * from test; 查询test数据表中的所有数据

删除表 DROP TABLE test; 将表单test删除

2、

  1. # -*- coding: utf-8 -*-
  2. #mysqldb
  3. import time, MySQLdb
  4. #连接
  5. conn=MySQLdb.connect(host="localhost",user="root",passwd="root",db="test",charset="utf8")
  6. cursor = conn.cursor()
  7. #删除表
  8. sql = "drop table if exists user"
  9. cursor.execute(sql)
  10. #创建
  11. sql = "create table if not exists user(name varchar(128) primary key, created int(10))"
  12. cursor.execute(sql)
  13. #写入
  14. sql = "insert into user(name,created) values(%s,%s)"
  15. param = ("aaa",int(time.time()))
  16. n = cursor.execute(sql,param)
  17. print 'insert',n
  18. #写入多行
  19. sql = "insert into user(name,created) values(%s,%s)"
  20. param = (("bbb",int(time.time())), ("ccc",33), ("ddd",44) )
  21. n = cursor.executemany(sql,param)
  22. print 'insertmany',n
  23. #更新
  24. sql = "update user set name=%s where name='aaa'"
  25. param = ("zzz")
  26. n = cursor.execute(sql,param)
  27. print 'update',n
  28. #查询
  29. n = cursor.execute("select * from user")
  30. for row in cursor.fetchall():
  31. print row
  32. for r in row:
  33. print r
  34. #删除
  35. sql = "delete from user where name=%s"
  36. param =("bbb")
  37. n = cursor.execute(sql,param)
  38. print 'delete',n
  39. #查询
  40. n = cursor.execute("select * from user")
  41. print cursor.fetchall()
  42. cursor.close()
  43. #提交
  44. conn.commit()
  45. #关闭
  46. conn.close()

一个简单的样例,学习python对mysql的操作。

3、运行出错: ERROR 1045 (28000): Access denied for user ‘mysql’@’localhost’ (using password: NO)

这个问题的话肯定是你把下面的给弄错了,也就是用户和密码,google一下怎么改密码就好了。

  1. user="root",passwd="root"

4、python连接mysql数据库,出现:(2003, “Can’t connect to MySQL server on ‘localhost’ (10061)”

  1. conn=MySQLdb.connect(host="localhost",user="root",passwd="root",db="test",charset="utf8")

将localhost改为127.0.0.1。

发表评论

表情:
评论列表 (有 0 条评论,145人围观)

还没有评论,来说两句吧...

相关阅读

    相关 scrapy抓取全部用户信息

    先说一下核心思想,从一个大v开始,抓取他的关注和粉丝,然后再遍历这两个群体,再抓关注和粉丝,层层抓下去,就会覆盖知乎的所有用户。 好,让我们先分析分析知乎这个网站,提示一下知