Hi,亲们,本博客只是个人瞎写着记录的:
到目前所使用过的数据库:
SAP HANA,SQL server,Greenplum,Mysql,Hadoop,MongoDB,Oracle**
所使用过的BI工具:
SAP BO,Tableau,PowerBI,Microsoft CUBE,Tabular等
先明确学习的内容:爬虫!!
去各种网站搜Python自学教学等教材。
最好用的还是 w3cschool的资料,不懂得问题直接去Bing搜,就是这么简单粗暴
边学习边应用:
个人是比较习惯于一一边学习一边实战的方式。所以一边学习爬虫相关的库, 一边直接应用
学习到的库:
BS4
urlopen
pyhdb
datetime
requests
re
也不能说是学完了,应该是有一点点知道了怎么应用,网上资料很多,不懂直接去Bing搜就出来一堆东西啦~哈哈哈哈
选定一个目标就直接实战:
称为我猎物的是某DM论坛。(因为个人比较喜欢游戏)
废话不多说下面就献丑自己乱写的代码,因为没有考虑效率问题,希望能得到更好的建议
先进入论坛首页,分析网站结构,找出规律。
1、发现搜索列右边已经给出所有游戏类目,找到定位就更简单了。
把所有类目都放在class=”scbar_hot_td”下的id=”scbar_hot”下 class=‘xi2’
Href=后面直接有每个类目地址
2、打开每个类目地址又发现一个很有规律性的逻辑~~哈哈太有趣
每个类目下都按一定规律写了游戏论坛地址和名称,让我更简单的利用爬虫来爬取数据提供了很强大的支持。
3、进入每款游戏论坛地址也一样,都按一定规律编写每个帖子的基本信息
比如class=”new” 存放帖子类型、帖子标题、热度等信息
class=”by”存放创建者创建日期、最后回复人以及最后回复日期等
class=”num”存放查看数、回复次数
提取每款游戏信息:
def getgrand(url):
#URL就是网页地址
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'} # 设置头文件信息 #
response = requests.get(url, headers=headers).content # 提交requests get 请求
soup = BeautifulSoup(response, "html.parser") # 用Beautifulsoup 进行解析
commid = soup.findAll('a', class_='xi2') ##这里找出所有xi2类
for commid2 in commid[2:-1]: ##爬取论坛首页
href=commid2.get("href") ##这里要抽取每个游戏类目地址
if len(href.split("-"))>=2 :
id=href.split("-")[1] ##这里要抽取每个类目ID,后面做数据模型的时候用
site=url+href #完整的游戏类目地址
print(site)
cate=commid2.text #这里要抽取每个游戏类目名称
if check_contain_chinese(cate) == True: ## 相当于数据清洗,因为抽取有可能不是类目名称,排除不是中文的名称
response2 = requests.get(site, headers=headers).content # 提交requests get 请求
soup2= BeautifulSoup(response2, "html.parser") # 用Beautifulsoup 进行解析
catmid=soup2.findAll('dt')
intohana_grandcat(conn, id, cate, site)##导入到HANA数据库里 建立类目维表
# print(catmid)
# print(cate)
for catmid2 in catmid: ##爬取每个游戏首页
a=catmid2.findAll("a")[0]
href2=a.get("href")
gamename=a.text ## 提取游戏名称
# print(gamename)
if (len(href2.split("-"))>=2) & (href2[-4:]=="html") : ##数据清洗,清理垃圾数据
site2=url+href2 ## 提取出每款游戏地址
id2=href2.split("-")[1] ##每款游戏ID
# print(a)
# print(id2)
# print(site2)
intohana_game(conn, id, cate, id2, gamename, site2) ###建立游戏维度维表
getdetail(site2,conn,id,id2,gamename) ## get detail of blog information ##要爬取每个游戏论坛地址
爬取每个游戏论坛地址:
def getdetail(site,conn,GRAND_ID,GAME_ID,GAME_NAME): ## get detail of blog information
globals() #定义所用到的所有全局变量
type=''
theme=''
replynum=''
readnum=''
editor=''
createdate=''
lastreply=''
lastreplydate=''
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'} # 设置头文件信息 #
response3 = requests.get(site, headers=headers).content # 提交requests get 请求
soup3 = BeautifulSoup(response3, "html.parser") # 用Beautifulsoup 进行解析
gamemid = soup3.findAll('th', class_='new')
td = soup3.findAll('td', class_='by')
for tbody in soup3.findAll('tbody'): ##对每个tbody进行解析
for tr in tbody.findAll('tr'): ##对每个tbody的tr进行解析
for new in tr.findAll('th', class_='new'): ##对每个tbody的tr下class_=new进行解析
em = new.find('em') #抽取帖子类型
if em: ##数据清洗
type = em.text[1:-1]
else:
type = ''
theme = new.find('a', class_='s xst').text #抽取帖子主题
num = tr.find('td', class_='num') ###get reply & read #抽取帖子查看和回复次数
if num: ##数据清洗
replynum = num.find('a').text
readnum = num.find('em').text
else:
replynum='0'
readnum='0'
# print(type, theme, replynum, readnum)
by = tr.findAll('td', class_='by') # get editor & date #抽取每个帖子 创建者和最后回复人
if by: ##数据清洗
for uby in by[:1]: # get editor & date
createdate = uby.find('em').text
editor = uby.find('cite').text
# print(editor,createdate)
for uby in by[1:]: # get editor & date
lastreply = uby.find('cite').text
lastreplydate = uby.find('em').text
# print(editor, createdate, lastreply, lastreplydate)
# print(lastreply, lastreplydate)
intohana_blogdetail(conn,GRAND_ID,GAME_ID,GAME_NAME,type,theme,replynum,
readnum,editor,createdate,lastreply,lastreplydate,current_daytime) # 对每条数据逐步insert到数据库表建立Fact实时表
整个代码发布到GIT上,做了点简单的现状分析
https://github.com/zangmeisim/YouminAnalysis
PyCharm
SAP HANA
SAP BO
EXCEL
1、不知道怎么改进代码,就感觉做的太粗糙,希望有人指导
2、分析目的不明确,导致抽取的数据没有目的性。
3、希望有大神能教点分析方法。