对历年高考满分作文的爬取整理

作业要求

1.选一个自己感兴趣的主题。

2.网络上爬取相关的数据。

3.进行文本分析,生成词云。

4.对文本分析结果解释说明。

5.写一篇完整的博客,附上源代码、数据爬取及分析结果,形成一个可展示的成果。

 作文网  网址:http://www.zuowen.com   

 作文网提供专业、原创中小学生作文,包括中考满分作文、高考满分作文、零分作文、优秀作文大全、作文素材、作文辅导、英语作文等,欢迎大家踊跃投稿。

 此次试验主要是爬取历年的高考满分作文数据,并制作词云。

 首先是高考满分作文第二页的截图:

对历年高考满分作文的爬取整理_第1张图片

  高考满分作文的首页链接为:http://www.zuowen.com/gaokaozw/manfen/index.shtml不难看出只有首页是用的index.shtml,接下来的所有数据页都是用的"inde_"+"数字"的组合形式作为子页面的地址的。接下来就要看看页面的源代码了,代码示例如下:

对历年高考满分作文的爬取整理_第2张图片

从代码中不难发现在artbox_l下的artbox_l_t为标题同时有链接地址,而artbox_l_c则为概述,同时也有链接地址,这样就可以找出相应的文章信息了。

代码如下:

import requests
from bs4 import BeautifulSoup
import re
import pandas
from datetime import datetime 
import random
from wordcloud import WordCloud
import matplotlib.pyplot as plt

url = 'http://www.zuowen.com/gaokaozw/manfen/index.shtml'

list =[]
#获取代理IP(获取的代理IP很多不能用,因此不适用)

#def get_ip_list(url, headers):
#    web_data = requests.get(url, headers=headers)
#    soup = BeautifulSoup(web_data.text, 'lxml')
#    ips = soup.find_all('tr')
#    ip_list = []
#    for i in range(1, len(ips)):
#        ip_info = ips[i]
#       tds = ip_info.find_all('td')
#        ip_list.append(tds[1].text + ':' + tds[2].text)
#    return ip_list

#def get_random_ip(ip_list):
#    proxy_list = []
#    for ip in ip_list:
#       proxy_list.append('http://' + ip)
#    proxy_ip = random.choice(proxy_list)
#    proxies = {'http': proxy_ip}
#   return proxies

#if __name__ == '__main__':
#    url = 'http://www.xicidaili.com/nn/'
#   headers = {
#       'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'
#    }
#   ip_list = get_ip_list(url, headers=headers)
#   proxies = get_random_ip(ip_list)
#  print(proxies)
    
#获取高考满分作文数据
def getListFullMarksArticle(url):
    #使用获取的代理IP
    #res = requests.get(url,headers=headers,proxies=proxies)
    res = requests.get(url)
    res.encoding = 'GBK'  
    article0 = BeautifulSoup(res.text,"html.parser")  
    articleList = {}  
    for article in article0.select('.artbox_l'):     
        list.append(getAllArticle(articleList,article))
    
    

def getAllArticle(articleList,article):
    
    articleList['URL'] = article.select('.artbox_l_t')[0].select("a")[0]['href']
    articleList['TITLE'] = article.select(".artbox_l_t")[0].select("a")[0].text#标题
    articleList['DATE'] = article.select(".artbox_l_t")[0].select("span")[0].text#日期
    articleList['DESCRIPTION'] = article.select(".artbox_l_c")[0].select("a")[0].text#描述

    url= article.select('.artbox_l_t')[0].select("a")[0]['href']
    title = article.select(".artbox_l_t")[0].select("a")[0].text#标题
    time = article.select(".artbox_l_t")[0].select("span")[0].text#日期
    Decription = article.select(".artbox_l_c")[0].select("a")[0].text#描述

    print('\n\n标题',title,'\n时间',time,'\n概述',Decription)
    return(articleList)

#循环总页数进行输出               
for i in range(2,4):
    allUrl='http://www.zuowen.com/gaokaozw/manfen/index_{}.shtml'.format(i)
    getListFullMarksArticle(allUrl)
    
#保存数据
df = pandas.DataFrame(list)

df.to_excel('FullArticleList.xlsx')

#制作词云
lo = open ('FullArticleList.xlsx','r',encoding='ISO-8859-1').read()
#lo = open ('FullArticleList.xlsx','r','GBK').read()
#lo = open ('FullArticleList.xlsx','r','GB2312').read()
#lo = open ('FullArticleList.xlsx','r','ASCII').read()
#lo = open ('FullArticleList.xlsx','r','ISO-8859-8').read()
#lo = open ('FullArticleList.xlsx','r','ISO-8859-7').read()
FullMarks = WordCloud().generate(lo)
plt.imshow(FullMarks)
plt.show()

  正确的结果如下(在Python中打印以及输出在Excel中的正确结果):

对历年高考满分作文的爬取整理_第3张图片

对历年高考满分作文的爬取整理_第4张图片

 

 对历年高考满分作文的爬取整理_第5张图片

对历年高考满分作文的爬取整理_第6张图片

整体的结果就是编码不正确,词云无法正确显示,还有使用代理IP的话,很多代理IP无法使用(无法连接)。

转载于:https://www.cnblogs.com/lfsm/p/7768911.html

你可能感兴趣的:(对历年高考满分作文的爬取整理)