1. 程式人生 > >53. Python 爬蟲(2)

53. Python 爬蟲(2)

expires www. als aid rgb user col pri request

Cookie

Requests通過會話信息來獲取cookie信息

Cookie的五要素:

Name value domain path expires


打印cookie的五大要素

import requests
url = "http://www.hao123.com"
s = requests.session()
r = s.get(url)
print (r.cookies)
for cook in r.cookies:
    print (cook.name)
    print (cook.value)
    print (cook.domain)
    print (cook.path)
    print (cook.expires)
    print ("#" * 30)


打印結果:

<RequestsCookieJar[<Cookie BAIDUID=C425EDB0B83699C89BDA3D02B25C53BA:FG=1 for .hao123.com/>, <Cookie hz=0 for .www.hao123.com/>, <Cookie ft=1 for www.hao123.com/>, <Cookie v_pg=normal for www.hao123.com/>]>
BAIDUID
C425EDB0B83699C89BDA3D02B25C53BA:FG=1
.hao123.com
/
1548337791
##############################
hz
0
.www.hao123.com
/
None
##############################
ft
1
www.hao123.com
/
1516809599
##############################
v_pg
normal
www.hao123.com
/
None
##############################

你只要獲得了登陸頁的cookies,你就可對網站進行合理的請求和訪問了。

使用已知cookie信息,如何訪問網站:

import requests
url = 'http://httpbin.org/cookies'
r = requests.get(url, cookies={'key1': 'value1', 'key2': 'value2'})
print(r.text)

結果:

{
    "cookies": {
    "key1": "value1",
    "key2": "value2"
    }
}

請求到我的IP地址:

import requests
url = "http://2017.ip138.com/ic.asp"
s = requests.session()
r = s.get(url=url)
print (r.encoding)
r.encoding = "gbk"
print (r.text)


代理訪問:

采集時為避免被封IP,經常會使用代理。

requests也有相應的proxies屬性。

西刺代理

import requests
proxies = {
"http": "http://139.208.187.142:8118"
}
r1 = requests.get("http://2017.ip138.com/ic.asp", proxies=proxies)
r1.encoding = "gbk"
print (r1.text)

請求結果:

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title> 您的IP地址 </title>
</head>
<body style="margin:0px"><center>您的IP是:[139.208.187.142] 來自:吉林省延邊朝鮮族自治州 聯通</center></body></html>

如果代理需要賬戶和密碼,則需這樣:

proxies = {
    "http": "http://user:[email protected]:3128/",
}


requests的中文亂碼問題:

import requests
param = {"key1": "hello", "key2": "world"}
url = 'https://www.baidu.com/'
r = requests.get(url=url)
print(r.encoding)              #ISO-8859-1默認使用的是這個
r.encoding = "utf-8"
print(r.text)

這樣就可以正常顯示了


總結:

Requests給你提供的所有接口,在傳輸數據的時候,都可以以key:value的形式進行傳輸,這個也是為什麽特別使用requests的原因

如果你使用urllib,那麽你就沒有這麽幸運了,很多事情都需要你自己去處理,並不可以直接通過dict的形式進行傳輸,需要進行裝換。


53. Python 爬蟲(2)