不要著急花更多的時(shí)間去賺錢,去花時(shí)間,讓自己的時(shí)間更值錢。薪資只是你個(gè)人能力的附屬品
簡介:
因?yàn)槲覀儗W(xué)校有社會(huì)實(shí)踐這種東西,需要寫一個(gè)社會(huì)實(shí)踐心得,但是呢,我在家研究了一個(gè)半月的python,emmmm 你讓我拿什么寫社會(huì)實(shí)踐心得- -,于是只好百度找一篇咳咳借鑒一下,對,就是借鑒一下。然后找到一篇百度文庫的文檔,復(fù)制一下,恩??沒用。下載,恩??還要錢。wtf,你還是人嘛(臉就是那么厚),充錢是不可能充錢的,這輩子都不可能充錢的,學(xué)了一個(gè)半月的python爬蟲,這時(shí)候不就派上用場了,人生苦短,我用python
準(zhǔn)備:
用到的模塊:
- BeautifulSoup
- selenium
- os
安裝:
BeautifulSoup的安裝方式我在之前一篇博客里面講過了,需要的可以去看看。
selenium的安裝:
pip install selenium
然后還需要一個(gè)瀏覽器的驅(qū)動(dòng)程序,如果你用的Chrome,就去下載Chrome的驅(qū)動(dòng)
如果是firefox,就去firefox下載,
然后解壓到/usr/bin 或者 /usr/local/bin里面,就可以了,windows用戶就請自行百度了,哈哈。
但是這種方式有個(gè)弊端,因?yàn)槭谴蜷_瀏覽器的緣故,響應(yīng)速度較慢。解決方式是用Headless Chrome/firefox,無頭瀏覽器。
無頭瀏覽器的意思是沒有用戶界面的瀏覽器。正因?yàn)闆]有圖形界面的緣故,會(huì)比前面的那些瀏覽器運(yùn)行速度快很多,
我這里用的就是無頭瀏覽器(Headless Chrome)
安裝方式:
headless chrome
如果想使用Headless Chrome 對Chrome版本有一定的要求,從官方文檔我們可以看出,mac和linux環(huán)境要求chrome版本是59+,而windows版本的chrome要求是60+,同時(shí)不同版本的chrome的版本要求的ChromeDriver版本也是不一樣的,具體的安裝方式和使用方式看官方文檔吧。
如果你想用headless Firefox,也類似,具體的安裝使用去看官方文檔。
分析思路
因?yàn)榘俣任膸旖?jīng)過了很多js的渲染,所以果斷選擇使用selenium,selenium是什么呢,按照百度的說法,selenium 是一個(gè)用于Web應(yīng)用程序測試的工具。Selenium測試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣,selenium用于爬蟲,主要是用來解決javascript渲染的問題,簡單來說就是模擬實(shí)際用戶操作了。然后我們get一個(gè)目標(biāo)網(wǎng)站,調(diào)用selenium的page_source方法,獲取js渲染以后的源碼,使用BeautifulSoup提取我們要的文檔。
代碼實(shí)現(xiàn)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import os
from bs4 import BeautifulSoup
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
#headless,官方解釋是Runs Chrome in headless mode,反正是個(gè)必要的參數(shù)
chrome_options.add_argument('user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Version/10.0 Mobile/14D27 Safari/602.1"')
#我把user-agent改成手機(jī)版的了
chromedriver = "/usr/bin/chromedriver"
os.environ["webdriver.chrome.driver"] = chromedriver
#調(diào)用本地的環(huán)境
driver = webdriver.Chrome(chrome_options=chrome_options,executable_path=chromedriver)
driver.get("https://wenku.baidu.com/view/8e85d6eac1c708a1294a4425.html")
html = driver.page_source
#獲取源碼
bf1 = BeautifulSoup(html,'lxml')
#使用BeautifulSoup分析源碼
#獲取文章
text_list = []
list_div = bf1.find_all('div', class_= 'content singlePage wk-container')
for list_p in list_div:
text = list_p.get_text()
text_list.append(text)
a = ''.join(text_list).replace('\xa0', '')
with open('./wenku.txt', 'w') as f:
f.write(a)