您的位置:首页 > 编程语言 > Python开发

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

2016-01-06 00:00 495 查看
好了,前面也进行了几次失败的尝试,我来总结一下啊
首先,我们所有的尝试本质上是基于一个方法,直接将获取出来的所有数据一次性删除。我们选择了一个看似最简单的方法,我们将数据获取出来之后想直接将所有数据一次性删除,一劳永逸,现实是我们失败了,但没关系这是一个很好的做法,在面对事情的时候一开始先尝试最简单的方法,这是一个很好的选择,只是我们运气不好罢了。其实我觉得上一小节还是很重要的,这些问题都是我在学习过程中遇到的,刚好有机会一起整理出来,希望能给遇到相同问题的人一个解决的思路
既然前面的尝试不成功,那么我们就来换一种思路,我不能一次性把你全部删除,那我一条一条的删除总可以了吧
好了,方向已经找好了,现在来考虑细节
我觉得一开始处理很多条数据的话会很容易造成混乱,所以我决定只删除一条数据看看是什么结果,前面也已经说过了,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()

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



这说明我们的这个尝试应该是奏效的,现在我们来想想怎么将这个方法应用到我们所有要删除的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()

结果是这样的



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

好了,我们已经能够按照原来的格式将文章正文下载下来,这个实例到这里就基本完成了,我们加上写入文件的部分来看看最终的效果是怎样的吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 爬虫