码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构化与保存

时间:2018-04-17 19:35:56      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:etl   文件中   读数   index   count   end   date   head   attr   

import requests
from bs4 import BeautifulSoup
from datetime import datetime
import re
import pandas
import sqlite3
import pymysql
from sqlalchemy import create_engine


#获取点击次数
def getClickCount(newsUrl):
newId=re.search(‘\_(.*).html‘,newsUrl).group(1).split(‘/‘)[1]
clickUrl="http://oa.gzcc.cn/api.php?op=count&id={}&modelid=80".format(newId)
clickStr = requests.get(clickUrl).text
count = re.search("hits‘\).html\(‘(.*)‘\);", clickStr).group(1)
return count

#获取新闻详情
def getNewsDetail(newsurl):
resd=requests.get(newsurl)
resd.encoding=‘utf-8‘
soupd=BeautifulSoup(resd.text,‘html.parser‘)
# 2.将新闻数据结构化为字典的列表:
news={}
news[‘title‘]=soupd.select(‘.show-title‘)[0].text
#news[‘newsurl‘]=newsurl
info=soupd.select(‘.show-info‘)[0].text
news[‘dt‘]=datetime.strptime(info.lstrip(‘发布时间:‘)[0:19],‘%Y-%m-%d %H:%M:%S‘)
news[‘click‘] = int(getClickCount(newsurl))
if info.find(‘来源‘)>0:
news[‘source‘] =info[info.find(‘来源:‘):].split()[0].lstrip(‘来源:‘)
else:
news[‘source‘]=‘none‘
if info.find(‘作者:‘) > 0:
news[‘author‘] = info[info.find(‘作者:‘):].split()[0].lstrip(‘作者:‘)
else:
news[‘author‘] = ‘none‘
# news[‘content‘]=soupd.select(‘.show-content‘)[0].text.strip()

#获取文章内容并写入到文件中
content=soupd.select(‘.show-content‘)[0].text.strip()
writeNewsContent(content)

return news

def getListPage(listPageUrl):
res=requests.get(listPageUrl)
res.encoding=‘utf-8‘
soup=BeautifulSoup(res.text,‘html.parser‘)

newsList=[]
for news in soup.select(‘li‘):
if len(news.select(‘.news-list-title‘))>0:
a=news.select(‘a‘)[0].attrs[‘href‘]
newsList.append(getNewsDetail(a))
return (newsList)

#1.将新闻的正文内容保存到文本文件。
def writeNewsContent(content):
f=open(‘gzccNews.txt‘,‘a‘,encoding=‘utf-8‘)
f.write(content)
f.close()

def getPageNumber():
ListPageUrl="http://news.gzcc.cn/html/xiaoyuanxinwen/"
res=requests.get(ListPageUrl)
res.encoding=‘utf-8‘
soup=BeautifulSoup(res.text,‘html.parser‘)
n = int(soup.select(‘.a1‘)[0].text.rstrip(‘条‘))//10+1
return n


newsTotal=[]
firstPage=‘http://news.gzcc.cn/html/xiaoyuanxinwen/‘
newsTotal.extend(getListPage(firstPage))

n=getPageNumber()
for i in range(n,n+1):
listUrl= ‘http://news.gzcc.cn/html/xiaoyuanxinwen/{}.html‘.format(i)
newsTotal.extend(getListPage(listUrl))
# 3. 安装pandas,用pandas.DataFrame(newstotal),创建一个DataFrame对象df.
df=pandas.DataFrame(newsTotal)
#4. 通过df将提取的数据保存到excel 文件。
df.to_excel("new.xlsx")
# 5. 用pandas提供的函数和方法进行数据分析:
# 提取包含点击次数、标题、来源的前6行数据
print(df.head(6))
# 提取‘学校综合办’发布的,‘点击次数’超过3000的新闻。
print(df[df[‘click‘]>3000])
# 提取‘国际学院‘和‘学生工作处‘发布的新闻。
sou=[‘国际学院‘,‘学生工作处‘]
print(df[df[‘source‘].isin(sou)])
# 进取2018年3月的新闻
df1 = df.set_index(‘dt‘)
print(df1[‘2018-03‘])
df3 = df1[‘2018-04-13 16:19:02‘:‘2018-04-12 14:01:24‘]
# 6. 保存到sqlite3数据库
with sqlite3.connect(‘gzccdb.sqlite‘)as db:
df3.to_sql(‘gzcc05‘,con=db,if_exists=‘replace‘)
# 7. 从sqlite3读数据
with sqlite3.connect(‘gzccdb.sqlite‘)as db:
df2 = pandas.read_sql_query(‘SELECT * FROM gzcc05‘,con=db)

# 8. df保存到mysql数据库
conn = create_engine(‘mysql+pymysql://root:@localhost:3306/gzccnew?charset=utf8‘)
pandas.io.sql.to_sql(df,‘gzccnew‘,con=conn,if_exists=‘replace‘)












数据结构化与保存

标签:etl   文件中   读数   index   count   end   date   head   attr   

原文地址:https://www.cnblogs.com/cktcom/p/8868360.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!