import MySQLdb
conn = MySQLdb.connect(host="localhost", user="root", passwd="12345678", db="test", charset="utf8")
cursor = conn.cursor()
cursor.execute("select ifnull(max(cast(id AS SIGNED)),0) num from whotrials.trialcontacts")
idNum = cursor1.fetchall()[0][0]
result_value = (str(id), trialIDArray[k], str(j+1))
cursor.execute("insert INTO whotrials.testcontacts(id, trialID, contactNo) VALUES (%s,%s,%s);", result_value)
conn.commit() #!important
cursor.close()
conn.close()
# 或者簡寫:conn = MySQLdb.connect("localhost", "root", "12345678", "test", charset="utf8")
# 想操作數據庫需要創建遊標# 我們要使用連接對象獲得一個cursor對象,接下來,我們會使用cursor提供的方法來進行工作.
# 這些方法包括兩大類:1.執行命令,2.接收返回值
## 1、cursor用來執行命令的方法:
# callproc(self, procname, args):用來執行存儲過程,接收的參數爲存儲過程名和參數列表,返回值爲受影響的行數
# execute(self, query, args):執行單條sql語句,接收的參數爲sql語句本身和使用的參數列表,返回值爲受影響的行數
# executemany(self, query, args):執行單挑sql語句,但是重複執行參數列表裏的參數,返回值爲受影響的行數
# nextset(self):移動到下一個結果集
## 2、cursor用來接收返回值的方法:
# fetchall(self):接收全部的返回結果行.
# fetchmany(self, size=None):接收size條返回結果行.如果size的值大於返回的結果行的數量,則會返回cursor.arraysize條數據.
# fetchone(self):返回一條結果行.
# scroll(self, value, mode='relative'):移動指針到某一行.如果mode='relative',則表示從當前所在行移動value條,如果mode='absolute',則表示從結果集的第一 行移動value條.
# conn.commit()方法在提交事物,在向數據庫插入一條數據時必須要有這個方法,否則數據不會被真正的插入。
#------ 爬取網站 ------#
import urllib2
response = urllib2.urlopen("http://www.baidu.com")
print response.read()
#↓
# 規範
#↓
import urllib2
request = urllib2.Request("http://www.baidu.com")
response = urllib2.urlopen(request)
print response.read()
#↓
# 設置參數-> form表單等,請求時需要data用此方法
#↓利用urllib的urlencode方法將字典編碼
#↓
import urllib
import urllib2
params = urllib.urlencode({
'currentpage': '1',
'pagesize':'20',
'username':'charlie',
'password':'123456'
})
url = "http://www.test.com"
request = urllib2.Request(url, params)
response = urllib2.urlopen(request)
print response.read()
#↓
# 設置Headers
#↓
# ① 模擬請求者身份:瀏覽器
import urllib
import urllib2
params = urllib.urlencode({
'currentpage': '1',
'pagesize':'20',
'username':'charlie',
'password':'123456'
})
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'}
url = "http://www.test.com"
request = urllib2.Request(url, params, headers)
response = urllib2.urlopen(request)
print response.read()
# ② 防盜鏈
# 服務器會識別headers中的referer是不是它自己,如果不是,有的服務器不會響應,所以我們還可以在headers中加入referer
import urllib
import urllib2
params = urllib.urlencode({
'currentpage': '1',
'pagesize':'20',
'username':'charlie',
'password':'123456'
})
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36',
'Referer':'http://www.test.com' }
}
url = "http://www.test.com"
request = urllib2.Request(url, params, headers)
response = urllib2.urlopen(request)
print response.read()
import urllib
import urllib2
params = urllib.urlencode({
'currentpage': '1',
'pagesize':'20',
'username':'charlie',
'password':'123456'
})
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36',
'Referer':'http://www.test.com' }
}
url = "http://www.test.com"
request = urllib2.Request(url, params, headers)
response = urllib2.urlopen(request)
print response.read()
# User-Agent : 有些服務器或 Proxy 會通過該值來判斷是否是瀏覽器發出的請求
# Content-Type : 在使用 REST 接口時,服務器會檢查該值,用來確定 HTTP Body 中的內容該怎樣解析。
# application/xml : 在 XML RPC,如 RESTful/SOAP 調用時使用
# application/json : 在 JSON RPC 調用時使用
# application/x-www-form-urlencoded : 瀏覽器提交 Web 表單時使用
# 在使用服務器提供的 RESTful 或 SOAP 服務時, Content-Type 設置錯誤會導致服務器拒絕服務
#↓
# 設置Timeout
#↓
import urllib2
response = urllib2.urlopen('http://www.baidu.com',data, 10)
print response.read()
# urlopen(url, data, timeout)
# 當data沒有傳時,需要寫明timeout字樣,如:response = urllib2.urlopen('http://www.baidu.com', timeout=10)
#-------- Cookie的使用---------#
# 基本的urlopen()函數不支持驗證、cookie或其他HTTP高級功能。
# 要支持這些功能,必須使用build_opener()函數來創建自己的自定義Opener對象。
# ① 獲取Cookie保存到變量
# ② 保存Cookie到文件
# ③ 從文件中獲取Cookie並訪問
# ④ 利用cookie模擬網站登錄
# 學習網站: http://cuiqingcai.com/968.html
# 手動設置cookie信息
class SimpleCookieHandler(urllib2.BaseHandler):
def http_request(self, req):
simple_cookie = '_area_=%7B%22provinceId%22%3A%22all%22%2C%22provinceName%22%3A%22%E5%85%A8%E5%9B%BD%22%2C%22cityId%22%3A%22all%22%2C%22cityName%22%3A%22%E4%B8%8D%E9%99%90%22%7D'
if not req.has_header('Cookie'):
req.add_unredirected_header('Cookie', simple_cookie)
else:
cookie = req.get_header('Cookie')
req.add_unredirected_header('Cookie', simple_cookie + '; ' + cookie)
return req
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(), SimpleCookieHandler())
req = urllib2.Request("http://www.guahao.com/search/hospital?pageNo="+str(k))
html = opener.open(req).read()
# ajax動態獲取數據
# 獲取json格式數據
import urllib2
import json
url = 'http://yyk.39.net/user/getUserLikesCount.json?hosHexId=4cef5'
request = urllib2.Request(url)
request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36')
request.add_header('Host', 'yyk.39.net')
request.add_header('Accept', '*/*')
response = urllib2.urlopen(request, timeout=20)
data = json.load(response)
print (data['objCount'])