静态网页爬虫教程(4)同一页面多篇文章内容提取和保存

前面的文章中,我们已经成功的完成了对一篇文章的内容提取和保存。现在新的问题又来了,之前我们提取过的超链接有那么多,标题也有不少,怎么能只提取一篇文章而放弃一堆呢?别急,下面我们就开始说说多篇文章的内容提取和保存。聪明的朋友肯定早就猜到了,接下来我们要做的就是循环,话不多说,开始折腾。

        for k in range(len(reh)):
            urlt=reh[k]
            req=requests.get(urlt)         
            req.encoding=requests.utils.get_encodings_from_content(req.text)
            text2=re.findall('<div id="ctrlfscont" class="article-content"><p>(.*?)</p></div>',req.text,re.S)
            text2=re.sub('<p>|</p>|&ldquo;|&rdquo;','',str(text2).replace('\\n',''))
            with open(ret[k]+'.txt','w') as f:
                f.write(text2)

每次从超链接列表中取出一个,然后访问这个页面,接下来提取它的内容,最后将这篇文章的内容保存下来。是不是很简单?
看上去好像不错,可实际运行中会出现一个问题,会报出[errno 22] invalid argument: 这样的错误。查找了一下发现,有些文章的标题中含有windows文件命名时不能使用的字符,如*等,像有篇文章中出现的*ST,明明是个很正常的东西,可就是不能直接用于文件命名,没办法,只好自己处理一下,将这些字符另外替代掉。

        for k in range(len(reh)):
            urlt=reh[k]
            #将*换成st,自己能懂就好
            ret[k]=ret[k].replace('*','st')
            req=requests.get(urlt)
            req.encoding=requests.utils.get_encodings_from_content(req.text)
            text2=re.findall('<div id="ctrlfscont" class="article-content"><p>(.*?)</p></div>',req.text,re.S)
            text2=re.sub('<p>|</p>|&ldquo;|&rdquo;','',str(text2).replace('\\n',''))
            with open(ret[k]+'.txt','w') as f:
                f.write(text2)

总的代码如下:

import requests
import re
url='http://greenfinance.xinhua08.com/qyhjxxpl/'
req=requests.get(url)
req.encoding=requests.utils.get_encodings_from_content(req.text)
ret=re.findall('<h4>(.*?)</h4>',req.text,re.S)
reh=re.findall('<div class="newsinfo">.*?<a href="(.*?)">',req.text,re.S)
for k in range(len(reh)):
    urlt=reh[k]
    ret[k]=ret[k].replace('*','st')
    req=requests.get(urlt)
    req.encoding=requests.utils.get_encodings_from_content(req.text)
    text2=re.findall('<div id="ctrlfscont" class="article-content"><p>(.*?)</p></div>',req.text,re.S)
    text2=re.sub('<p>|</p>|&ldquo;|&rdquo;','',str(text2).replace('\\n',''))
    with open(ret[k]+'.txt','w') as f:
         f.write(text2)

效果也是可以的:
在这里插入图片描述
当然,这里还是有些问题,有些文章里依旧含有多余字符,可以自行在前面的代码中使用replace()增加一些内容一次性去除。
到目前为止,同一页面的多篇文章内容的提取和保存就已经完成了,过程还是很简单的吧,但还没结束,因为我们发现这才是第一页的,它每页都有20篇文章,我们要把所有的文章全部下载下来还需要翻页,所以接下来我们将继续多页面的多篇文章内容的提取和保存,请继续教程(5)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值