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