好了,前面也进行了几回失败的尝试,我来总结一下啊
首先,咱们全部的尝试本质上是基于一个方法,直接将获取出来的全部数据一次性删除。咱们选择了一个看似最简单的方法,咱们将数据获取出来以后想直接将全部数据一次性删除,一劳永逸,现实是咱们失败了,但不要紧这是一个很好的作法,在面对事情的时候一开始先尝试最简单的方法,这是一个很好的选择,只是咱们运气很差罢了。其实我以为上一小节仍是很重要的,这些问题都是我在学习过程当中遇到的,恰好有机会一块儿整理出来,但愿能给遇到相同问题的人一个解决的思路
既然前面的尝试不成功,那么咱们就来换一种思路,我不能一次性把你所有删除,那我一条一条的删除总能够了吧
好了,方向已经找好了,如今来考虑细节
我以为一开始处理不少条数据的话会很容易形成混乱,因此我决定只删除一条数据看看是什么结果,前面也已经说过了,find()函数是返回匹配到的第一个结果,就是它了,拟定的大体流程应该是:使用find()函数获取第一个要删除的标签,而后使用clear()进行删除,再将结果输出看是否成功,根据流程我写下了这样的代码:
python
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()
结果显示第一个符号已经被删除了函数
这说明咱们的这个尝试应该是奏效的,如今咱们来想一想怎么将这个方法应用到咱们全部要删除的tag中来学习
首先我第一个想的是在循环里面实现,先设置一个while循环,判断find(attrs={"class": "headerlink"})的返回值,当返回值不为空时一直使用find函数将第一个删除标签找出来并将它删除,当返回值为空时执行另外的操做测试
前面为了更好的获取所有数据咱们使用了find_all函数,find_all 返回的是一个列表,既然是列表,那我应该能够对它进行操做,我能够直接遍历这个列表并对列表里面的每个元素作删除处理,这也是一个很好的尝试并且看起来比上衣个要好一点,因此我写了下面的代码来进行测试
url
#!/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()
结果是这样的code
咱们看到的结果中已经那个符号已经被删除了,说明了在使用列表遍历删除的方法是能够成功的get
好了,咱们已经可以按照原来的格式将文章正文下载下来,这个实例到这里就基本完成了,咱们加上写入文件的部分来看看最终的效果是怎样的吧
it