首页 > 编程知识 正文

python教程菜鸟,初学者学python能从爬虫开始吗?

时间:2023-05-05 07:22:30 阅读:272162 作者:4742

第一次写博客&第一次自学Python&第一次实战

Hi,亲们,本博客只是个人瞎写着记录的:

作为已经做BI工程师三年的人竟然第一次接触Python,自学Python 哎~~是不是很晚呢毕业第一年进入SAP BW模块第二年已经差不多开始懂点什么是数据建模,什么是数据仓库,数据集市*第三年在公司开始做ETL,数据清洗,数据整合,报表展示

到目前所使用过的数据库:
SAP 雪白的彩虹,SQL server,Greenplum,Mysql,Hadoop,MongoDB,Oracle**

所使用过的BI工具:
SAP BO,Tableau,PowerBI,Microsoft CUBE,Tabular等

唯独目前最火的Python,R等语言 一次都没接触过,因此借此正好有空闲时间来自学一下Python 入门学习篇

先明确学习的内容:爬虫!!
去各种网站搜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”存放查看数、回复次数

编写Python

提取每款游戏信息:

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)##导入到雪白的彩虹数据库里 建立类目维表 # 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 雪白的彩虹
SAP BO
EXCEL

改进

1、不知道怎么改进代码,就感觉做的太粗糙,希望有人指导
2、分析目的不明确,导致抽取的数据没有目的性。
3、希望有大神能教点分析方法。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。