日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

更多Requests的小技巧以及总结

發布時間:2023/12/1 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 更多Requests的小技巧以及总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對于requests的爬蟲庫,我們已經學到了尾聲。

我們在這兒可以挖掘出更多的requests的使用小技巧。

一.cookie對象與字典的轉換

在爬取目標cookie的時候,我們可以將cookie信息進行簡化處理。

現在做一個簡單的代碼驗證看看,使用百度的cookies:

import requests response=requests.get("http://www.baidu.com")? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??#獲取百度的響應 response_cookie=response.cookies? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#獲取百度的cookies print(response_cookie) response_dict=requests.utils.dict_from_cookiejar(response_cookie)? ? ? #將百度獲取的cookie轉換為字典 print(response_dict) 輸出結果:

RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
{'BDORZ': '27315'}

那么,反過來切換呢?

response_cookie_1=requests.utils.cookiejar_from_dict=(response_dict)

print(response_cookie_1)

輸出結果:

<RequestsCookieJar[<Cookie BDORZ=27315 for />]>

我們可以分析此次的輸出結果可以知道,重新翻譯過來url信息丟失了,具有信息保護性。

?

二.url編碼的解碼處理

我們在做爬蟲的過程中,是經常會遇到我們輸入的url被解碼成另外一種數據形式。

例如:http://tieba.baidu.com/f?kw=無限法則

我們在對這個網址進行爬蟲處理之后,在輸出結果顯示的時候,已經編碼成了這個形式:

http%3a%2f%2ftieba.baidu.com%2ff%3fkw%3d%e6%97%a0%e9%99%90%e6%b3%95%e5%88%99

翻譯的時候,我們還得上網去翻譯過來。那么requests正好也提供了這個功能,能夠完成翻譯,避免了你去網上翻譯的過程。

現在就放一段代碼看看:

?

import requests url_1="http%3a%2f%2ftieba.baidu.com%2ff%3fkw%3d%e6%97%a0%e9%99%90%e6%b3%95%e5%88%99" url_2=requests.utils.unquote(url_1) print(url_2)

?

輸出結果:

http://tieba.baidu.com/f?kw=無限法則

反過來也是一樣的:

url_3=requests.utils.quote(url_2)

print(url_3)

輸出結果:

http%3A//tieba.baidu.com/f%3Fkw%3D%E6%97%A0%E9%99%90%E6%B3%95%E5%88%99

所以我們總結起來,就是這樣:

quote:對URL編碼;? unquote:對解碼的URL進行解碼

?

三.請求SSL證書驗證解決

我們在做爬蟲的時候,會經常遇到網站請求SSL證書的驗證,這將是爬蟲遇到的家常便飯。

那么我們如何跳過這個SSL證書呢,在get參數中加入一個參數即可。

假設我們訪問百度,遇到了SSL證書問題,我們要做的就是:

response=requests.get("http://www.baidu.com",verify=False)

?

?

以上就是三個requests的使用小技巧,當然,requests庫是強大的,能做的不只是這些。

關于其他的用法,我們在今后使用的時候會慢慢探索出來,具有一定的自學能力是最好的。

回顧一下我們學習requests的過程,我們可以做一個總結:

①填寫正確的url形式,是有協議,IP地址,端口和路徑等組成的,其中協議不能忘了寫。

正確的url形式為"http://www.baidu.com"

?

②學會對自己的偽裝,準備一堆User-Agent,一堆IP和一堆cookie。

選擇代理IP時,選端口跟自己網絡端口符合的。

?

③兩種請求方式的公式和參數有如下:

requests.get(url,headers=?(存儲User-Agent參數),params=?(存儲wd訪問參數),proxies=?(存儲IP地址參數),cookies=?(存儲cookies參數),verify=?(解決SSL證書驗證))

requests.post(url,headers=?(存儲User-Agent參數),data=?(存儲form表單參數),proxies=?(存儲IP地址參數),cookies=?(存儲cookies參數),verify=?(解決SSL證書驗證))

當然,這些參數都是以字典的形式而作為參數。

?

④顯示源碼最好的方式就是respsonse.content.decode(),如果要將json文本轉為python文本,使用json庫的json.loads()方法。

保存源碼的方式是with open,標準的格式為:

with open ("?"(文件的名字),"w"(進入可讀模式),encoding="utf-8"(不可缺,不然在編輯器上顯示不出來))as f :

? ? f.write(response.content.decode())

?

那么,requests模塊就學到這兒,但是正確的學習方式是學以致用,我將給自己布置下面兩個作業:

1.抓取絕地求生貼吧的前5頁源碼。

已成功完成,運行截圖如下:

?

源碼如下:

import requests


class TiebaSpider():
def __init__(self, tieba_name):
self.tieba_name = tieba_name
self.url = "https://tieba.baidu.com/f?kw=" + tieba_name + "&ie=utf-8&pn={}"
self.proxies = {"http": "http://139.196.90.80:80"}
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6814.400 QQBrowser/10.3.3005.400"}
self.cookies = {
"cookie": "BIDUPSID=ACDA08B4211ABB2C8501DB67D45C6354; PSTM=1511497343; bdshare_firstime=1511786525592; rpln_guide=1; TIEBAUID=0929173e72ad98f36fe7ebc6; TIEBA_USERTYPE=e916512877b43f62b624ed45; BDUSS=RuaHRBTnhZdDY3MTBKaWo3U0lKdkRES2Y0VGEyS2F0RW1BYXYyN3N0bWlIRXRjQVFBQUFBJCQAAAAAAAAAAAEAAABLXgnSxdzF3E1BU1RFUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKKPI1yijyNcMj; STOKEN=5fc0d6f6e16857ed3e6abac93bd75cae1cf244d5fd9d4e106b3ecb9d56017894; locale=zh; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID=4D17734C04368D8A9BDE5236D01D183E:FG=1; Hm_lvt_98b9d8c2fd6608d564bf2ac2ae642948=1547216027,1547272466,1547303935,1547367124; wise_device=0; Hm_lpvt_98b9d8c2fd6608d564bf2ac2ae642948=1547367145"}

def get_url_list(self, url):
url_list = []
for i in range(5):
url_list.append(url.format(i * 50))
return url_list

def parse_url(self, url):
response = requests.get(url, headers=self.headers, proxies=self.proxies, cookies=self.cookies)
return response.content.decode()

def save_html(self, html, page_num):
with open(self.tieba_name + "第" + str(page_num) + "頁", "w", encoding="utf") as f:
f.write(html)

def run(self):
# 1.使用url_list成功存儲五頁源碼
url_list = self.get_url_list(self.url)
# 2.獲取響應
# 3.保存源碼到html文件
page_num = 1
for url in url_list:
html = self.parse_url(url)
self.save_html(html, page_num)
print(self.tieba_name + "第" + str(page_num) + "頁爬取成功!")
page_num += 1


if __name__ == "__main__":
tieba_spider = TiebaSpider("絕地求生")
tieba_spider.run()

?

2.使用搜狗翻譯將英文翻譯成中文。

完成失敗。

總結原因:搜狗采取了反爬蟲,在表單中去掉了翻譯結果的參數。

我嘗試使用正則表達式匹配出來結果,但是技術不精,匹配失敗。

已經自閉,下次再來。

轉載于:https://www.cnblogs.com/Masterpaopao/p/10261558.html

總結

以上是生活随笔為你收集整理的更多Requests的小技巧以及总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。