校招SP数据存储PyMySQL

爬虫的三步走:

  • 模拟登陆
  • 数据下载
  • 数据存储

今天记录一下第三步~~

建数据库

建库建表。

要注意的问题:

  • infoid 选择自动递增–主键
  • contents的文本信息较多,应选择text

数据库链接

python中先导入pymysql

1
import pymysql

链接语句:

1
2
3
4
connection = pymysql.connect(host='localhost', user='root', password='root', db='javaweb', charset='utf8',cursorclass=pymysql.cursors.DictCursor)
cur = connection.cursor()
#USE表示选择javaweb这个表
cur.execute("USE javaweb")

注:指定编码为utf8时,没有-,别写成utf-8;

这样就可以链接到数据库,选择自己要插入数据的表javaweb。

插入数据

数据好插入,复杂的地方在于如何插入自己想要的数据,剔除掉不想要的数据。

1
[s.extract() for s in tiao_bsObj.findAll('p', attrs={'class': "windowClose"})]

这个的语句的意思是,去除指定标签下的所以内容。这里用于剔除睿思具体内容之前的编辑信息,以及就业信息网上的关闭窗口等等诸如此类不是正文的信息。

插入语句:

1
2
3
cur.execute("INSERT INTO official (job,company,location,link) VALUES (%s,%s,%s,%s)", (J, C, L, K))
cur.connection.commit()
time.sleep(3)

插入,提交。延时还是要做的,好像是之前访问数据库太快导致中断???

需要注意的是,表里列的名称要写对,以及VALUES的个数,还有后面要插入的数据与之前的一一对应。

在navicat(数据库管理工具)中的显示:

程序及数据库的更新

在00:00(即晚12点)自动更新,需要注意的是00:00没有秒,所以要加延时,保证后面的函数在1分钟后执行完,不然会重复执行;

1
2
3
4
5
while True:
time_now = time.strftime('%H%M',time.localtime(time.time()))
if int(time_now) == 0000:
xdjobs()
rs()