Python爬蟲——Urllib庫-3

目錄

ajax的get請求

獲取豆瓣電影第一頁的數據并保存到本地

獲取豆瓣電影前十頁的數據

ajax的post請求

總結


ajax的get請求

獲取豆瓣電影第一頁的數據并保存到本地

首先可以在瀏覽器找到發送數據的接口

那么我們的url就可以在header中找到了

再加上UA這個header

進行請求對象的定制,模擬瀏覽器發送請求即可

詳細代碼如下:

# get請求
# 獲取豆瓣電影第一頁的數據并且保存起來
import urllib.requesturl = 'https://movie.douban.com/j/chart/top_list?type=13&interval_id=100%3A90&action=&start=0&limit=20'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'
}# 請求對象的定制
request = urllib.request.Request(url=url, headers=headers)# 模擬瀏覽器發送請求,獲取響應的數據
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
# print(content)# 將數據下載到本地
# open方法默認使用GBK,但是我們前面使用的是utf-8,那么這里
# 需要將編碼格式指定為utf-8
fp = open('douban.json', 'w', encoding='utf-8')
fp.write(content)# get請求
# 獲取豆瓣電影第一頁的數據并且保存起來
import urllib.requesturl = 'https://movie.douban.com/j/chart/top_list?type=13&interval_id=100%3A90&action=&start=0&limit=20'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'
}# 請求對象的定制
request = urllib.request.Request(url=url, headers=headers)# 模擬瀏覽器發送請求,獲取響應的數據
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
# print(content)# 將數據下載到本地
# open方法默認使用GBK,但是我們前面使用的是utf-8,那么這里
# 需要將編碼格式指定為utf-8
fp = open('douban.json', 'w', encoding='utf-8')
fp.write(content)

這就下載下來了


獲取豆瓣電影前十頁的數據

首先我們找到第一次的刷新數據的請求url:

https://movie.douban.com/j/chart/top_list?type=13&interval_id=100%3A90&action=&start=0&limit=20

然后是第二次的:

https://movie.douban.com/j/chart/top_list?type=13&interval_id=100%3A90&action=&start=20&limit=20

然后是第三次的:
https://movie.douban.com/j/chart/top_list?type=13&interval_id=100%3A90&action=&start=40&limit=20

????????如果你觀察這幾個URL后面的參數的話,你就可以發現問題了,start每次都累加上limit,通過改變起始索引來挨個查詢,這個在Java開發中經常會有這種代碼,那么它查詢的方法就已經是顯而易見了。

所以可以得出start的值是:(page - 1) * 20

然后就可以寫出下面的代碼了:

