1. 程式人生 > >python爬取的小說存入mysql資料庫

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() # 關閉資料庫連線
程式碼爬取內容的編碼格式一定要與資料庫編碼格式相同