python-74:按原格式下载BS4官方文档

好了,前面也进行了几次失败的尝试,我来总结一下啊
首先,我们所有的尝试本质上是基于一个方法,直接将获取出来的所有数据一次性删除。我们选择了一个看似最简单的方法,我们将数据获取出来之后想直接将所有数据一次性删除,一劳永逸,现实是我们失败了,但没关系这是一个很好的做法,在面对事情的时候一开始先尝试最简单的方法,这是一个很好的选择,只是我们运气不好罢了。其实我觉得上一小节还是很重要的,这些问题都是我在学习过程中遇到的,刚好有机会一起整理出来,希望能给遇到相同问题的人一个解决的思路
既然前面的尝试不成功,那么我们就来换一种思路,我不能一次性把你全部删除,那我一条一条的删除总可以了吧
好了,方向已经找好了,现在来考虑细节
我觉得一开始处理很多条数据的话会很容易造成混乱,所以我决定只删除一条数据看看是什么结果,前面也已经说过了,find()函数是返回匹配到的第一个结果,就是它了,拟定的大致流程应该是:使用find()函数获取第一个要删除的标签,然后使用clear()进行删除,再将结果输出看是否成功,根据流程我写下了这样的代码:

import urllib2
from bs4 import BeautifulSoup

url = 'http://beautifulsoup.readthedocs.org/zh_CN/latest/#'
request = urllib2.Request(url)
response = urllib2.urlopen(request)
contents = response.read()
soup = BeautifulSoup(contents)
result = soup.find(itemprop="articleBody")
result.find(attrs={"class": "headerlink"}).clear()
print result.get_text()

结果显示第一个符号已经被删除了

172043_9GK3_2429887.png

 这说明我们的这个尝试应该是奏效的,现在我们来想想怎么将这个方法应用到我们所有要删除的tag中来

首先我第一个想的是在循环里面实现,先设置一个while循环,判断find(attrs={"class": "headerlink"})的返回值,当返回值不为空时一直使用find函数将第一个删除标签找出来并将它删除,当返回值为空时执行另外的操作

前面为了更好的获取全部数据我们使用了find_all函数,find_all 返回的是一个列表,既然是列表,那我应该可以对它进行操作,我可以直接遍历这个列表并对列表里面的每一个元素做删除处理,这也是一个很好的尝试而且看起来比上衣个要好一点,所以我写了下面的代码来进行测试

#!/usr/bin/env python
# -*- coding:UTF-8 -*-
__author__ = '217小月月坑'

'''
去掉不和谐的符号
'''

import urllib2
from bs4 import BeautifulSoup

url = 'http://beautifulsoup.readthedocs.org/zh_CN/latest/#'
request = urllib2.Request(url)
response = urllib2.urlopen(request)
contents = response.read()
soup = BeautifulSoup(contents)
result = soup.find(itemprop="articleBody")

for i in result.find_all(attrs={"class": "headerlink"}):
    i.clear()
print result.get_text()

结果是这样的

204323_p1J3_2429887.png

我们看到的结果中已经那个符号已经被删除了,说明了在使用列表遍历删除的方法是可以成功的

好了,我们已经能够按照原来的格式将文章正文下载下来,这个实例到这里就基本完成了,我们加上写入文件的部分来看看最终的效果是怎样的吧


转载于:https://my.oschina.net/u/2429887/blog/598568

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值