利用Python进行百度文库内容爬取(一)
新手上路
在很多时候我们需要下载百度文库内容的时候,弹出来的是下载券不足,而现在复制其中的内容也只能复制一部分,如果遇到一些政治开卷考,考前抱佛脚,想要复制出文库中的内容,可谓是难上加难。
对百度文库内容的获取,从最开始的大部分文档可以免费直接从中直接下载,到后面需要通篇复制下来,再到后来的只能一小句一小句的复制,获取起来非常难受。这时可以对想要获取的内容直接涂黑,然后右键“搜索”,即可将想要的内容抓出来。再后来也用过右键“翻译”,然后从百度翻译中将想要获取的内容进行复制出来。但是最近发现,这些手段都无法进行大段内容的获取了。
作为一个刚刚接触爬虫的人来说,这时就会想到,我们能否使用Python进行爬虫,将百度文库中的内容进行爬取呢?答案是肯定的,只不过相对于一般的爬虫而言,要求较为复杂。后面会对具体的方法进行说明。
在实现百度文库内容爬取的时候,主要参考了如下几位大神的文章:
- https://blog.csdn.net/c406495762/article/details/72331737#31-selenium
- https://blog.csdn.net/sinat_29957455/article/details/77886862
- https://blog.csdn.net/sinat_29957455/article/details/77842292
- https://www.cnblogs.com/technologylife/p/5829944.html
- https://www.cnblogs.com/qingqing-919/p/8717276.html
其实里面很多文章写得非常详细了,但是由于时间的推移,文库中的很多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进行百度文库内容爬取(二)——自动点击预览全文并爬取。