2020年已经悄然走过,午餐间隙再回味一下。
年初机会偶然的情况下接触了Python,从此就一发不可收拾,一个编程门外汉买书、查资料、看视频,一个人自学学的不亦乐乎。白天要上班,晚上和周末休息时间是我主要的学习时间,经常学的开心的时候到晚上很晚才睡,周末基本都是泡在图书馆。
从最开始的基础语法开始,然后爬虫,现在在学数据处理。其实我是由着性子在学,想到啥就学啥。最开始就感觉编程挺有意思的,就开始学。基础语法越学越有意思。看到Python能够爬虫在只学了基础语法的情况下开始学习爬虫,爬虫玩了几个月又开始学习数据处理。每个领域都是浅尝即止,简单的还能写写,太深就不太会了。
接下来聊聊学习中遇到的困惑和乐趣。
刚开始学的时候英文报错是最大的困惑,没啥英文功底,一遇到报错就要百度,看看有没有解决方法,刚开始学基础遇到的报错很多网上都有对应的解决方法。再后来就是用有道翻译,有时候翻译成中文后也会大概知道是啥问题了。慢慢深入后就是先看报错的类型,根据报错类型来判断是哪里报错,还是解决不了就继续百度。
一直都是自学,主要是看书学习,一年下来家里买的各种Python的书籍大概有七八本了,以前没接触过编程的,在学习的时候经常会遇到很多弄不明白的问题,有的是看书没看明白就继续在网上查资料,看视频教程,有的问题后来弄明白后就觉得这很简单的。最有趣的是学自定义函数,开始一直没弄明白return是干啥的。书上的第一个例子是通过def定义一个函数,然后传递一个位置参数进去,在函数体里面直接通过print把参数打印出来。后面讲return时就一直没弄明白为啥要return,直接打印不就好了吗。查了些资料把return弄明白了才发现原来自定义函数是这样用的。有的问题是一直都没怎么弄明白,到现在也不是很了解,比如装饰器,自己写程序一直也没写过装饰器,也没深入的去研究。有的问题是大概知道怎么用,但平时一般都没去用过。比如自定义类的继承。
接下来聊聊学习中那些有趣的事。学习了大半年的Python一直都没有在工作中中应用过,直到有一次一个偶然的机会在一个的网站上看到有我们目标客户的相关信息。仔细看了下这些信息全在ajax请求中,返回的是json类型数据。赶紧写爬虫代码,把网站上的客户信息都抓取下来,储存到本地Excel中。没有好用的ip,爬虫时只能爬一次设置几秒钟的等待时间。睡觉前开始爬,早上醒来后第一时间打开Excel 文档,需要的信息全在里面。第一次让我感觉花了半年多的时间是没有白费的。后面也陆续爬过一些感兴趣的资料,每次也都会很开心。下半年Python在我的工作中就会偶尔有些应用,比如表格处理,pdf转图片等等。
接下来的学习方向是数据处理学好后开始学习数据可视化。然后爬虫还需要深入的学习,代理的使用和模拟登陆、网站的验证、app爬取等都需要去学习。
以上就是这一年学习的总结,想到哪就说到哪。希望人生中会遇到更多志同道合的朋友一起学习交流。
第一次写博客,拼拼凑凑总算发布出来了。
下面附一段B站上爬李子柒的视频评论的代码:
"""爬B站李子柒视频的评论"""
import requests
from openpyxl import load_workbook
from fake_useragent import UserAgent
import time,random
class Replies():
def __init__(self,page):
self.url = 'https://api.bilibili.com/x/v2/reply?'
self.params = {'jsonp': 'jsonp',
'pn': page,
'type': '1',
'oid': '970616660',
'sort': '2'}
self.headers = {"cookie": "_uuid=68513A61-F401-9EC3-5242-263F161A09E014406infoc; buvid3=5B030A47-0730-446E-8E6"
"8-9B6A898B96D29"
"5173infoc; CURRENT_FNVAL=80; blackside_state=1; rpdid=|(u))JkRJ)|m0J'uY|))m~|l~; "
"DedeUserID=179960"
"127; DedeUserID__ckMd5=f4f0908bc0c46f67; SESSDATA=514a58c5%2C1624449172%2Cc2ad8*c1; bili_jct=1ac9c"
"ae030335cae6f501bac36b7b9c5; CURRENT_QUALITY=64; bp_t_offset_179960127=473670966456931256; bp_vide"
"o_offset_179960127=473821663974185912; bsource=search_baidu; sid=986nvy71; bfe_id=1e33d9ad1cb29251"
"013800c68af42315",
'user-agent':UserAgent().random,
"referer": "https://www.bilibili.com/"}
def load_page(self):
"""获取分页评论信息"""
response = requests.get(self.url, params=self.params, headers=self.headers)
time.sleep(random.randint(1,8))
if response.status_code == 200:
return response.json()
def analysis(self):
"""解析数据"""
reps = self.load_page().get('data', {}).get('replies', {})
if not reps:
print('当前页面有误,没有对应信息。')
return None
else:
return reps
def down_excel(self,path):
"把评论下载到本地Excel文档中"
reps = self.analysis()
wb = load_workbook(path)
sheet = wb.active
for r in reps:
r_m = r.get('content')
if r_m:
massage = r_m.get('message').replace('\n', ' ')
else:
massage = ''
massage = massage # 当前评论信息
like = r.get('like') # 点赞数
rcount = r.get('rcount') # 其他用户评论数
member = r.get('member')
uname = member.get('uname') # 用户昵称
sign = member.get('sign') # 用户签名
sex = member.get('sex') # 用户性别
nameplate = member.get('nameplate') # 用户勋章信息
if nameplate:
name = nameplate.get('name') # 勋章名称
level = nameplate.get('level') # 勋章类型
nid = nameplate.get('nid') # 勋章等级
else:
name = level = nid = ''
level_info = member.get('level_info') # 会员等级相关信息信息
if level_info:
current_level = level_info.get('current_level') # 会员等级
else:
current_level = ''
up_action = r.get('up_action')
if up_action:
up_like = up_action.get('like') # up主是否喜欢
if up_like:
up_like = '喜欢'
else:
up_like = ''
up_reply = up_action.get('reply') # up主是否回复
if up_reply:
up_reply = '是'
else:
up_reply = ''
else:
up_like=up_reply = ''
user = [uname, sex, massage, like,rcount, sign, current_level,name,level,nid,up_like, up_reply]
sheet.append(user)
wb.save(path)
path = r'.\B站李子柒视频评论.xlsx'
columns=['用户名','性别','评论','喜欢数','回复数','用户签名','会员等级','勋章','勋章类型','勋章等级','up主喜欢','up主回复']
wb = load_workbook(path)
sheet = wb.active
sheet.append(columns)
wb.save(path)
for page in range(1, 183):
"构造页面"
print(f'第{page}页。。。')
ua = UserAgent().random
replies = Replies(page)
try:
replies.down_excel(path)
except Exception as err:
print(err)