1. 程式人生 > >利用Python進行百度文庫內容爬取(一)

利用Python進行百度文庫內容爬取(一)

新手上路

在很多時候我們需要下載百度文庫內容的時候,彈出來的是下載券不足,而現在複製其中的內容也只能複製一部分,如果遇到一些政治開卷考,考前抱佛腳,想要複製出文庫中的內容,可謂是難上加難。

對百度文庫內容的獲取,從最開始的大部分文件可以免費直接從中直接下載,到後面需要通篇複製下來,再到後來的只能一小句一小句的複製,獲取起來非常難受。這時可以對想要獲取的內容直接塗黑,然後右鍵“搜尋”,即可將想要的內容抓出來。再後來也用過右鍵“翻譯”,然後從百度翻譯中將想要獲取的內容進行復製出來。但是最近發現,這些手段都無法進行大段內容的獲取了。

作為一個剛剛接觸爬蟲的人來說,這時就會想到,我們能否使用Python進行爬蟲,將百度文庫中的內容進行爬取呢?答案是肯定的,只不過相對於一般的爬蟲而言,要求較為複雜。後面會對具體的方法進行說明。

在實現百度文庫內容爬取的時候,主要參考瞭如下幾位大神的文章:

其實裡面很多文章寫得非常詳細了,但是由於時間的推移,文庫中的很多HTML原始碼都進行了更新,並且有些程式碼也執行不了,所以自己在一些地方進行了整合修改。

使用Selenium進行爬蟲

進行爬蟲的時候,我們首先會對網頁點選右鍵,然後選擇“檢查”(對普通爬蟲不熟悉的童鞋,可以先看看爬蟲入門的部落格:利用Python進行簡單爬蟲(爬取豆瓣《湮滅》短評),裡面有非常詳細的說明)。

通常,如果檢查的元素中裡面只要有我們想要的文件內容,那我們爬下來就是有意義的,因為爬下來之後可以通過一系列的操作將我們的內容提取出來。但是如果像下面這樣(用電腦端點開百度文庫出現的內容),HTML中沒有文字,這就沒有辦法實現文庫中的內容獲取了。

這裡寫圖片描述

但這時,我們另有高招——將百度文庫的內容轉為手機版後,再次進行登入爬取,我們就可以將裡面的內容提取出來。

偽裝成手機端進行登入

偽裝後的效果,以及其中對應的元素如下:

這裡寫圖片描述

如上圖所示,這時候我們就可以基於HTML原始碼來進行整理,爬取我們想要的內容了。

首先介紹一下如何偽裝成手機端進行登入:

在命令列中安裝selenium

使用如下命令即可安裝:

pip3 install selenium

然後我們還需要下載一個驅動——chromedriver,其用於修改Chrome設定偽裝成手機M站(這裡以Google瀏覽器為例)。直接在下述的網址進行下載即可:
http://npm.taobao.org/mirrors/chromedriver/


但是需要在note檔案中看版本號與Chrome是否相匹配,然後將裡面的chromedriver.exe解壓出來即可。

接著,我們直接在Python中執行下述程式碼,就可以開啟瀏覽器,並進入bing:

from selenium import webdriver

chromedriver_dir = 'D:\chromedriver_win32\chromedriver.exe' # 注意,這裡是你的安裝路徑
browser = webdriver.Chrome(chromedriver_dir) 
browser.get('http://www.bing.com/')

但這樣是沒有偽裝的,所以我們需要修改一下引數,將其偽裝成iPhone來訪問百度文庫,如下述程式碼所示:

from selenium import webdriver

web = 'https://wenku.baidu.com/view/aa31a84bcf84b9d528ea7a2c.html'
chromedriver_dir = 'D:\chromedriver_win32\chromedriver.exe'

options = webdriver.ChromeOptions()
# 偽裝成iPhone
options.add_argument('--user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3')

driver = webdriver.Chrome(chromedriver_dir, chrome_options=options)
driver.get(web)

