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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python爬虫之旅_ONE

發布時間:2024/9/30 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python爬虫之旅_ONE 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:

最近學習了python的一些基礎語法,又跟著廖雪峰老師用異步IO框架搭建了一個簡易的網站(雖然有的現在還不懂)不過慢慢來,python還有一個好玩的地方是可以寫爬蟲,趁著現在有充裕的時間就來學習一下啦,推薦一下小猿圈課程,老師講的特別好

0x00: 了解爬蟲

爬蟲在使用場景的分類
——通用爬蟲:
抓取系統重要組成部分。抓取的是一整張頁面數據。
—— 聚焦爬蟲:
是建立在通用爬蟲的基礎之上,抓取的是頁面特定的局部內容。
——增量式爬蟲:
監測網站的數據的更新情況,智慧抓取網站中最新更新出來的數據

反爬機制: 門戶網站,可以通過制定相應的策略揮著手段,防止爬蟲驚醒網站數據的爬蟲。
反反爬策略:爬蟲程序也可以通過制定相關的策略或者技術手段,破解門戶網站中具備的反爬機制,從而獲取門戶網站中的數據。

robots.txt協議:

君子協議。規定了網站中那些數據可以被爬蟲那些數據不可以被爬取

0x01:http&https協議

http協議:

服務器和客戶端進行數據交互的一種形式

常見的請求頭信息:

User-Agent:請求載體的身份標識 Connection:請求完畢后,是斷開連接還是保持連接

常用的響應頭信息:

Content-Type: 服務器響應回客戶端的數據類型

https協議

安全的超文本傳輸協議,涉及到數據加密

