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

好了,前面也进行了几回失败的尝试,我来总结一下啊
首先,咱们全部的尝试本质上是基于一个方法,直接将获取出来的全部数据一次性删除。咱们选择了一个看似最简单的方法,咱们将数据获取出来以后想直接将全部数据一次性删除,一劳永逸,现实是咱们失败了,但不要紧这是一个很好的作法,在面对事情的时候一开始先尝试最简单的方法,这是一个很好的选择,只是咱们运气很差罢了。其实我以为上一小节仍是很重要的,这些问题都是我在学习过程当中遇到的,恰好有机会一块儿整理出来,但愿能给遇到相同问题的人一个解决的思路
既然前面的尝试不成功,那么咱们就来换一种思路,我不能一次性把你所有删除,那我一条一条的删除总能够了吧
好了,方向已经找好了,如今来考虑细节
我以为一开始处理不少条数据的话会很容易形成混乱,因此我决定只删除一条数据看看是什么结果,前面也已经说过了,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

相关文章
相关标签/搜索