做好事要趁白天,所以上次晚上没有整理完的部分除了直接补在上篇csdn_Part 03 编程部分 上篇以外,还需要把自定义函数及爬虫部分的给补上,今天最好把笔记全部补完!好推进下一部分,虽然数据分析理论知识并不作为编程的主要思想,但是配合统计学理论,在数据处理及后续发展中还是占很重的比例,所以需要提上日程。
【章节关键词】:匿名函数、自定义函数 | 爬虫三定义、基础爬虫
目录
第六章 自定义函数
自定义函数有两个主要作用,①定制化需求;②避免重复编写代码。
匿名函数
定义 Lambda 关键字 没有名称 所有代码一行内完成
语法 lambda parameters : function_expression
↓ 关键字 ↓形参,多个用“,”隔开 ↓具体函数体
# e.g:统计元素次数并排序
list6 = ['A','A','B','C','A','B','A','B','A','B','A','B','C','B']
res = {}
for i in set(list6):
res[i] = list6.count(i)
res
#第二种方式
list7 = ['A','A','B','C','A','B','A','B','A','B','A','B','C','B']
list7 = sort(key:lambda x:x[1],reverse=True)
#x[1]:取序列第二个元素 reverse=True:升序
自定义函数
使用场景:关键字 def(define),用来构造逻辑复杂的解决问题函数体
语法: def func_name(para):
语句
return
案例:猜数游戏
def guess_num(Min,Max):
number = random.randint(Min,Max)
while True:
guess = int(input("请在{}与{}之间猜个数".format(Min,Max)))
if guess < number:
min = guess
print('偏小,在{}到{}之间再猜'.format(min,max))
elif guess > number:
max = guess
print('偏大,在{}到{}之间再猜'.format(min,max))
else:
print("猜对了!\n游戏结束")
break #退出循环体def guess_num(Min,Max):
number = random.randint(Min,Max)
while True:
guess = int(input(请在{}与{}之间猜个数).format(Min,Max))
if guess < number:
min = guess
print('偏小,在{}到{}之间再猜'.format(min,max))
elif guess > number:
max = guess
print('偏大,在{}到{}之间再猜'.format(min,max))
else:
print("猜对了!\n游戏结束")
break #退出循环体
接下来,两个例子用来熟悉:
# Ex 10 1).计算圆的周长、面积、球的体积
# 2).构造多数据源,导入合并,读取并合成 两个函数[os.lisdir | pd.concat]
练习没有敲,留待自行练习。
第七章 网络爬虫的介绍与实践
这章节的内容主要是为了理解爬虫的三个流程,包括基础网络爬虫的套路。
网络爬虫的介绍
定义:网络爬虫是按照一定规则,自动抓取万维网信息的程序式脚本。
典型应用:搜索引擎、今日头条、竞品分析
爬虫流程:
- 发送请求
- 返回请求
- 数据存储
涉及包和函数
import request(发送请求) | re(正则表达式匹配) | bs4(美丽汤包,解析网页)
request.get( ) | re.findall( ) | bs4.BeautifulSoup( )
案例(静态爬取):1) https:www.redbull.com.cn/about/tranch 抓取红牛分公司信息
# 关键匹配语句
re.findall('<h2>(.*?)</h2>',response.text) #匹配到标题
soup.findAll(name='p',attrs={'class':mailIcc}) # ← bs4
# 便签清洗 i:text(infor结果)
2) 链家二手房信息
储存链接 / 获取结果(响应码 - 403/200) /反爬机制 请求头 伪造
# 关键匹配语句
total = [float(i.text[:-1] for i in suop.findAll(name='div',attrs={'class':totalPrice}))]
# `
# `
# `
这里针对练习扩展补充一些想法:
- 可以做个小练习:爬取链家,并用网页展示结果(可视化),其中对结果排序,综合,应用租房信息
- 其中涉及到的反爬机制,解决并写下思路过程,最好是到网络层传输层的理解
- 将**/**/**等职位名称/多城市/条件,作为检索条件,爬取个性化结果,多源数据组合?
引入:动态和静态区别在于,下一页内容,动态加载数据的页面URL不变,而静态的URL做规律变化。
案例(动态爬取):天气提取,异步存储,一般使用Json,RHX,多文件实现,这里需要使用F12开发者模式(找到异步文件)
tianqi.2345.com/wea_history/58362.json →url(json)
# 关键匹配语句
re.findall('ymd:"[\d-]+"',response.text) #匹配到日期
这部分纸质笔记就整理完了。具体源码见github上。