加密方式:

  • 對稱秘鑰加密
  • 非對稱秘鑰加密
  • 證書秘鑰加密
  • 對稱秘鑰加密

    客戶端先進行數據加密,并將密文和密鑰一同發送到服務器端,服務器端利用密鑰解開密文。
    缺點:容易被攔截,不安全

    非對稱秘鑰加密

    例如:RSA這種加密方式

    證書秘鑰加密


    0x02:request模塊

    request模塊是python中原生的一款基于網絡請求的模塊,功能非常強大,而且很高效,作用便是模擬瀏覽器發起請求,既然是模擬瀏覽器發起請求,那就需要用request模塊做和瀏覽器相同的工作

    request編碼流程:

  • 指定url
  • 發起請求
  • 獲取響應數據
  • 持久化存儲
  • 練習一:爬取搜狗首頁的頁面數據(基本流程)

    爬取代碼:

    # 爬取搜狗首頁的頁面數據 import requests if __name__ == "__main__":#setp1 指定urlurl = 'https://www.sogou.com/'#setp2 發起請求#get方法返回一個響應對象response = requests.get(url=url)#setp3 獲取響應數據#text返回的是字符串形式的響應數據page_text = response.textprint(page_text)#setp4 持久化存儲with open('D:/爬蟲/sogou.html','w',encoding='utf-8') as f:f.write(page_text)print('爬取完成')

    響應:

    練習二:網頁采集器(GET)

    在編寫前,需要來了解一些反爬機制:

    UA: User-Agent(請求載體的身份標識)

    UA檢測:門戶網站的服務器會檢測對應請求的載體身份標識,如果檢測到請求的載體身份標識為某一個瀏覽器說明該請求是一個正常的請求,但是,如果檢測到請求的載體身份標識不是基于某一款瀏覽器的,則表示該請求為不正常的請求(爬蟲),則服務器端就很有可能拒絕該次請求。

    UA偽裝:將對應的User-Agent封裝到一個字典中,加入代碼中。

    這里就爬取搜狗瀏覽器

    比如搜索刀劍神域時,后面跟了一堆參數,但有一個參數query特別明顯,這個參數就是我們要查詢的內容,只保留這個參數,發現還是可以查詢的,這樣url就比較好指定了

    除此之外,還需要添加上UA偽裝,防止被拒絕

    下面就來編寫爬取代碼:

    import requestsif __name__ == "__main__":#UA偽裝,封裝到一個字典中header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'} #指定urlurl = "https://www.sogou.com/sogou"#自定義參數kw = input('please input param')#將參數封裝到字典中param = {'query': kw}#發起請求,第二個參數將自定義的參數傳進去,第三個參數傳入headerreponse = requests.get(url=url,params=param,headers=header)#獲取響應信息page_text = reponse.text#保存信息fileName = kw+'.html'with open(fileName,'w',encoding='utf-8') as f:f.write(page_text)print("爬取成功")

    爬取成功

    如果想要爬取其他內容,只需要更改參數即可

    練習三:破解百度翻譯(Post)

    在編寫前先要了解一下Ajax

    AJAX 是一種用于創建快速動態網頁的技術。
    通過在后臺與服務器進行少量數據交換,AJAX 可以使網頁實現異步更新。這意味著可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新


    打開百度翻譯,發現頁面局部刷新,這里使用了Ajax,請求成功后會將局部的進行一個刷新 ,因此只要捕獲對應的Ajax請求,就可以將對應的翻譯的結果存儲到json的文本文件當中

    為什么要存儲到json的文本文件當中,我們捕獲一下服務器端的返回信息就可以知道

    接下來就去捕獲Ajax請求,比如輸入dog,捕捉到了對應的參數,接下來就寫爬取代碼

    import requests import json#指定post的url post_url = 'https://fanyi.baidu.com/sug' #UA偽裝 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36' } #自定義post參數 word = input('please input') data = {'kw': word } #發起請求 post_response = requests.post(url=post_url,data=data,headers=headers)#獲取響應 #注:獲取響應數據json()方法返回的是obj(如果確認響應數據是json,才可以使用json()) dict_text = post_response.json() # print(dict_text) #保存數據 fileName = word+'.json' fp = open(fileName,'w',encoding = 'utf-8') #注:因為返回來的json串是中文的,所以ensure_ascii為false,不能使用ascii進行編碼 json.dump(dict_text,fp=fp,ensure_ascii=False) print('Finish')

    爬取成功

    練習四:爬取豆瓣電影

    隨便點一個類型的電影,往下面查看時會發現每次當頁面為20部電影時,稍微等一會就可以繼續往下查看更多未顯示的電影,網頁是沒有任何變化的,只是局部的變化,因此可以捕捉一下Ajax請求


    Ajax請求時便會攜帶這些參數,那既然知道了攜帶的是什么參數,就可以編寫爬取腳本了

    # 爬取豆瓣電影 import requests import json if __name__ =="__main__":url="https://movie.douban.com/j/chart/top_list"#參數params = {"type":"24","interval_id": "100:90","action":"","start": "0","limit": "20",}#UA偽裝headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"}#請求r=requests.get(url=url,params=params,headers=headers)#反應data=r.json()#存儲fp = open("電影.json","w",encoding="utf-8")#indent: 縮進(例如indent=4,縮進4格);json.dump(data,fp=fp,ensure_ascii=False,indent=4)print("爬取成功")

    作業:爬取肯德基餐廳的位置信息


    當查詢餐廳時,只是局部頁面發生了變化,因此可以確定是Ajax,所以去捕獲一下請求
    是通過POST的方式進行請求

    注意這里不再是json類型的,而是text,

    編寫爬蟲代碼:

    import requestsif __name__ == "__main__":url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36' } key = input("Please enter the query address\n") page = input("Please enter the query page number\n") data = {'cname':'','pid': '','keyword':key,'pageIndex':page,'pageSize': '10', }reponse = requests.post(url=url,data=data,headers=headers) data = reponse.text print(data) fileName = key+'.txt' with open(fileName,'w',encoding='utf-8') as fp:fp.write(data) print("爬取成功")

    爬取成功

    總結:

    這次就先學習到這里,這次學習收獲很大,下一篇將記錄更好玩的爬蟲之旅!!

    總結

    以上是生活随笔為你收集整理的Python爬虫之旅_ONE的全部內容,希望文章能夠幫你解決所遇到的問題。

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