python爬取的小说存入mysql数据库

 
  
 
  

特别需要注意的是需要存的代码的编码格式一定要与库的编码格式相同。

其实还是相当于有一个类似模板的内容:

importMySQLdb

conn = MySQLdb.connect(host='127.0.0.1', db='msl', user='root', passwd='zgy1314', charset='utf-8') cur = conn.cursor()  # 通过获取到的conn数据库的cursor方法创建游标

cur.execute() conn.commit()  # 提交数据进数据库 conn.close()  # 关闭数据库连接

Host为主机的ip地址,db为自己的数据库的名字,user为使用者,passwd是自己设置的密码,charset为库中表格的编码方式。

 

for j in url1:     m_2,m_3 = getContent(j)     hot = "insert into xiaoshuo(title,content) values('%s','%s')" % (m_2, m_3)

这部分代码就是传值的过程,利用了一个多类型传值将小说的内容和标题传入数据库的表格中。一个固定的写法:

insert into 表名(字段名1,字段名2)values(值a1,值b1), (值a2,值b2),

首先就是需要确保与数据库已经建立连接,还有就是一些编码一致问题比较难处理些。

 

for x in imglist:     title = re.search(p,x, re.S).group(1)     hot = "insert into user(id,url) values(%d,'%s')" % (k,title)

涉及到一个group(1)的内容。

正则表达式中的三组括号把匹配结果分成三组

 group() 同group(0)就是匹配正则表达式整体结果group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。

有一个解决了很久的问题:文字存入mysql数据库时出现Incorrect string value错误

解决方法:如果觉得其他位置都没有问题,那一定是存在编码问题。

①弄清自己的代码爬取结果是什么编码,可以使用print type() 语句查询。

②保证自己需要存入的内容编码方式与数据库设置的编码方式相同。

③如果不相同的话,可以新建一个数据库或者更改一下数据库的设置

 

# -*- coding: utf-8 -*- import re import urllib2 import sys import MySQLdb from bs4 import BeautifulSoup reload(sys) sys.setdefaultencoding('utf-8') conn = MySQLdb.connect(host='127.0.0.1', db='msl', user='root', passwd='zgy1314', charset='utf8') cur = conn.cursor() # 通过获取到的conn数据库的cursor方法创建游标 def getHtml(url): user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = {'User-Agent': user_agent} request = urllib2.Request(url=url, headers=headers) response = urllib2.urlopen(request) content1 = response.read().decode('utf-8') soup = BeautifulSoup(content1,"html.parser") ls1 = [] list1 = [] for tag1 in soup.find('div',class_="article_container").find_all('a'): m_1 = tag1.get('href') url1 = str(m_1) list1.append(url1) return list1 def getContent(url1): request = urllib2.Request(url=url1) response = urllib2.urlopen(request) content1 = response.read().decode("gb18030") soup = BeautifulSoup(content1, "html.parser") # print soup for tag2 in soup.find_all('h1',class_="articleH1"): m_2 = tag2.get_text() print m_2 for tag3 in soup.find_all("p"): m_3 = tag3.get_text() print m_3 return m_2,m_3 url = 'http://www.360doc.com/content/17/0217/14/40345358_629710670.shtml' url1 = getHtml(url) for j in url1: m_2,m_3 = getContent(j) hot = "insert into xiaoshuo(title,content) values('%s','%s')" % (m_2, m_3) cur.execute(hot) conn.commit() # 提交数据进数据库 conn.close() # 关闭数据库连接
代码爬取内容的编码格式一定要与数据库编码格式相同

你可能感兴趣的:(python,数据库,mysql,utf-8,爬虫)