利⽤Python 进⾏百度⽂库内容爬取(⼆)——⾃动点击预览全⽂并爬取本⽂是衔接上⼀篇:《利⽤Python进⾏百度⽂库内容爬取(⼀)》。
上回说到我们在对百度⽂库进⾏爬⾍时,需要模拟⼿机端来进⾏登录,这样固然可以对⽂章进⾏爬取,但是很多时候并不是⾮常智能的翻页或者是点击继续阅读,基于最简单的百度⽂库爬取⽅法,在这边博客中,我们实现了⾃动点击预览全⽂并进⾏全⽂的爬取。⾸先我们先进⾏上次内容的回顾:
1、模拟⼿机端登录
⾸先我们先载⼊所依赖的库:
下⾯开始模拟⼿机端进⾏登录:
上⾯的内容都是在之前博客中有提到过的内容,这⾥就不在做过多的叙述,下⾯是⾃动点击预览全⽂并爬取的相关实现⽅法。
2、模拟点击继续阅读⾸先,我们审查继续阅读的⽂件位置,到如下所⽰继续阅读
的位置:
from  selenium import  webdriver # 模拟浏览器登录
import  time                    # 设置点击页⾯间隔时长
from  bs4 import  BeautifulSoup  # ⽹页源代码解析
web = 'wenku.baidu/view/aa31a84bcf84b9d528ea7a2c.html'
chromedriver_dir = 'D:\chromedriver_'
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 Mobil driver = webdriver.Chrome(chromedriver_dir, chrome_options=options)
<(web)
这个时候我们需要到其所在的⼤区域: 然后我们输⼊如下的代码,控制浏览器进⾏窗⼝滑动,跳转到包含继续阅读所在的区域(在本例中,结合上图可以发现,为foldpagewg-root )。
然后在对⽹页跳转到对应的区域后,我们再模拟⿏标的点击。⾸先我们得看那些地⽅可以点。其对应的标记有两个,⼀个是继续阅读⽂本,另⼀个是⽂字旁边的下箭头。⾸先⽤代码尝试点击⽂本的内容,发现会报错,然后再尝试使⽤下述代码点击下箭头(上图对应图标的位置为foldpagewg-icon ),发现成功加载更多页⾯!
# 向下滑动,到有“继续阅读”的位置停⽌
foldpagewg = driver.find_elements_by_xpath("//div[@class='foldpagewg-root']")
# 拖动到对应的位置
# 模拟点击,继续阅读
continue_read = driver.find_element_by_xpath("//div[@class='foldpagewg-icon']")
continue_read.click()
这样,我们就成功完成继续阅读的操作了!但⼀波未平,⼀波⼜起,这还没完,我们有碰上了另⼀个拦路虎——点击加载更多。
3、重复模拟点击点击加载更多
这部分其实和上⾯第⼆部分模拟点击继续阅读的步骤⾮常类似,但是需要注意的是,其中元素位置的名称都有⼀些微⼩的变化这⾥只要进⾏相应的修改即可(⼤框框变为了:pagerwg-root)。
然后同样我们审查图标对应的名称,为pagerwg-arrow-lower
接着,很令⼈⽆语的是,由于⽂章篇幅较长,点完了点击加载更多,⼜弹出了⼀个点击加载更多(⼦⼦代代⽆穷尽也)。
所以代码这⾥我们⽤个⼩技巧,使⽤try-except,反复尝试点击,知道不能进⾏点击为⽌。很幸运,针对⽰例⽂章,我们很快就点到了最末尾:
关于这部分重复疯狂点击的代码,实现如下:
attempts = 0
success = True
while attempts < 10and success:
try:
# 向下滑动,到有“点击加载更多”的位置停⽌
pagerwg = driver.find_elements_by_xpath("//div[@class='pagerwg-root']")
# 拖动到可见的元素
# 模拟点击,加载更多页⾯
more_text = driver.find_element_by_xpath("//span[@class='pagerwg-arrow-lower']")
more_text.click()
except:
success = False
attempts += 1
print('到底啦~~!请开始你的爬⾍表演>.<')
# 等待⽹页加载每次点击间隔2s
time.sleep(3)
4、解析爬取⽂库内容
最后我们再⽤⽼⽅法,进⾏内容的获取即可。
html = driver.page_source
bf1 = BeautifulSoup(html, 'lxml')
result = bf1.find_all(class_='txt')python的try和except用法
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时,缴纳增值税⽐较合算。