執行完成後,開啟的網頁如下圖所示,這與一般的電腦開啟的不一樣,但是卻可以爬取其中的內容了。
這裡寫圖片描述

對文庫中的內容進行爬取並篩選

找到裡面對應的每一個class都是txt
這裡寫圖片描述

然後我們只需將其中的內容提取出來即可(接上述程式碼)。這裡需要注意,爬取不同的文庫內容所對應的class很可能不是txt,要根據自己實際的情況來進行修改調整。

from bs4 import BeautifulSoup

html = driver.page_source
bf1 = BeautifulSoup(html, 'lxml')
result = bf1.find_all(class_='txt')
for each_result in result:
     bf2 = BeautifulSoup(str(each_result), 'lxml')
     texts = bf2.find_all('p')
     print(texts[0].getText())

最後的部分結果如下所示:

31、混合銷售的營業稅避稅籌劃
在實際經濟活動當中,納稅人從事營業稅應稅專案,並不僅僅侷限在工某單一應稅專案上,往往會同時出現多項應稅專案。
例如,有些賓館、飯店,既搞展廳、客房,從事服務業,又搞卡拉OK舞廳,從事娛樂業。
又如,建築公司既搞建築安裝,從事應納營業稅的建築業,又搞建築材料銷售,從事應納增值稅的貨物銷售,等等。
對不同的經營行為應有不同的稅務處理,這是貫徹執行營業稅條例,正確處理營業稅與增值稅關係的一個重點。作為納稅人,必須正確掌握稅收政策,準確界定什麼是兼營銷售和混合銷售,才能避免從高適用稅率,以維護自身的稅收利益。
一項銷售行為,如果既涉及應稅勞務又涉及貨物或非應稅勞務,稱為混合銷售行為。從事貨物的生產、批發或零售的企業、企業性單位及個體經營者的混合銷售行為,視為銷售貨物,不繳納營業稅;其他單位和個人的混合銷售行為,視為提供應稅勞務,應當繳納營業稅。所稱從事貨物的生產、批發或零售的企業、企業性單位及個體經營者,包括以從事貨物的生產、批發或零售為主併兼營應稅勞務的企業、企業性單位及個體經營者在內。
所謂以從事貨物的生產、批發或零售為主,是指納稅人的年貨物銷售額與非增值稅應稅勞務營業額的合計數中,年貨物銷售額超過總額50%,非增值稅應稅勞務營業額不到總額50%。
我國現行稅制規定,在混合銷售行為中,判定”以從事貨物的生產、批發或零售為主,併兼營非應稅勞務的企業、企業性單位及個體經營者”的標準是,納稅人年應稅貨物銷售額與非應稅勞務營業額的合計數中,年貨物銷售額超過50%,非增值稅應稅勞務營業額不到50%。
從事營業稅應稅勞務的公司,當其主要客戶是不要求取得增值稅專用發票的最終消費者時,可以通過併購特定工商企業的方式,從事一定的貨物生產、批發或零售的業務,而就全部收入按照較低的稅率交納營業稅。比如,從事建築施工的企業可以合併一家從事建材銷售的企業,以包工包料的形式提供勞務。只要其建材的銷售額不超過其建築施工的營業額,就仍然可以按較低的稅率繳納營業稅。
納稅人在進行籌劃時,主要是對比一下增值稅和營業稅稅負的高低,然後選擇低稅負的稅種。一般情況下,大家認為增值稅稅負肯定高於營業稅稅負,但實際上未必如此。
增值稅一般納稅人的計稅原理是,應納稅額等於企業經營的增值額乘以增值稅稅率,增值額和經營收入的比率稱為增值率,所以應納增值稅稅額也等於經營收入總額乘以增值率再乘以增值稅稅率;營業稅應納稅額等於經營收入總額乘以營業稅稅率。
為比較二者稅負高低,設經營收入總額為X,增值率為P,增值稅稅率為re,營業稅稅率為rt,則有:
應納增值稅稅額=X×P×re
應納營業稅稅額=X×rt
當二者稅負相等時有:X×P×re=Y×t2,則P=rt÷re
由此可以得出結論:當實際的增值率大於P時,納稅人籌劃繳納營業稅比較合算;
當實際增值率等於P時,繳納增值稅和營業稅稅負完全一樣;當實際的增值率小於P時,繳納增值稅比較合算。
實際增值率計算公式如下:
納稅人實際增值率=增值額÷經營收入總額=(經營收入總額-允許扣除專案金額)÷經營收入總額
上面分析了兼營和混合銷售稅收籌劃的原理,納稅人在實際運用時,還受到稅法對這兩種經營行為徵稅規定的限制,下面結合有關征稅規定,說明其原理的具體運用。
混合銷售行為是指企業的同一項銷售行為既涉及增值稅應稅貨物又涉及營業稅的應稅勞務,而且提供應稅勞務的目的是直接為了銷售這批貨物而作出的,二者間是緊密相連的從屬關係。混合銷售是面向同一購買人的,增值稅應稅貨物和營業稅應稅勞務是合併定價,二者不可能分開核算。
對混合銷售的稅務處理辦法是:從事貨物的生產、批發或零售的企業、企業性單位及個體經營者以及以從事貨物的生產、批發或零售為主,併兼營非應稅勞務的企業、企業性單位及個體經營者的混合銷售行為,視為銷售非應稅勞務,不徵收增值稅。
納稅人可以通過控制應稅貨物和應稅勞務的所佔比例,來達到選擇繳納低稅負稅種的目的。
因為在實際經營活動中,納稅人的兼營和混合銷售往往同時進行,納稅人只要使應稅貨物的銷售額能佔到總銷售額的50%以上,則繳納增值稅;反之,若應稅勞務佔到總銷售額的50%以上,則繳納營業稅。
[案例1]
新建偉建築材料商店,在主營建築材料批發和零售的同時,還兼營對外承接安裝、裝飾工程工程作業。該商店是增值稅一般納稅人,增值稅稅率為17%。
本月對外發生一筆混合銷售業務,銷售建築材料並代客戶安裝,這批建築材料的購入價是100萬元。該商店以115萬元的價格銷售並代為安裝,營業稅稅率為3%。
[要求籌劃]
該企業應如何進行稅收籌劃?
[籌劃分析]
企業實際增值率=(115-100)÷115×100%=13.04%,而P=3%÷17%×100%=17.6%。
企業實際增值率小於P,選擇繳納增值稅合算,可以節稅為:
115×3%-(115×17%-100×17%)=0.9萬元
也就是企業應當設法使貨物的銷售額佔到全部營業額的50%以上。
[案例2]
金魯班建築公司主營建築工程施工業務,同時也兼營建築材料的批發。當年承接某單位的辦公大樓建造工程,雙方議定由建築公司包工包料,合併定價,工程總造價為1200萬元。工程完工後,建築公司在施工中使用的建築材料按市場價折算為1000萬元,但該公司實際進價為800萬元,工程建築施工費為200萬元,營業稅稅率為3%。
[要求籌劃]
該公司應如何進行納稅籌劃?
[籌劃分析]
建築材料銷售的實際增值率=(1000-800)/1000×100%=20%。
P=3%÷17%×100%=17.6%。
企業實際增值率大於P,應當籌劃繳納營業稅。
即要使該公司當年總的營業額中應稅勞務佔50%以上,這樣可以節稅為:
(1200×17%-800×17%)-1200×3%=32萬元。

未完待續

到這裡,只是進行了最簡單的百度文庫內容爬取,之後還有“下拉檢視更多內容”“翻頁自動爬取”等功能還未實現,其實這都可以模擬瀏覽器進行點選操作實現,這些內容請參看下一篇文章:利用Python進行百度文庫內容爬取(二)——自動點選預覽全文並爬取