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

歡迎訪問 生活随笔!

生活随笔

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

python

第一个python程序:爬虫下载课件

發布時間:2023/12/10 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第一个python程序:爬虫下载课件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

@python學習

第一個python程序:爬蟲下載課件

任務:爬取學校網站中自己課程列表里老師上傳的課件
思路:我們使用模擬用戶操作的方式,使用火狐瀏覽器來幫助程序運行selenium webdriver

火狐瀏覽器驅動

我們要使用selenium webdriver來啟動火狐瀏覽器,則需要下載驅動geckodriver.exe
下載地址:https://github.com/mozilla/geckodriver/releases/注意版本問題
下載、解壓,將geckodriver.exe放到和python.exe同一個文件中(很多這部分異常問題都是版本問題、環境變量問題等)

登錄

分析源代碼,找到登錄框中“用戶名”、“密碼”、“登錄按鈕”的位置

獲得網頁源代碼

利用BeautifulSoup、正則表達式等來定位元素

模擬鍵盤點擊

因為點擊下載鏈接后會彈出彈窗,但是這個彈窗是沒辦法解析的,只能通過模擬鍵盤來點擊按鈕


這一部分因為不同的文件下載出現的情況不同,
例如pdf會直接在頁面顯示出來,而右上角會有下載的按鈕,網頁顯示的pdf是可以解析的,所以定位到按鈕,click點擊后才彈出彈窗
例如壓縮包會直接彈出彈窗

而某些文件打開會是網頁亂碼,這樣的情況回退就可以了

安裝相關包

  • selenium等包直接pip install 安裝就好了
  • pykeyboard安裝
    但是pykeyboard包不能直接安裝
    需要先安裝pywin32和pyHook
    而pyHook直接安裝也不行
    首先查看自己的python版本

    去https://www.lfd.uci.edu/~gohlke/pythonlibs/下載對應的包

    再pip install安裝

    pykeyboard和pymouse一起集成到了PyUserInput庫中,所以我們安裝pykeyboard需要安裝***PyUserInput***使用pip install PyUserInput 安裝
  • 所用到的包

    from selenium import webdriver
    from bs4 import BeautifulSoup
    from selenium.common.exceptions import NoSuchElementException
    import re
    import time
    from pykeyboard import PyKeyboard

    分析網頁循環下載部分

    soup1 = BeautifulSoup(driver.page_source, "html.parser") # 多模式首頁course = soup1.find('div', attrs={"class": "userCourseList"}) #定位到課程列表 course_url = course.find_all('a', href=True) # 得到課程ID course_id = re.findall('<a href="/iclass/netclass/course/index.php\?cid=(.*?)">', str(course_url))for C_id in course_id:print(C_id)driver.find_element_by_xpath('//a[@href = "/iclass/netclass/course/index.php?cid='+ C_id +'"]').click() # 打開課程鏈接driver.find_element_by_id('CLDOC').click() # 打開資料下載區soup2 = BeautifulSoup(driver.page_source,"html.parser") #某課程資料下載區界面pdf = soup2.find_all('a', attrs={"class": " item"}) # 定位到課件的位置# 得到課件的idpdf_id = re.findall('<a class=" item" href="/iclass/netclass/backends/download.php\?url=(.*?)&',str(pdf))if pdf_id:for P_id in pdf_id:pdf_name = driver.find_element_by_xpath('//a[@href = "/iclass/netclass/backends/download.php?url=' + P_id + '&cidReset=true&cidReq=' + C_id + '"]').text # 找到課件名稱driver.find_element_by_link_text(pdf_name).click() # 點擊PDFtry:driver.find_element_by_id('download').click() # 下載(只有pdf的課件才會打開有download按鈕)# 鍵盤操作except NoSuchElementException:k = PyKeyboard()k.press_key(k.alt_key) # 按住ALT鍵k.tap_key('s') # 點擊S鍵k.release_key(k.alt_key)k.tap_key(k.enter_key) # enter鍵完成保存工作print(pdf_name)else:k = PyKeyboard()time.sleep(1)k.tap_key(k.alt_key) #按住ALT鍵k.tap_key(k.enter_key) # enter鍵完成保存工作print(pdf_name)driver.back() #回退到課件列表界面driver.back()driver.back()driver.back() # 一直回退到課程列表界面,就算back多也只會停留在登錄后的界面else:driver.back()driver.back()#回到課程列表continue driver.close()

    可優化

    多增加異常處理
    不要下載已經下載過的課件

    總結

    分析網頁定位元素是一件特別累的事
    soup.find
    soup.findall
    soup.find_all
    re.find_all
    re.findall
    re.find
    之間的區別、條件格式還不是很清楚
    以及和text之間的關系,如何獲得標簽之間的文字,在這一部分經常要試錯很多次

    這是我的第一篇博客,寫得自己都不夠滿意卻又不知道如何修改了
    這個程序已經完成很久了,但是又做一遍的時候還是會有一些問題
    計算機這條路不知道能走多久,可能畢業了就離開了
    有些時候覺得自己很愛它,特別是完成一些小功能時,但是這種時候真的太少了,十分沒有信心
    還是勉勵一下自己,還有一些時間,還不算晚
    純粹一些,堅定一點!加油!

    總結

    以上是生活随笔為你收集整理的第一个python程序:爬虫下载课件的全部內容,希望文章能夠幫你解決所遇到的問題。

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