Python使用webdriver爬取百度文庫

前言

不知道大家有沒有過這樣的經歷,當你寫論文搜索資料時,好不容易搜到一篇好文章準備往自己論文裏複製時卻發現複製不了,所以只能硬着頭皮把那段話又一個字一個字敲出來(大多數百度文庫就是這樣)。這樣其實很費時間的。那有沒有什麼好辦法啊?我的答案是 當然有啊。要學以致用,接下來就給大家獻上我的方法。小白的話可以直接看 第3個—小白福利

1 準備工作

當然幹這種事並不是那麼簡單的,還要做準備工作。記得我之前也寫過一個爬蟲,但是用我之前寫得爬蟲去爬取百度文庫,所得非所見,就是我用爬蟲拿到的網頁代碼跟我看到的網頁內容是有所不一樣的,這是因爲該網頁需要動態爬取,那麼就的用到selenium模塊,當然爬取下來的網頁代碼非常長,而且你需要的文本內容在人家代碼裏,也不好複製。我們在需要一個BeautifulSoup模塊來簡化提取網頁內容。

1.1 安裝相關庫

關於安裝selenium和BeautifulSoup這兩個庫我不想多講。命令符輸入pip install Beautifulsoup4等待安裝完成後輸入pip install selenium等待安裝完成即可。
在這裏插入圖片描述

1.2 安裝Chrome以及驅動

在這個方面我踩了好多坑,所以有必要提醒一下,安裝chrome驅動時,一定要安裝同版本的驅動這裏我提供一個75.0377.90版本的chrome瀏覽器和75.0377.90的chromedriver瀏覽器驅動,大家下載後一定要記得安裝chrome,驅動不用安裝但要記得驅動的文件位置。
點擊下載chrome瀏覽器 ,提取碼:nw0i

點擊下載瀏覽器驅動,提取碼:hbfd

2 代碼實現

接下來我就爬取一個百度文庫付費文檔來實戰一下https://wenku.baidu.com/view/0ed77137814d2b160b4e767f5acfa1c7ab008239.html。點擊進入查看
首先看看這個網頁
在這裏插入圖片描述

代碼實現

from bs4 import  BeautifulSoup
from selenium import webdriver
import time
# 定義一個爬蟲函數
def get_content():

    # chrome驅動器的安裝目錄
    chrome_driver = 'D:\QLDownload\chromedriver.exe'
    # chrome瀏覽器的用戶代理
    user_agent = '"User-Agent":Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
    # 需要爬取網頁的網址
    url = 'https://wenku.baidu.com/view/0ed77137814d2b160b4e767f5acfa1c7ab008239.html'
    # 需要爬取的頁數
    page = 1

    options = webdriver.ChromeOptions()
    options.add_argument(user_agent)
    driver = webdriver.Chrome(chrome_driver)
    driver.get(url)
    driver.encoding ='gbk'
    scroll_add_crowd_button = driver.find_element_by_css_selector(  '#html-reader-go-more > div.banner-core-wrap.super-vip > div.doc-banner-text')
    driver.execute_script("arguments[0].scrollIntoView();", scroll_add_crowd_button)
    # 使用selenium的點擊,等待加載
    try:
        driver.find_element_by_css_selector('div.continue-to-read > div.banner-more-btn > span').click()
    except Exception as e:
        print(str(e))
    # 循環滾動滾動條到下一頁,每一次滾動都把html加到string類型的html中
    for i in range(page):
        driver.execute_script("window.scrollBy(0, 1050)")
        html = driver.page_source
    bf = BeautifulSoup(html)
    print(bf.get_text())
if __name__ == '__main__':
    get_content()

執行結果
在這裏插入圖片描述

其實運行下來還是一串代碼,但在代碼裏有已經提取好的我們需要的內容,我們只需找找就可以了。可能有人問爲什麼不用正則表達式提取呢?因爲每個網頁的內容可能不一樣而正則表達式太具有侷限性,他只能針對某一類網站專門去匹配,但我做的是所有網站的文本內容的匹配,這就需要我們去在代碼中找我們需要的內容.

3 小白福利

到這就結束了嗎?不可能,因爲上述方法是針對會python的人,不會python的朋友怎麼辦?接下來就給大家送福利了,我已經將代碼打包成可執行exe文件並配有可操作的ui界面。注意! 注意! 注意! 安裝chrome及驅動這一步驟必須做。

3.1 送上我寫exe

接下來就是下載點擊下載PYreptile
下載解壓完打開後先安裝chrome,如果已經有chrome可以直接下載你的chrome驅動器用,或者用我提供的chrome和驅動器。建議大家用我提供的因爲自己配可能不太好配,畢竟我也踩過很多坑。

解壓完打開後是這樣
在這裏插入圖片描述

我們先拿一個百度文庫爲例
例:https://wenku.baidu.com/view/a605b2243a3567ec102de2bd960590c69ec3d896.html點擊查看
這是隨機的一個大學生社會實踐心得

第一步:我們打開爬蟲exe
在這裏插入圖片描述
第二步查看頁數
在這裏插入圖片描述
第三步,查看驅動位置
在這裏插入圖片描述
所以我的最後的目錄是:C:\Users\DELL\Desktop\reptile\chromedriver.exe.
最終填寫結果
在這裏插入圖片描述

最後點擊開始爬取,程序會自動打開chrome,並自動關閉chrome,整個爬取過程全自動,最後會將結果保存爲word文檔。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

總結

總覺得這個做法有點不妥是不是侵權了,上位機寫得也比較匆忙,也沒怎麼美化,後續我在慢慢優化吧。目前先將就着用。想要上位機全部代碼可以私聊我。上位機是用pyqt5寫的,裏面涉及的知識點是用selenium驅動chrome爬取內容,再利用BeautifulSoup簡化提取代碼,最後將代碼保存爲word.docx文檔。其中可能有你需要的知識點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章