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

歡迎訪問 生活随笔!

生活随笔

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

python

蓝桥杯python试题_Python爬取蓝桥杯真题讲解课程

發布時間:2023/12/10 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝桥杯python试题_Python爬取蓝桥杯真题讲解课程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今年疫情期間藍橋杯課程全線免費,但是如果每次聽課都要登錄賬號實在太麻煩了,所以想著用爬蟲抓去一下視頻到本地。

環境配置

這次我們用re、requests、urllib這三個庫來提取。

構造請求頭

我們需要安裝Chrome瀏覽器,進入瀏覽器 Ctrl+Shift+I 呼出開發者工具。接著打開網址:http://weike.lanqiao.cn/

找到如圖所示的User-Agent:

請求頭代碼如下:

'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'

后面代碼會用到。

請求訪問網頁

def get_html(url):

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '

'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'

}

response = requests.get(url,headers=headers)

if response.status_code == 200:

return response.text

else:

return

response = requests.get(url, headers=headers)

使用 requests 庫的 get 方法去訪問網頁,第一個參數為網址,第二個參數為請求頭,請求結果賦值給變量 response,其中里面有很多結果、狀態響應碼、網頁源碼、二進制等。

response.status_code == 200

調用請求結果 response 中的 status_code 查看請求狀態碼,200 代表請求成功,就返回,否則返回一個 None,狀態碼一般有 2xx,4xx,3xx,5xx,分別代表請求成功,客戶端訪問失敗,重定向,服務器問題。

return response.text

返回響應結果的 text,代表返回網頁 html 源碼

獲取數據

我通過開發者工具檢查網頁源碼,如下圖所示:

紅線部分的就是視頻的鏈接,通過觀察鏈接與鏈接只有最后的漢字部分不同,我們書寫正則表達式:

pat = ''

其中只有(.?)里的漢字標題內容不同,(.?)內的內容會賦值給pat。

titles = re.findall(pat,str(html),re.S)

for title in titles:

title = parse.quote(title,'+')

titles里存放的是這個網頁所有的漢字標題,由于我們最終要得到的是可以下載的直接鏈接,我們對漢字進行編碼。

編碼函數:quote(string, safe)

除了三個符號“_.-”不編碼,后面的參數safe是添加不編碼的字符。

批量URL

Chinese_num = ['一', '二', '三', '四', '五', '六']

id = ['1102','1103','1104','1105','1106','1497']

urls = ['http://weike.lanqiao.cn/static/coursehuifang/LNZTC++A/content/第{}節{}年省賽真題詳解.html?courseid=19&dayclassid={}'

.format(num, str(i), j) for num, i, j in zip(Chinese_num, range(2013, 2019),id)]

for url in urls:

url = parse.quote(url, '=/:+?&')

html = get_html(url)

get_infos(html)

time.sleep(1)

這里主要就看每一年真題鏈接的規律,覺得麻煩的可以一個一個鏈接手動輸入。畢竟一共就6年真題6個鏈接。

這個zip函數,意思是把三個元素打包,可以這樣理解 zip 函數的結果是一個列表 [(num,i,j)],每一次循環的 num,i,j 一次對應元組中的元素。range函數取不到最后一個數字所以是2019,實際只會取到2018。

完整代碼

# 藍橋杯課程

import re

import time

import requests

from urllib import parse

def get_html(url):

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '

'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'

}

response = requests.get(url,headers=headers)

if response.status_code == 200:

response.encoding = 'utf-8'

return response.text

else:

return

def get_infos(html):

pat = ''

# 要爬取內容的正則表達式,觀察url只有(.*?)里的標題內容不同,pat=(.*?)。

titles = re.findall(pat,str(html),re.S)

for title in titles:

title = parse.quote(title,'+')

# quote(string, safe),除了三個符號“_.-”不編碼,后面的參數safe是添加不編碼的字符。

print("http://weike.lanqiao.cn/static/coursehuifang/LNZTC++C/sources/"+title)

def main():

Chinese_num = ['一', '二', '三', '四', '五', '六']

id = ['1102','1103','1104','1105','1106','1497']

urls = ['http://weike.lanqiao.cn/static/coursehuifang/LNZTC++A/content/第{}節{}年省賽真題詳解.html?courseid=19&dayclassid={}'

.format(num, str(i), j) for num, i, j in zip(Chinese_num, range(2013, 2019),id)]

for url in urls:

url = parse.quote(url, '=/:+?&')

html = get_html(url)

get_infos(html)

time.sleep(1)

# if __name__ == '_main_':

if __name__ == '__main__':

main()

這里建議使用IDM批量下載速度很快。

總結

以上是生活随笔為你收集整理的蓝桥杯python试题_Python爬取蓝桥杯真题讲解课程的全部內容,希望文章能夠幫你解決所遇到的問題。

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