按照老师所讲,仅供参考
前面为大数据的相关概念,后面为爬虫概念及使用
实际用书为大数据导论。。。
所有能输入到计算机并被计算机程序处理的符号的总称
近似性,增量性,归纳性
思维模式:采样 vs 全样,精确 vs 非精确,因果 vs 关联
是指从真实世界对象中获得原始数据的过程,可靠性和时效性
常用方法:传感器,日志,爬虫,众包
数据离散化,等距,等频,优化离散
以下是客户收入属性的取值,请按照上述三种方案进行分箱处理
800 1000 1200 1500 1500 1800 2000 2300 2500 2800 3000 3500 4000 4500 4800 5000
将数据集合分组为若干簇,在簇外的值即为孤立点,这些孤立点就是噪声数据,对这些孤立点进行删除或替换操作。相似或相邻近的数据聚合在一起形成各个聚类集合,在这些聚类集合之外的数据数据。
通过发现两个相关的变量之间相关关系,构造一个回归函数使得该函数能够最大程度地满足两个变量之间的关系,使用这个函数来平滑数据。
通常采用过滤数据的方法来处理冗余数据:
基于数据的完整性约束,包含依赖、函数依赖、条件函数依赖等
使得每个经过实体识别后得到的对象簇在将现实世界中指代的是同一实体。
解决的问题:冗余问题,重名问题
两类技术:
互联网充斥着我们的日常生活,我们的数据不可能完全的掌握在自己手中,我们在网络上传输任何信息都能被传输平台获取到甚至被一些人非法截取。我们能做的就是,不在钓鱼平台输入我们的数据,让不法分子有机可乘。正规的平台即便是能获取我们的数据,也不会做出侵犯隐私的行为。
要让其做出正规的承诺不会利用客户信息进行隐私侵犯。如在使用手机软件的时候,会获取地理位置、短信等,需要让其保证仅用来使软件正常运行,而不是把获取的隐私信息非法分享出去。
数据管理技术是指对数据进行分类、编码、存储、索引和查询,是大数据处理流程中的关键技术,负责数据从落地存储(写) 到查询检索(读) 的核心系统
数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库
核心是将数据保存在由行和列组成的简单表中,而不是将数据保存在一个层次结构中
特点:
1、数据集中控制;
2、数据独立性高;
3、数据共享性好;
4、数据冗余度小;
5、数据结构化;
6、统一的数据保护功能。
分布式文件系统建立在通过网络联系在一起的多台价格相对低廉的服务器上,将要存储的文件按照特定的策略划分成多个片段分散放置在系统中的多台服务器上
网络爬虫也被称为网络蜘蛛、网络机器人,是一个自动下载网页的计算机程序或自动化脚本。
网页都有自己唯一的URL(统一资源命令符,如https://www.baidu.com/)来进行定位
网页都使用HTML(超文本标记语言)来描述页面信息
网页都使用HTTP/HTTPS(超文本传输协议)协议来传输HTML数据
基于内容评价的爬行策略
基于链接结构评价的爬行策略
基于增强学习的爬行策略
基于语境图的爬行策略
统一更新法:以相同的频率访问所有网页,不受网页本身的改变频率的影响。
个体更新法:根据个体网页的改变频率来决定重新访问各页面的频率。
基于分类的更新法:爬虫按照网页变化频率分为更新较快和更新较慢的网页类别,分别设定不同的频率来访问这两类网页。
基于领域知识的表单填写:该种方法一般会维持一个本体库,通过语义分析来选取合适的关键词填写表单。
基于网页结构分析的表单填写:这种方法一般无领域知识或仅有有限的领域知识,将HTML网页表示为DOM树形式,将表单区分为单属性表单和多属性表单,分别进行处理,从中提取表单各字段值。
User-agent: *
Disallow: /
Allow: /public/
提供多种协议类型和函数,可用于建立TCP和UDP连接
HTTP协议采用了请求/响应模型。
HTTP状态码是用来表示网页服务器响应状态的3位数字代码,按首位数字分为5类状态码
Cookie机制可记录用户状态,服务器可依据Cookie对用户状态进行记录与识别。
静态网页是相对于动态网页而言,是指没有后台数据库、不含程序和不可交互的网页。
urllib3.request(method,url,fields=None,headers=None,**urlopen_kw)
(2)请求头处理
在request方法中,如果需要传入headers参数,可通过定义一个字典类型实现。定义一个包含User-Agent信息的字典,使用浏览器为火狐和chrome浏览器,操作系统为“Windows NT 6.1; Win64; x64”,向网站“https://www.jd.com/index.html”发送带headers参数的GET请求,hearders参数为定义的User-Agent字典。
(3)Timeout设置
为防止因为网络不稳定、服务器不稳定等问题造成连接不稳定时的丢包,可以在请求中增加timeout参数设置,通常为浮点数。
依据不同需求,timeout参数提供多种设置方法,可直接在URL后设置该次请求的全部timeout参数,也可分别设置该次请求的连接与读取timeout参数,在PoolManager实例中设置timeout参数可应用至该实例的全部请求中。
(4)请求重试设置
urllib3库可以通过设置retries参数对重试进行控制。默认进行3次请求重试,并进行3次重定向。自定义重试次数通过赋值一个整型给retries参数实现,可通过定义retries实例来定制请求重试次数及重定向次数。
(5)生成完整HTTP请求
使用urllib3库实现生成一个完整的请求,该请求应当包含链接、请求头、超时时间和重试次数设置。
requests库是一个原生的HTTP库,比urllib3库更为容易使用
requests.request.method(url,**kwargs)
hd= {'User-Agent':'Chorme/10'}
r = request.get(url,headers=hd)
(2)查看状态码与编码
当requests库猜测错时,需要手动指定encoding编码,避免返回的网页内容解析出现乱码。
使用detect库检测
(3)请求头与响应头处理
requests库中对请求头的处理与urllib3库类似,也使用headers参数在GET请求中上传参数,参数形式为字典。使用headers属性即可查看服务器返回的响应头,通常响应头返回的结果会与上传的请求参数对应。
(4)Timeout设置
在requests库中通过设置timeout这个参数实现,超过该参数设定的秒数后,程序会停止等待。
(5)生成完整HTTP请求
一个完整的GET请求,该请求包含链接、请求头、响应头、超时时间和状态码,并且编码应正确设置。
利用decode函数对requests.content解决中文乱码
import requests
url = "http://xxx.com"
r = requests.get(url)
print(r.content.decode("gbk"))
正则表达式是一种可以用于模式匹配和替换的工具,可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与待比较字符串或文件进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。
import re
example_obj = "1. A small sentence. - 2. Another tiny sentence. "
re.findall('sentence',example_obj) #从字符串任意位置查找,可以找到所有满足匹配条件的结果,并以列表的形式返回!!!
re.search('sentence',example_obj) #可以扫描整个字符串并返回第一个成功的匹配!!!
re.sub('sentence','SENTENCE',example_obj) ##替换
re.match('.*sentence',example_obj) ##必须从字符串开头匹配!!!
常用广义化符号
1、英文句号“.”:能代表除换行符“\n”任意一个字符;
2、字符类“[]”:被包含在中括号内部,任何中括号内的字符都会被匹配;
3、管道“|”:该字符被视为OR操作;
使用正则表达式无法很好的定位特定节点并获取其中的链接和文本内容,而使用Xpath和Beautiful Soup能较为便利的实现这个功能。
lxml.etree.HTML(text, parser=None, *, base_url=None)
BeautifulSoup("data") #通过字符串创建
BeautifulSoup(open("index.html")) #通过HTML文件创建
BeautifulSoup.prettify(self, encoding=None, formatter='minimal')
对象类型
1.Tag对象类型
Tag有两个非常重要的属性:name和attributes。name属性可通过name方法来获取和修改,修改过后的name属性将会应用至BeautifulSoup对象生成的HTML文档。
2.NavigableString对象类型
NavigableString对象为包含在Tag中的文本字符串内容,如“The Dormouse‘s story”中的“The Dormouse’s story”,使用string的方法获取,NavigableString对象无法被编辑,但可以使用replace_with的方法进行替换。
3.BeautifulSoup对象类型
BeautifulSoup对象表示的是一个文档的全部内容。大部分时候,可以把它当作Tag对象。 BeautifulSoup对象并不是真正的HTML或XML的tag,所以并没有tag的name和attribute属性,但其包含了一个值为“[document]”的特殊属性name。
4Comment对象类型
Tag、NavigableString、BeautifulSoup几乎覆盖了html和xml中的所有内容,但是还有一些特殊对象,文档的注释部分是最容易与Tag中的文本字符串混淆的部分。Beautiful Soup库中将文档的注释部分识别为Comment类型,Comment对象是一个特殊类型的NavigableString对象,但是当其出现在HTML文档中时,Comment对象会使用特殊的格式输出,需调用prettify方法。
BeautifulSoup.find_all(name,attrs,recursive,string,**kwargs)
将数据存储为JSON文件
json.dump(obj,fp,skipkeys=False,ensure_ascii=True,check_circular=True,allow_nan=True,cls=None,indent=None,separators=None,encoding='utf-8', default=None, sort_keys=False, **kw)
page = urllib.request.urlopen('https://www.cnki.net/') #获取网页
html = page.read().decode('utf-8')#转换成utf-8
title=re.findall('(.+) ',html)#获取title之间所有内容
print (title)#输出
https://weixin.sogou.com/
看到路径是名为topwords的ol下的li下的a
这里不直接 查找i标签后的,因为它的i标签不是全有特殊class名(什么辣鸡玩意,白费好久功夫)
html_doc = "https://weixin.sogou.com/"#网页链接
req = urllib.request.Request(html_doc) #构造请求
webpage = urllib.request.urlopen(req) #获取网页
html = webpage.read().decode('utf-8')#utf-8打开
soup = BeautifulSoup(html, 'html.parser')#指定html.parser解析器解析
str=[]
top=soup.find(name="ol", attrs={"id" :"topwords"})#找到id为topwords的ol标签
for child in top.find_all('a'):#找到子孙标签中所有a标签
#print(child.string)
str.append(child.string)#保存标签内容
filename='sougou.json'
with open(filename,'w') as file_obj:
json.dump(str,file_obj)#写入json文件
with open(filename) as file_obj:
str=json.load(file_obj)#从json文件读取
print(str)
url = "https://weixin.sogou.com/" #请求地址
response = requests.get(url= url) #返回结果
wb_data = response.text #文本展示返回结果
html = etree.HTML(wb_data) #将页面转换成文档树
str2=[]
content=html.xpath('//ol[@id="topwords"]/li/a/text()')#获取根节点下id为topwords的ol标签的子li标签的子a标签的内容
for item in content:
#print(item.encode('ISO-8859-1').decode('UTF-8'))
str2.append(item.encode('ISO-8859-1').decode('UTF-8'))#保存
filename2='sougou2.json'
with open(filename2,'w') as file_obj:
json.dump(str2,file_obj)#写入json文件
with open(filename2) as file_obj:
str2=json.load(file_obj)#读取json文件
print(str2)
动态网页仅仅提及,不写了
✿✿ヽ(゚▽゚)ノ✿完结撒花!