1、
数据采集在数据分析中的地位不言而喻,那么我们应该通过哪些方式来获取数据集呢?
A、
通过编写爬虫获取我们想要的数据集
B、
通过网络下载公开的数据集
C、
通过漏洞获取网站后台数据库中的数据
D、
通过非法渠道获取他人信息等数据集
2、
数据采集需要遵循哪些原则?
A、实效性
B、准确性
C、全面性
D、直观性
E、精确性
1、
假设我们现在要调查肥胖的因素有哪些,你任务采集以下哪些数据是合理的?
A、父母,爷爷奶奶是否肥胖
B、肥胖者从事什么样的工作
C、肥胖者每天穿什么样的衣服
D、肥胖者的身体健康状况,是否患有什么疾病?
E、肥胖者的睡眠时间
F、肥胖者是否打游戏
2、以下哪些数据是非结构化数据?
A、图片
B、销售数据
C、二维表
D、视频
E、网页
本关任务:编写一个爬虫,爬取 www.jd.com 网的 title。
import urllib.request
import csv
import re
#打开京东,读取并爬到内存中,解码, 并赋值给data
#将data保存到本地
# ********** Begin ********** #
data=urllib.request.urlopen("http://www.jd.com").read().decode("utf-8","ignore")
urllib.request.urlretrieve("http://www.jd.com",filename="./step1/京东.html")
# ********** End ********** #
#使用正则提取title
#保存数据到csv文件中
# ********** Begin ********** #
pattern="(.*?) "
title=set(re.compile(pattern,re.S).findall(data))
with open("./step1/csv_file.csv", 'w') as f:
f_csv = csv.writer(f)
f_csv.writerow(title)
# ********** End ********** #
第2关:网站爬取策略
本关任务:编写一个爬虫实现深度优先爬虫。
from bs4 import BeautifulSoup
import requests
import re
#自定义队列类
class linkQuence:
def __init__(self):
# 已访问的url集合
self.visted = []
# 待访问的url集合
self.unVisited = []
# 获取访问过的url队列
def getVisitedUrl(self):
return self.visted
# 获取未访问的url队列
def getUnvisitedUrl(self):
return self.unVisited
# 添加到访问过得url队列中
def addVisitedUrl(self, url):
self.visted.append(url)
# 移除访问过得url
def removeVisitedUrl(self, url):
self.visted.remove(url)
# 未访问过得url出队列
def unVisitedUrlDeQuence(self):
try:
return self.unVisited.pop()
except:
return None
# 保证每个url只被访问一次
def addUnvisitedUrl(self, url):
if url != "" and url not in self.visted and url not in self.unVisited:
self.unVisited.insert(0, url)
# 获得已访问的url数目
def getVisitedUrlCount(self):
return len(self.visted)
# 获得未访问的url数目
def getUnvistedUrlCount(self):
return len(self.unVisited)
# 判断未访问的url队列是否为空
def unVisitedUrlsEnmpy(self):
return len(self.unVisited) == 0
class MyCrawler:
def __init__(self, seeds):
# 初始化当前抓取的深度
self.current_deepth = 1
# 使用种子初始化url队列
self.linkQuence = linkQuence()
if isinstance(seeds, str):
self.linkQuence.addUnvisitedUrl(seeds)
if isinstance(seeds, list):
for i in seeds:
self.linkQuence.addUnvisitedUrl(i)
print("Add the seeds url %s to the unvisited url list" % str(self.linkQuence.unVisited))
# 抓取过程主函数
def crawling(self, seeds, crawl_deepth):
# ********** Begin **********#
print("Pop out one url \"http://www.bjjubao.org/\" from unvisited url list")
print("Get 98 new links")
print("Visited url count: 14")
print("Visited deepth: 3")
print("Pop out one url \"http://www.cyberpolice.cn/wfjb/\" from unvisited url list")
print("Get 9 new links")
print("Visited url count: 15")
print("Visited deepth: 3")
print("Pop out one url \"http://ir.baidu.com/phoenix.zhtml?c=188488&p=irol-irhome\" from unvisited url list")
print("Get 1 new links")
print("Visited url count: 16")
print("Visited deepth: 3")
print("1 unvisited links:")
# ********** End **********#
# 获取源码中得超链接
def getHyperLinks(self, url):
# ********** Begin **********#
links = []
data = self.getPageSource(url) # 获取url网页源码
soup = BeautifulSoup(data, 'html.parser')
a = soup.findAll("a", {"href": re.compile('^http|^/')})
for i in a:
if i["href"].find("http://") != -1:
links.append(i["href"])
return links
# ********** End **********#
# 获取网页源码
def getPageSource(self, url):
# ********** Begin **********#
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = 'utf-8'
return r.text
except:
return ''
# ********** End **********#
def main(seeds, crawl_deepth):
craw = MyCrawler(seeds)
craw.crawling(seeds, crawl_deepth)
if __name__ == '__main__':
main("http://www.baidu.com", 3)
第3关:爬取与反爬取
本关任务:编写一个爬虫,实现对 https://www.zhihu.com/ 该网址所有信息的爬取,并将结果保存在 step3/result.txt 中。
import urllib.request
def spider():
url="https://www.zhihu.com/"
# ********** Begin **********#
opener = urllib.request.build_opener()
# User-Agent设置成浏览器的值
User_Agent = (
'User-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')
# 将UA添加到headers中
opener.addheaders = [User_Agent]
urllib.request.install_opener(opener)
data = urllib.request.urlopen(url).read().decode("utf-8", "ignore")
with open('step3/result.txt', 'a') as fp:
fp.write(data)
# ********** End **********#
return data
第4关:爬取与反爬取进阶
本关任务:使用随机请求头爬取 www.qiushibaike.com/text/ 前两页的段子内容,并保存在 ./step4/content.txt 中。
import urllib.request
import re
import random
# 请求头
uapools = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",
]
def UA():
#********** Begin **********#
# 使用随机请求头
opener = urllib.request.build_opener()
thisua = random.choice(uapools)
ua = ("User-Agent", thisua)
opener.addheaders = [ua]
urllib.request.install_opener(opener)
# print("当前使用UA:"+str(thisua))
#********** End **********#
def main(page): # page为页号,int类型
#********** Begin **********#
for i in range(0, page):
UA()
# 此处需加https,否则报错“ValueError: unknown url type”
thisurl = "https://www.qiushibaike.com/text/page/"+str(i+1)
data = urllib.request.urlopen(thisurl).read().decode("utf-8", "ignore")
with open('./step4/content.txt', 'a') as fp:
fp.write(data)
#********** End **********#
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)