欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Python程序设计与数据采集(微课版)-课后习题答案.docx

    • 资源ID:95177631       资源大小:64.50KB        全文页数:16页
    • 资源格式: DOCX        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Python程序设计与数据采集(微课版)-课后习题答案.docx

    第1章Python开发环境搭建与使用一、填空题1 Pip二、选择题1. A三、判断题1 .错四、简答题2 .略五、操作题3 .略4 . whl2. C3. 错4. 略5. 略6. math.factorial(20)7. random8. pillow3. BD 4. CD 5. ABCD3.错3.略4.错5.错内置类型、内置函数与运算符一、填空题1. 37.1二、选择题1 . B三、判断题1 .对6 .错2. -48.1, 2,2 . A3 .错7 .对3. -43, 4)3. D3.对8.错4. -39. False5310. False6. 54. C5. B4.对5.错9.错10.错四、程序设计题A = eval(input(1请输入集合 A:')B = eval(input('请输入集合 B:')print(f'A|B=nA&B=nA-B=nB-A=nAAB=')data = eval(input('输入包含若干正整数的列表:)result = list(filter(lambda num: num>8 and num%2=0, data) print(result)keys = eval(input(,输入包含若干正整数的列表keys:')values = eval(input(,输入包含若干正整数的列表values:')result = dict(zip(keysJ values) print(result)integers = eval(input('请输入包含若干正整数的列表:)max_last_digit = str(max(integersJ key=lambda num: str(num)-l)-l result = num for num in integers if str(num)-l=max_last_digit print(result)第3章程序控制结构elif path.endswith('.txt'):number = number + 1except: pass return numberprint(listDirWidthFirst('C:')3.from docx import Documentfrom poser import Composerdef main(filesfinal_docx): new_document = Document() composer = Composer(new_document) for fn in files:composer.append(Document(fn)composer.save(final_docx)main('l.docx', '2.docx', '3.docx', 'result2,docx') 4.from os import removefrom docx2python import docx2pythonfrom PIL import Imageobj = docx2python('E:/带公式的文档.docx')for name, imageData in obj.images.items(): if name.endswith('.wmf'):#保存wmf格式的矢量图形 with open(name> 'wb') as fp: fp.write(imageData)#把wmf格式的矢量图形转换为png格式的图像with Image.open(name) as im:#使用高分辨率加载图形,默认分辨率72dpi比较模糊 im.load(dpi=300)im.save(name:-3+'png')#删除wmf文件 remove(name) 5.from re import subfrom os import listdir, removefrom os.path import splitextfrom moviepy.editor import VideoFileClip from pytesseract import image_to_string from PIL import Imagevideo_file =,自己的视频文件.mp4, video = VideoFileClip(video_file) #提取视频图像#小帧速可以生成少量图片video.write_images_sequence('frame%4d.jpg', fps=0.2)#提取视频图像中的文本,保存为文本文件 def get_videoText():pic_files = fn for fn in listdir() if fn.endswith('.jpg') and fn.startswith('frame') pic_files.sort(key=lambda fn:int(splitext(fn)0.strip('frame ') with open('视频文字.txt', ' w') as fp:for fn in pic_files:text = image_to_string(Image.open(fn)lang='chi_sim')text = sub('s',text) fp.write(text)get_videoText()#删除临时文件for fn in listdir():if fn.endswith('.jpg') and fn.startswith('frame'): remove(fn)6.from os import mkdirfrom os.path import isdirimport datetimefrom time import sleepfrom threading import Threadimport cv2# 参数0表示笔记本自带摄像头cap = cv2.VideoCapture(0)# 获取当前日期时间,例如2019-05-24 23:11:00now = str(datetime.datetime.now():19.replace(':',)dirName = now:10tempAviFile = dirName+''+now+'.avi'if not isdir(dirName):mkdir(dirName)# 创建视频文件aviFile = cv2.VideoWriterCtempAviFilecv2.VideoWriter_fourcc(25, (640,480) #帧速和视频宽度、高度def write():while cap.isOpened():#捕捉当前图像,ret=True表示成功,False表示失败ret, frame = cap.read() if ret:#写入视频文件aviFile.write(frame)aviFile.release()Thread(target=write).start()input ('按任意键结束.)cap.release()第9章基于SQLite数据库的数据采集一、填空题1. sqlite35. commit()2. connect()6. rollback()3. execute()7. cursor()8. deletefrom test where name=1100011二、选择题1. A2. ABC3. A7. D8. C三、判断题1.对2.错8.错9.对9. ABCD3. 错 4.对4. C5.错4. executemany()9. read_sql()5. B 6. D6.对 7.错四、程序设计题from random import choice, randrangefrom string import digits, ascii_lettersfrom os import listdir, mkdirfrom os.path import isdirimport sqlite3from time import timefrom openpyxl import Workbook, load_workbookdef generateRandomData():生成测试数据,共50个Excel文件,每个文件有5列随机字符串# 如果不存在子文件夹xlsxs,就创建if not isdir('xlsxs'): mkdirCxlsxs1)# total表示记录总条数 global total# 候选字符集 characters = digits+ascii_letters# 生成50个Excel文件 for i in range(50): xlsName = 'xlsxs'+str(i)+'.xlsx'# 随机数,每个xlsx文件的行数不一样 totalLines = 300 # randrange(10*4)# 创建 Workbook,获取第 1 个 Worksheet wb = Workbook() ws = wb.worksheets0# 写入表头ws.appendCfa', 'c', 'd', &')# 随机数据,每行5个字段,每个字段3。个字符 for j in range(totalLines):line = ''.join(choice(characters) for ii in range(30) for jj in range(5) ws.append(line) total += 1# 保存xlsx文件wb.save(xlsName)def eachXlsx(xlsxFn):针对每个xlsx文件的生成器#打开Excel文件,获取第1个Worksheetwb = load_workbook(xlsxFn)ws = wb.worksheets0for index, row in enumerate(ws.rows):#忽略表头if index = 0: continueyield tuple(map(lambda x:x.value, row)def xlsx2sqlite():从批量Excel文件中导入数据到SQLite数据库#获取所有xlsx文件名xlsxs = ('xlsxsW'+fn for fn in listdir( 'xlsxs')#连接数据库,创建游标with sqlite3.connect('dataxlsx.db') as conn:cur = conn.cursor()cur.execute('CREATE TABLE IF NOT EXISTS fromxlsx(a,b,c,d,e)') for xlsx in xlsxs:#批量导入,减少提交事务的次数,可以提高速度sql = 'INSERT INTO fromxlsx VALUES(1 cur.executemany(sqlJ eachXlsx(xlsx) mit()# 用来记录生成的随机数据的总行数total = 0# 生成随机数据generateRandomData()# 导入数据,并测试速度start = time()xlsx2sqlite()delta = time()-startprint("导入用时:1 j delta)print('导入速度(条/秒):total/delta)第1。章 基于网页的数据采集1. B2. B3. A4. B5. D6. D7. A8. C9. D10. D11. A12. C13. C14. B15. A三、判断题1.对2.对3.错4.对5.错6.对7.错8.对9.对10.错11.错12.对13.对14.错15.对16.对17.错18.对19.错20.对21.错22.错23.错一、填空题1. urlopen()6. content10. start_urls二、选择题2.7.headers 3. 31.94 startproject4.8.53.0crawl5.9.Range runspider四、1.程序设计题from os import mkdirfrom datetime import datefrom re import findall sub, Sfrom collections import Counterfrom urllib.parse import urljoinfrom urllib.request import urlopenfrom os.path import basename., isdirfrom jieba import cut# 用来记录采集到的所有新闻文本sentences =# 某高校网站首页地址url = r''with urlopen(url) as fp:content = fp.read().decode()# 查找最新的一条新闻链接地址pattern = r'<UL class=" news-list'*. *?<lixa href="(. + ?)# 把相对链接地址转换为绝对地址url = urljoin(urlJ findallCpattern, content)0)# 用来存放新闻正文文本和图片的文件夹root ='山商新闻'if not isdir(root):mkdir(root)while True:#获取网页源代码with urlopen(url) as fp:content = fp.read().decode()#提取并检查日期,只采集2020年1月1口往后的新闻pattern ='日期:(d+)年(d+)月(d+)日 try:date_news = map(intJ findall(pattern>> content) 0) except:#从微信公众号转载来的文章,网页源代码结构不一样,且没有“下一条”链接if url.startswith(1'): breakprint(url)if date(*date_news) < date(2020J 1, 1): break#提取标题,删除其中可能存在的HTML标签和反斜线、双引号和换行符pattern = r'<hl.+?>(,+?)</hl>,title = findall(patternJ contentS)0title = sub(r'<.+?>|&nbsp;|n|rIn',title)#每个新闻一个子文件夹,使用新闻标题作为文件夹名称child = rf'roottitle' fn = rf'childtitle.txt'#提取段落文本pattern = r'<p class="MsoNormal".+?>(.+?)</p>'result = 'n'.join(filter(Nonesub(r'<.+?>|&nbsp;'item).strip() for item in findall(patternJ contentS)if '疫情'in title+result or '新冠'in title+result:if not isdir(child): mkdir(child)print (title,、。不存在,开始爬取。,)#保存提取到的文字,同时写入文件sentences.append(result)with open(fnJ W, encoding='utf8*) as fp: fp.write(result)#提取图片,下载到本地pattern = r'<img width=.+?src="(.+?)"'for item in findall(pattern>> content):#把相对链接地址转换为绝对链接地址item = urljoin(url, item)with urlopen(item) as fpl:#创建本地二进制文件,写入网络图像的数据with open(rf'childbasename(item)', 'wb') as fp2:fp2.write(fpl.read()else:print(title 1已存在,跳过.)#如果是多次运行程序,不重复采集网页上的信息#但是读取已存在的文件内容用于后面的分词,保证多次运行本程序时结果一样 with open(fnJ encoding='utf8') as fp:sentences . extend(fp.readlines()#获取下一条新闻地址,继续采集pattern = r'下一条:<a href=" (.+?)"'next_url = findall(pattern content)if not next_url:breaknext_url = urljoin(url next_url0) url = next url#分词,只保留长度大于1的词语text = ' 1.join(sentences)words = filter(lambda word: len(word)>1, cut(text)#统计词频,输出出现最多的前10个freq = Counter(words)print(freq.most_common(10)2.爬虫程序文件everyCityinSD.py内容改为:import scrapyfrom os import removefrom time import sleepfrom sdWeatherSpider.items import Sdweatherspiderltemclass EverycityinsdSpider(scrapy.Spider):name = 'everyCityinSD'allowed_domains = ''#首页,爬虫开始工作的页面start_urls = 'try:remove('weather.txt')except:passdef parse(selfresponse):# 获取每个地市的链接地址,针对每个链接地址发起请求urls = response.css('dt>atitle:attr(href)').getall()for url in urls:url = url.replace('/weather/'1/weatherl5d/') yield scrapy.Request(url=urlj callback=self.parse_city) sleep(0.3)def parse_city(selfresponse):一处理每个地市天气预报链接地址的实例方法# 用来存储采集到的信息的对象item = Sdweatherspiderltem()# 获取城市名称city = response.xpath(1/divclass=Hcrumbs fl"/a3/text(),) item'city' = city.get()# 定位包含天气预报信息的ul节点,其中每个li节点存放一天的天气 selector = response.xpath(1/ulclass="t clearfix"')0weather =# 遍历当前ul节点中的所有li节点,提取每天的天气信息for li in selector.xpath(1./li'):#提取日期date = li.xpath(1./spanclass=,timeH/text() *) .get()#云的情况cloud = li.xpath(1./spanclass="wea"/text()").get()high = li.xpath(1./spanclass=,tem"/em/text()').get() low = li.xpath('./spanclass="tem"/text()').get() wind = li.xpath('./spanclass=',windn/text()1) .get() wind += ','+li.xpath('./spanclass="windl"/text()').get() weather.append(f'date:cloud,highlow,wind')item'weather' = 1n'.join(weather) return item3.from os import removefrom time import sleepfrom re import findall subfrom urllib.request import urlopenfrom pptx import Presentation from pptx.util import Inches#公众号维护的清单,读取网页源代码start_url = '. com/s/zYUhlgU3Y9DTk3R8HDsMcA' with urlopen(start_url) as fp: content = fp.read().decode()#提取标题中包含"PPT”的文章链接地址pattern = ('<a.*?href="(.+?)",*?>(.*?)</a>') for url, title in findall(pattern> content):#文件名中不能有竖线,替换为减号title = sub('<.*?>',title).strip().replace('| if 'ppt' in title.lower():print(title)#读取文章链接的网页源代码 with urlopen(url) as fp: content = fp.read().decode()#提取文章中的图片,创建pptx文件 pattern = '<p.*?><img.+?data-ratio=.*?data-s=.*?data-src="(.+?)"' pptx_file = Presentation() pptx_file.slide_width = Inches(16) pptx_file.slide_height = Inches(9) for index, pic_url in enumerate(findall(patterncontent)start=l): #下载图片 with urlopen(pic_url) as fp_web:with open( 'temp.png', 'wb') as fp_local: fp_local.write(fp_web.read()#新建一页幻灯片,插入图片slide = pptx_file.slides.add_slide(pptx_file.slide_layoutsl)slide.shapes.placeholders0.text = str(index)slide.shapes.add_picture('temp.png', lnches(0), lnches(0) Inches(16), Inches(9)#避免爬的太快了被禁止访问 sleep(l)pptx_file.save(title+'.pptx') sleep(index/10)#删除临时文件remove('temp, png')五、简答题1.答1) GET方式适合少量数据的明文传输,传输的数据在URL中可以看到,经过简单解码即可还原。2) POST方式适合加密数据的传输、大量数据的传输或者隐藏数据的传输,在URL中看不到传输的数据。3) 答1)服务端检查客户端发来的请求对象的头部是否包含浏览器的版本信息,如果不包含则认为是爬虫 程序。可以在客户端向服务端请求数据时使用Agent字段来假装浏览器版本信息来绕过这个检查。2)服务端记录客户端请求数据时的工P地址并检查其频率,如果频率过高则认为是爬虫程序。可以在 客户端适当位置调用标准库time中的函数sleep。来降低数据爬取速度,绕过这个检查。3)服务端检查客户端是否从网站内部发出的请求,如果不是则认为是爬虫程序。可以在客户端请求 数据时使用Referer字段来指定网站URL来绕过这个检查。4)通过cookie校验客户端或使用AJAX技术动态生成内容进行反爬。可以借助于selenium、 pyppeteer之类的扩展库实现模拟登录来解决。5)通过登录和验证码等交互机制进行反爬。可以使用模拟登录结合人工输入验证码来解决,完全实 现自动爬取的难度较大。一、填空题1. True2. True3. break6. 123456二、选择题1. D2. A3. ABCD6. ABCD三、判断题1.对2.错3.错6.对7.错8.错四、程序设计题4.4.4.continue5. 8ACD5 . AB错5.错from random import randint, choicescharacters ='董付国系列教材山东烟台樱桃玉孙兆房桌场艳玲'for _ in range(100):rnd = randint(lJ 100) if rnd > 30: k = 3elif rnd > 10: k = 2else: k = 4name = ''.join(choices(characters, k=k) print(name)num = 1for i in range(4):num = (num+1) * 2 print(num)from itertools import countfor first in count(lJ 1):floors = first*(2*i) for i in range(8)if sum(floors) = 765:for index, value in enumerate(floors, start=l): print(f'第index层有value盏琉璃灯)breakfrom itertools import permutations# 10个数字中任选2个不同数字的所有排列digits = '0123456789'for chi, ch2 in permutations(digit2):# 前两位相同,后两位相同,前后不相同num = int(chl*2+ch2*2)# 恰好是一个整数的平方if int(num*0.5)*2 = num: print(num)5.from itertools import combinationsfor k in range(l, 4):for item in combinations('麻汁J辣椒油J蒜蓉J香菜),r=k): if '麻汁"辣椒油 < set(item):continueprint('小咸菜)+item)第4章列表与元组1.5.二、填空题-34, 1, 选择题2,32. True、6.FalseTrue3.7.True、 False (1, 2)4.8.3, 4, 5Hl> 33, 21. A6. B三、判断题1 .错8.错四、编程题1 .2.7.3.8.CABCD4. A5.A2 .错9.错3.对10.错4.错5.错6.对7.错from functools import reducedata = 1,2,3, 4,5,6, 7,8,9print(reduce(lambda rl, r2: x+y for x, y in zip(rl,r2), data)data = eval(input输入包含任意内容的列表:)print(max(set(datakey=data,count)while True:try:m = int(input('输入 m:') assert m > 1breakexcept:print(,无效输入,二 end='') while True:try:n = int(input('输入 n:') assert n > 1breakexcept:print(1无效输入,end='')for i in range(m): while True:try:row = eval(input(f'输入第i+l行:,) except:print ('无效输入,end='') continueif (isinstance(rowJ list) and len(row)=n and set(map(typejrow)=intand all(map(lambda num: l<=num<100> row): matrix.append(row) breakelse:print(,无效输入,end=* ')print("matrix, sep=*n')print(sum(map(lambda i: matrixii, range(min(mJn) 4.from operator import add, sub, mulvectorl = 1, 3, 9, 30vector2 = -5, -17, 22, 0print(vectorl, vector2J sep='n')print向量相加:,)print(list(map(addvectorl, vector2)print(,向量相减:,)print (list (map (sub, vectorl, vector2)print(,向量内积:,)print(sum(map(mul, vectorl, vector2)print向量与标量相除:,)print(list(map(lambda num: num/5, vectorl)k = int(input(,请输入一个正整数:) numbers = list(range(lJ 11)#游戏一直进行到只剩下最后一个人for _ in range(len(numbers)-l):for _ in range(k-l):numbers.append(numbers . pop(0) numbers.pop(0)print(F最后一个人的编号为:numbers。,)diag = eval(input(1输入一个包含若干整数的列表:)n = len(diag)matrix =for i in range(n):matrix.append(0*n) matrixii = diagiprint(*matrix, sep=,n,)第5章字典与集合一、填空题1.get()2.1:2,2:3)3.974. 995.7.1, 28.39.False10.True12.113314.False15.4二、选择题1.D2. C3.C4.A5.A6.D8.A9. D10.D11.A12.C13.A15.ABCE三、判断题1.错2错3.错4.对5错6.错8.错9.错10.对11.错12.对13.对6. True17. C14. ABE7.错14.错15.对四、程序设计题scores = '张三':语文:80,,数学:901 英语:90, 李四':语文':87,'数学匕89,'英语t 86,王五':语文':66,'数学,:88,'英语,:77)for name, score in scores.items():print(f'name总分:sum(score.values()')for subject in scores1张三'keys():score = itemsubject for item in scores.values() print(f' subject平均分:sum(score)/len(score)')from random import randrangefrom itertools import combinationsdata = f'namei': f1filmrand

    注意事项

    本文(Python程序设计与数据采集(微课版)-课后习题答案.docx)为本站会员(太**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开