这是我们静态页面爬取的最后一篇了,主要针对的问题是翻页爬取。
先来观察一下翻页后的新页面地址是什么吧,我们可以看到,新页面的地址的设置很简单,就是改了个序号,第一页是1.shtml,第二页是2.shtml……最后一页就是18.shtml。
那就好办了,我们可以先用循环生成每页的地址,然后再按照前面的方法对每一页进行爬取就OK了。
url1=[]
for i in range(18):
url1.append('http://greenfinance.xinhua08.com/qyhjxxpl/'+str(i+1)+'.shtml')
url1
下面的思路就比较简单了,先从列表中取出第一页的地址,然后爬取第一页所包含的所有页面并保存,接着再取出第二页的地址,如此炮制……
总的代码如下:
import os
os.chdir('d:\\')
import requests
import re
url1=[]
#生成18个页面的地址
for i in range(18):
url1.append('http://greenfinance.xinhua08.com/qyhjxxpl/'+str(i+1)+'.shtml')
#挨个从每一页里取出这一页所包含的地址和标题
for j in range(len(url1)):
urlt=url1[j]
req=requests.get(urlt)
req.encoding=requests.utils.get_encodings_from_content(req.text)
#text1=re.findall('<div id="ctrlfscont" class="article-content"><p>(.*?)</p></div>',req.text,re.S)
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>|“|”','',str(text2).replace('\\n',''))
with open(ret[k]+'.txt','w') as f:
f.write(text2)
OK,到此为止大功告成。不到一会儿,300多篇文章的内容就保存好了,简直不要太容易哦。
有些朋友就不明白了,这些文本下载保存下来能有什么用呢?一般人我不会告诉他,我们可以用这些东西去做文本挖掘和热点发现。如果想继续玩,请关注下一波:文本挖掘和热点发现系列。