常流程只需要打開下載並按照常規方法安裝mssql包即可在程序中import pymssql,不過安裝mssql確實有些小麻煩。
從開始安裝就開始出現了各種異常錯誤
首先出現sqlfront.h文件找不多,查了很多資料也沒有看明白是什么個原因。。
最終在這里仔細閱讀了一下文檔,開始一步步嘗試往下解決
大致的意思是講其實pymssql是依賴於一個叫FreeTDS的東西,查了一下它是一個C語言鏈接sqlserve的公共開源庫。
在windows下安裝接下來參照這篇文檔說明開始准備下載freetds-v0.95.95-win-x86-vs2008.zip
當然這里可以根據自己的Python版本去下載對應的包,下載地址
下載完后發現里邊的文件目錄大致是這樣的
打開include一看,原來我需要的文件都在這個文件里,然后就把這個的所有文件bin+include+lib+lib-nossl全部copy到python的安裝目錄再試一下沒有原來的錯誤了
新的問題又出現了,無法打開輸入文件“db-lib.lib”
這里就比較蛋疼了,單仔細閱讀以下,翻到文章結尾的安裝包
既然用pymssql-2.1.3.tar.gz不能正確安裝,就換一種方式,於是下載了2中的whl文件
下載完后將 pymssql-2.1.3-cp27-cp27m-win_amd64.whl放在安裝文件目錄中,運行CMD到指定文件目錄
這時出現以下錯誤:
Requirement already satisfied: pymssql==2.1.3 from file:///C:/Python/pymssql-2.1
.3-cp27-cp27m-win_amd64.whl in c:\python2.7.11\lib\site-packages
錯誤提示很明顯示因為之前安裝時已經將文件放在了c:\python2.7.11\lib\site-packages文件中,因此在site-packages中刪掉pymssql的安裝,再試一次順利完成!
最后為了驗證以下,在文件中鏈接當前數據庫看一下是否可以連通。。
#coding:utf-8 import urllib2 import os import sys reload(sys) sys.setdefaultencoding("utf-8") import urllib import string from bs4 import BeautifulSoup #導入解析html源碼模塊 import pymssql #導入mssql數據庫連接包 conn=pymssql.connect(host='127.0.0.1',user='testdb',password='testdb@123',database='IM_CRM') cur=conn.cursor() cur.execute('select top 5 * from [dbo].[crm_Cart]') #如果update/delete/insert記得要conn.commit() #否則數據庫事務無法提交 print (cur.fetchall()) cur.close() conn.close()
打印結果看一下
對比以下數據庫
仔細觀察沒有問題,用這種方式一樣可以鏈接數據庫,到這里就開始后面的詳細業務編寫吧。
最后再附一個抓取的py文件吧

