目錄
1、headers簡要解釋
2、模擬請求數據
3、數據清洗
4、寫入數據庫
1、headers簡要解釋
1. Host (主機和端口號)
Host:對應網址URL中的Web名稱和端口號,用于指定被請求資源的Internet主機和端口號,通常屬于URL的一部分。
2. Connection:keep-alive
Connection:表示客戶端與服務連接類型
Client 發起一個包含 Connection:keep-alive 的請求,HTTP/1.1使用 keep-alive 為默認值。
Server收到請求后:
如果 Server 支持 keep-alive,回復一個包含 Connection:keep-alive 的響應,不關閉連接;
如果 Server 不支持 keep-alive,回復一個包含 Connection:close 的響應,關閉連接。
如果client收到包含 Connection:keep-alive 的響應,向同一個連接發送下一個請求,直到一方主動關閉連接。
keep-alive在很多情況下能夠重用連接,減少資源消耗,縮短響應時間,比如當瀏覽器需要多個文件時(比如一個HTML文件和相關的圖形文件),不需要每次都去請求建立連接。
3. Accept-Encoding(文件編解碼格式)
Accept-Encoding:指出瀏覽器可以接受的編碼方式。編碼方式不同于文件格式,它是為了壓縮文件并加速文件傳遞速度。瀏覽器在接收到Web響應之后先解碼,然后再檢查文件格式,許多情形下這可以減少大量的下載時間。
舉例:Accept-Encoding:gzip;q=1.0, identity; q=0.5, *;q=0
如果有多個Encoding同時匹配, 按照q值順序排列,本例中按順序支持 gzip, identity壓縮編碼,支持gzip的瀏覽器會返回經過gzip編碼的HTML頁面。 如果請求消息中沒有設置這個域服務器假定客戶端對各種內容編碼都可以接受。
4. Content-Type:text/html;charset=UTF-8
告訴客戶端,資源文件的類型,還有字符編碼,客戶端通過utf-8對資源進行解碼,然后對資源進行html解析。通常我們會看到有些網站是亂碼的,往往就是服務器端沒有返回正確的編碼。
5. User-Agent (瀏覽器名稱)
6. Accept (傳輸文件類型)
Accept:指瀏覽器或其他客戶端可以接受的MIME(Multipurpose Internet Mail Extensions(多用途互聯網郵件擴展))文件類型,服務器可以根據它判斷并返回適當的文件格式。
舉例:
Accept: */*:表示什么都可以接收。
Accept:image/gif:表明客戶端希望接受GIF圖像格式的資源;
Accept:text/html:表明客戶端希望接受html文本。
Accept: text/html, application/xhtml+xml;q=0.9, image/*;q=0.8:表示瀏覽器支持的 MIME 類型分別是 html文本、xhtml和xml文檔、所有的圖像格式資源。
q是權重系數,范圍 0 =< q <= 1,q 值越大,請求越傾向于獲得其“;”之前的類型表示的內容。若沒有指定q值,則默認為1,按從左到右排序順序;若被賦值為0,則用于表示瀏覽器不接受此內容類型。
Text:用于標準化地表示的文本信息,文本消息可以是多種字符集和或者多種格式的;Application:用于傳輸應用程序數據或者二進制數據。詳細請點擊
2、模擬請求數據
import urllib.request
url = 'http://********/Country_IN/Russia_IN/SearchRUS.aspx'
headers={
'Host': '********',
'Connection': 'keep-alive',
#'Content-Length': '399',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Origin': '********',
'X-Requested-With': 'XMLHttpRequest',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Referer': '********',
#'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cookie': '********'
}
formdata = {
? ? ? ? 'action': 'GetList',
? ? ? ? 'TmpID': '********',
? ? ? ? 'Starttime': '2018-06',
? ? ? ? 'Endtime': '2018-06',
? ? ? ? 'page': '1',
? ? ? ? 'rows': '2'? ? }
data = urllib.parse.urlencode(formdata).encode("utf-8")
request = urllib.request.Request(url, data=data, headers=headers)
response = urllib.request.urlopen(request).read().decode()
print(response)
3、數據清洗
response_dict = eval(response)? #字符串轉為字典
constant = response_dict['rows']
for i in range(len(constant)):
? ? print(constant[i])
? ? print('-----------------------------\n')
4、寫入數據庫
import pymssql
server = "********"
user = "********"
password = "********"
conn = pymssql.connect(server, user, password, database="ODS")
cursor = conn.cursor()
cursor.execute("SELECT ******** FROM?********?")
client_list = []
for i in cursor:
? ? print(i)
sql = "insert into customs.****(shipping_date) values(\'%s\')" % (constant[i]['CUSTOMS_REGISTRATION_DATE'].replace("'", "''"))
cursor.execute(sql)
conn.commit()