首先,毕竟站长已经开源了,我还是倒腾着写了几行代码,代码仅供学习使用,望谅解。
如果你只是纯粹需要数据的,请查看站长的开源项目。
- 创建表
数据库为MySQL,首先创建我们要存储毒鸡汤的表,表结构如下:
CREATE TABLE `spider_dujitang` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`type` varchar(255) NOT NULL COMMENT '类型',
`type_text` varchar(255) NOT NULL COMMENT '值',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6044 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
其中,id是主见,type代表类型,后边如果要爬取正能量、诗词等句子,只需要改变类型即可。
-
获取数据
import requests
from lxml import etree
import conndb
import time根据HTML,获取爬取字段,并拼成SQL
def getSQL():
url = "http://www.nows.fun/" r = requests.get(url).text # 获取网页的HTML html = etree.HTML(r) html_data = html.xpath('//*[@id="sentence"]/text()')[0] # 获取爬取字段 if selectText(html_data) == 1: # 判断当前字段数据库是否已存在,调用查重方法 return None sql = "INSERT INTO spider_tgriji(type,type_text) VALUES ('%s','%s')"% ("毒鸡汤",html_data) # 拼写插入语句,并返回 return sql
对spider_dujitang表进行查重,防止数据重复插入
def selectText(html_data):
seSQL = "select type_text from spider_tgriji" sList = conndb.exe_query(cur, seSQL) # 调用查询方法 for s in sList: # 遍历查询出来的所有值 typeTextOld = s[0] if typeTextOld == html_data: print("==========遇到重复数据了======="+html_data) time.sleep(2) return 1 return 0
主方法
if name == '__main__':
i = 1 while i > 0: conn = conndb.conn_db()[0] cur = conndb.conn_db()[1] sql = getSQL() if sql is None: # 判断当前SQL是否为None,如果是,则重新循环。 continue conndb.exe_update(cur, sql) conndb.exe_commit(cur) conndb.conn_close(conn, cur) print("数据条数:"+str(i)+",两秒后继续") time.sleep(2) i+= 1
- 配置数据库
根据要求,配置自己的数据库信息,
import pymysql
def conn_db(): # 连接数据库函数
conn = pymysql.connect(
host='数据库地址',
port='端口',
user='数据库账户',
passwd='数据库密码',
db='数据库名称',
charset='utf8')
cur = conn.cursor()
return conn, cur
def exe_update(cur, sql): # 更新语句,可执行update,insert语句
sta = cur.execute(sql)
return sta
def exe_delete(cur, ids): # 删除语句,可批量删除
for eachID in ids.split(' '):
sta = cur.execute('delete from cms where id =%d' % int(eachID))
return sta
def exe_query(cur, sql): # 查询语句
cur.execute(sql)
return cur
def exe_commit(cur):
cur.connection.commit() # 执行commit操作,插入语句才能生效
def conn_close(conn, cur): # 关闭所有连接
cur.close()
conn.close()
如若转载,请注明出处:https://www.ozabc.com/jianzhan/46586.html