# get請求
# 下載豆瓣電影前十頁的數據
import urllib.request
import urllib.parse"""得到不同pages的request
"""
def create_request(page):base_url = 'https://movie.douban.com/j/chart/top_list?type=13&interval_id=100%3A90&action=&'data = {'start': (page - 1) * 20,'limit': 20}data = urllib.parse.urlencode(data)url = base_url + dataprint(url)headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'}request = urllib.request.Request(url=url, headers=headers)return request"""得到返回的內容content
"""
def get_content(request):response = urllib.request.urlopen(request)content = response.read().decode('utf-8')return content"""將得到的內容寫入本地
"""
def down_load(page, content):fp = open('douban_' + str(page) + '.json', 'w', encoding='utf-8')fp.write(content)"""主方法
"""
if __name__ == '__main__':start_page = int(input('請輸入起始頁碼'))end_page = int(input('請輸入結束頁碼'))for page in range(start_page, end_page + 1):# 每一頁都有自己的請求對象的定制request = create_request(page)# 獲取響應數據content = get_content(request)# download下載down_load(page, content)

然后就完美得到了所有的數據了?


ajax的post請求

對肯德基官網的餐廳位置進行爬取

這為什么是一個ajax發送的數據呢,因為這里有一個ajax的核心對象

然后就通過URL和header就可以得到下面的代碼,并沒有新的東西 ,都是前面的知識點的整合。

# post請求
# 肯德基官網
import urllib.request
import urllib.parse# 第一頁
# https://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname# cname: 哈爾濱
# pid:
# pageIndex: 1
# pageSize: 10# 第二頁
# https://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname# cname: 哈爾濱
# pid:
# pageIndex: 2
# pageSize: 10"""請求對象定制
"""
def create_request(page):base_url = 'https://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'data = {'cname': '哈爾濱','pid': '','pageIndex': page,'pageSize': '10'}data = urllib.parse.urlencode(data).encode('utf-8')headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'}request = urllib.request.Request(url=base_url, headers=headers, data=data)return request"""獲取網頁內容
"""
def get_content(request):response = urllib.request.urlopen(request)content = response.read().decode('utf-8')return content"""下載內容到本地
"""
def down_load(page, content):fp = open('KFC' + str(page) + ".json", 'w', encoding='utf-8')fp.write(content)if __name__ == '__main__':start_page = int(input("請輸入起始頁碼"))end_page = int(input("請輸入結束頁碼"))for page in range(start_page, end_page + 1):# 請求對象的定制request = create_request(page)# 獲取網頁內容content = get_content(request)# 下載內容到本地down_load(page, content)

總結

累了,沒有總結,再見兄弟們ヾ( ̄▽ ̄)Bye~Bye~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711271.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711271.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711271.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Facebook的元宇宙實踐:數字化社交的新前景

近年來,元宇宙(Metaverse)這一概念備受矚目,被認為是數字化社交的未來趨勢之一。而在眾多科技巨頭中,Facebook(現更名為Meta)一直處于元宇宙發展的前沿。在本文中,我們將深入探討Fac…

萬字帶你走過數據庫的這激蕩的三年

本文收集了卡內基梅隆大學計算機科學系數據庫學副教授 Andy Pavlo 從 2021 到 2023 連續三年對數據庫領域的回顧,希望通過連續三年的回顧讓你對數據庫領域的技術發展有所了解。 關于 Andy Pavlo:卡內基梅隆大學計算機科學系數據庫學副教授,數…

vuepress項目側邊欄菜單配置使用

第一種菜單配置,自定義菜單名稱 {text: 菜單名稱,// 是否折疊collapsible: true,children: [{text: "自定義md菜單名稱",sidebarDepth: 2,link: "/xxx/aa.md",children: [],}],},第二種菜單配置 標題自動生成菜單,使用需要搭配sideb…

c語言求矩陣的局部極大值

給定M行N列的整數矩陣A,如果A的非邊界元素A[i][j]大于相鄰的上下左右4個元素,那么就稱元素A[i][j]是矩陣的局部極大值。本題要求給定矩陣的全部局部極大值及其所在的位置。 輸入格式: 輸入在第一行中給出矩陣A的行數M和列數N(3≤…

C語言創建結構體時 什么時候需要C++引用 什么情況下下不需要引用

在C語言中,結構體通常通過傳遞指針來實現對結構體的修改。當在函數中需要修改結構體的內容,并且希望這些修改在調用函數后仍然保持,可以考慮使用指針。引用是C中的一種特殊機制,用于更方便地傳遞參數,但在純粹的C語言中…

《springcloud alibaba》 三 sentinel流量控制

目錄 sentinel準備流控規則 qpspom.xmlapllication.yml啟動類controller查看結果流控提示不太友好 流控規則 線程數全局異常處理pom.xmlapplication.yml啟動類實體類controller類異常類測試 關聯流控模式關聯jmeter 鏈路servicecontroller代碼調整 流控效果Warm UP 熔斷降級規則…

[Flutter]用16進制顏色字符串初始化Color

使用: // 使用Color的靜態方法 fromARGB() 來創建顏色對象。透明度為 255(完全不透明) Color a Color.fromARGB(255, 42, 35, 72); // 使用八位的十六進制數來表示顏色,其中前兩位表示透明度,后六位表示紅色、綠色和…

本科畢業設計:計及并網依賴性的分布式能源系統優化研究。(C語言實現)(內包含NSGA II優化算法)(二)

目錄 前言 1、sofc函數 2、光伏板函數 3、集熱場函數 4、sofc電跟隨策略函數 5、二分法找sofc運行點函數 6、目標函數:成本 7、目標函數:二氧化碳排放量 8、目標函數:并網依賴性 前言 本篇文章介紹的是我的畢業設計,我將C…

JavaScript DOM操作筆記記錄回憶總結

一、什么是DOM? 1、通過 HTML DOM,可訪問 JavaScript HTML 文檔的所有元素。 2、當網頁被加載時,瀏覽器會創建頁面的文檔對象模型(Document Object Model) 二、操作DOM 1、在操作DOM之前,我們需要先獲取到…

DOM 創建節點、添加節點和刪除節點

創建元素節點 document.createElement(‘標簽名’) 創建文本節點document.createTextNode ( 內容 ) 根據傳入的標簽名創建出一個空的元素對象創建出來的默認不顯示,要成為別人的子元素才能顯示,所以要結合appendChild使用 添加節點(后面&am…

團體程序設計天梯賽 L2-001 緊急救援(迪杰斯特拉算法)

L2-001 緊急救援 分數 25 作為一個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連接城市的快速道路。每個城市的救援隊數量和每一條連接兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助電話給你的時候&…

python筆記_運算符

A,算術運算符 運算符描述舉例結果加011-減2-11*乘1*11/除1/11%取模(取余)6%51(余1)//除,且向下取整 3//2 -1//2 1 -1 **返回x的y次冪2**01 取模運算公式 a % b a - a // b * b print(-10%…

【復現】藍凌OA SQL注入漏洞_61

目錄 一.概述 二 .漏洞影響 三.漏洞復現 1. 漏洞一: 四.修復建議: 五. 搜索語法: 六.免責聲明 一.概述 藍凌智能OA是由深圳市藍凌軟件股份有限公司開發,是一款針對中小企業的移動化智能辦公產品,融合了釘釘數字…

C習題002:澡堂洗澡【僅供參考】

問題 輸入樣例 在這里給出一組輸入。例如&#xff1a; 2 5 1 3 3 2 3 3 輸出樣例 在這里給出相應的輸出。例如&#xff1a; No代碼長度限制 16 KB 時間限制 400 ms 內存限制 64 MB 棧限制 8192 KB 代碼 #include<stdio.h> int main() {int N,W,s,t,p;int arr_s[…

遞歸算法題練習(數的計算、帶備忘錄的遞歸、計算函數值)

遞歸的介紹 概念:遞歸是指函數直接或間接調用自身的過程。 解釋遞歸的兩個關鍵要素: 基本情況(遞歸終止條件):遞歸函數中的一個條件&#xff0c;當滿足該條件時&#xff0c;遞歸終止&#xff0c;避免無限遞歸。可以理解為直接解決極小規模問題的方法。遞歸表達式(遞歸調用):遞…

k8s 中 namspace deployment pod services 之間的關系

在Kubernetes&#xff08;K8s&#xff09;中&#xff0c;Namespace&#xff08;命名空間&#xff09;是一種用于將集群內部資源劃分為不同邏輯組的機制。Deployment、Pod和Service是Kubernetes中常見的資源&#xff0c;它們之間的關系如下&#xff1a; Namespace&#xff08;命…

網絡安全攻防演練:企業藍隊建設指南

第一章 概述 背景 網絡實戰攻防演習是當前國家、重要機關、企業組織用來檢驗網絡安全防御能力的重要手段之一,是對當下關鍵信息系統基礎設施網絡安全保護工作的重要組成部分。網絡攻防實戰演習通常是以實際運行的信息系統為攻擊目標,通過在一定規則限定下的實戰攻防對抗,最…

認識通訊協議——TCP/IP、UDP協議的區別,HTTP通訊協議的理解

目錄 引出認識通訊協議1、TCP/IP協議&#xff0c;UDP協議的區別2、HTTP通訊協議的講解 Redis沖沖沖——緩存三兄弟&#xff1a;緩存擊穿、穿透、雪崩緩存擊穿緩存穿透緩存雪崩 總結 引出 認識通訊協議——TCP/IP、UDP協議的區別&#xff0c;HTTP通訊協議的理解 認識通訊協議 …

第九屆數學與人工智能國際會議 (ICMAI 2024)即將召開!

2024年第九屆數學與人工智能國際會議將于2024年5月10-12日在中國北京召開。本屆會議由北京工業大學主辦&#xff0c;旨在促進應用邏輯、算法與復雜性研究&#xff0c;使用數學的方法促進人工智能理論與應用發展&#xff0c;加深學術交流與合作。我們熱忱歡迎從事相關技術研究的…

開源WIFI繼電器之使用說明

1、設備說明 1.1外觀 1.2供電 100~240V交流輸入&#xff0c;Lin接火線&#xff0c;Nin接零線。 1.3連接負載 輸出信號為繼電器無源信號&#xff0c;用于信號的導通和斷開控制&#xff0c;最大可通過10A負載電流&#xff0c;COM為繼電器公共端&#xff0c;NO為繼電器常開端&a…