第一个python程序:爬虫下载课件
@python學習
第一個python程序:爬蟲下載課件
任務:爬取學校網站中自己課程列表里老師上傳的課件
思路:我們使用模擬用戶操作的方式,使用火狐瀏覽器來幫助程序運行selenium webdriver
火狐瀏覽器驅動
我們要使用selenium webdriver來啟動火狐瀏覽器,則需要下載驅動geckodriver.exe
下載地址:https://github.com/mozilla/geckodriver/releases/注意版本問題
下載、解壓,將geckodriver.exe放到和python.exe同一個文件中(很多這部分異常問題都是版本問題、環境變量問題等)
登錄
分析源代碼,找到登錄框中“用戶名”、“密碼”、“登錄按鈕”的位置
獲得網頁源代碼
利用BeautifulSoup、正則表達式等來定位元素
模擬鍵盤點擊
因為點擊下載鏈接后會彈出彈窗,但是這個彈窗是沒辦法解析的,只能通過模擬鍵盤來點擊按鈕
這一部分因為不同的文件下載出現的情況不同,
例如pdf會直接在頁面顯示出來,而右上角會有下載的按鈕,網頁顯示的pdf是可以解析的,所以定位到按鈕,click點擊后才彈出彈窗
例如壓縮包會直接彈出彈窗
而某些文件打開會是網頁亂碼,這樣的情況回退就可以了
安裝相關包
但是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程序:爬虫下载课件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: excel列显示形式互换(字母与数字)
- 下一篇: Python项目实战-----科比数据集