python爬蟲學習筆記

#------ 連接數據庫 ------#
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'])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章