#coding:utf-8 import urllib2 import os import sys reload(sys) sys.setdefaultencoding("utf-8") import time import datetime import urllib import string from bs4 import BeautifulSoup #導入解析html源碼模塊 import pymssql #導入mssql數據庫連接包 print "開始時間:"+datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') #抓取頁面邏輯 for num in range(101,200+1):#頁數控制 url = "http://xxx/Suppliers.asp?page="+str(num)+"&hdivision=" #循環ip地址 header = { "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0", "Referer":"http://xxx/suppliers.asp" } req = urllib2.Request(url,data=None,headers=header) req.encding="utf-8" ope = urllib2.urlopen(req) #請求創建完成 soup = BeautifulSoup(ope.read(), 'html.parser') COMCount = 0 tableTrList=soup.select("table tr") tableTrList.remove(tableTrList[0]) for trtag in tableTrList: COMCount+=1 companyname= trtag.contents[1].a.string # 公司名稱 area=trtag.contents[3].string # 地區 tel=trtag.contents[5].string # 電話 web = trtag.contents[7].a.string # 網址 prolisturl=trtag.contents[11].a['href']#產品列表鏈接 companyID=prolisturl[20:] #獲取公司對應ID print str(COMCount)+'獲取產品列表鏈接:http://www.xxx/'+prolisturl if companyname is None: companyname="" if area is None: area = "" if tel is None: tel = "" if web is None: web = "" print "公司名稱:"+companyname print "地區:" + area print "電話:" + tel print "網址:" + web print str(COMCount)+"公司信息開始寫入:"+"INSERT INTO [dbo].[Company](BioID,ComName,Area,Tel,WebSite,InDate) VALUES ('"+companyID+"','"+companyname+"','"+area+"','"+tel+"','"+web+"','"+datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')+"') " #寫入企業信息起 conn = pymssql.connect(host='GAOMS-PC\SQLEXPRESS', user='test', password='abc123!@#', database='BIO-EQUI') cur = conn.cursor() cur.execute("INSERT INTO [dbo].[Company](BioID,ComName,Area,Tel,WebSite,InDate) VALUES ('"+companyID+"','"+companyname+"','"+area+"','"+tel+"','"+web+"','"+datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')+"') ") conn.commit() cur.close() conn.close() #寫入企業信息止 print str(COMCount)+"公司信息寫入完成" #驗證公司下是否有產品 urlpropage="http://xxx/otherproduct.asp?id="+companyID #urlpropage="http://xxx/otherproduct.asp?id=64356"#測試某一產品地址排查異常使用 headerpropage = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0", "Referer": "" + url } reqpropage = urllib2.Request(urlpropage, data=None, headers=headerpropage) reqpropage.encding = "utf-8" opepropage = urllib2.urlopen(urlpropage) souppropage = BeautifulSoup(opepropage.read(), 'html.parser') tableTrPageCount = souppropage.select("table tr") ProPageCount='0' if (len(tableTrPageCount) > 0): try: ProPageCount=str(souppropage.select("form p")[0]) dijiye=ProPageCount[ProPageCount.index("第"):].replace("\r\n"," ").replace("</p>"," ").strip() ProPageCount=dijiye[dijiye.index("/")+1:].replace("頁"," ").strip() print "產品"+str(COMCount)+"下包含"+ProPageCount+"頁產品__________________________________" PROCount = 0 # 循環獲取產品列表內容 if (int(ProPageCount)>2): ProPageCount=2 #如果產品頁數過多只去前2頁 for numpro in range(1, int(ProPageCount)+1): urlprolist = "http://www.bio-equip.com/" + str(prolisturl) + "&page=" + str(numpro) + "&hdivision=" # 循環鏈接 headerprolist = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0", "Referer": "" + url } reqprolist = urllib2.Request(urlprolist, data=None, headers=headerprolist) reqprolist.encding = "utf-8" opeprolist = urllib2.urlopen(reqprolist) soupprolist = BeautifulSoup(opeprolist.read(), 'html.parser') tableTrListCount = soupprolist.select("table tr") #print tableTrListCount 打印獲取的表格數據 tableTrListCount.remove(tableTrListCount[0]) for trtagPro in tableTrListCount: PROCount += 1 proname = trtagPro.contents[0].a.string # 產品名稱 proPlace = trtagPro.contents[2].string # 產品產地 ProType = trtagPro.contents[4].string # 產品型號 if proPlace is None: proPlace = "" if area is None: area = "" if ProType is None: ProType = "" print "產品名稱:" + proPlace print "產品產地:" + area print "產品型號:" + ProType print "獲取" + str(COMCount) + "下產品:" + str(PROCount) + proname + "第" + str(numpro) + "頁" print str(COMCount)+"_"+str(PROCount)+"產品寫入開始"+"INSERT INTO [dbo].[Product](ComID,ProName,ProPlace,ProType) VALUES ('" + companyID + "','" + proname + "','" + proPlace + "','" + ProType + "') " # 寫入企業產品信息起 connpro = pymssql.connect(host='GAOMS-PC\SQLEXPRESS', user='test', password='abc123!@#',database='BIO-EQUI') curpro = connpro.cursor() curpro.execute("INSERT INTO [dbo].[Product](ComID,ProName,ProPlace,ProType,InDate) VALUES ('" + companyID + "','" + proname + "','" + proPlace + "','" + ProType + "','"+datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')+"') ") connpro.commit() curpro.close() connpro.close() # 寫入企業產品信息止 except Exception: pass print "結束時間:" + time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))