Python爬虫项目教程(微课版)-参考答案.docx
《Python爬虫项目教程(微课版)-参考答案.docx》由会员分享,可在线阅读,更多相关《Python爬虫项目教程(微课版)-参考答案.docx(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Python 爬虫项目教程(微课版)习题参考答案练习 11. Flask 是一个比较简单的 Python Web 开发框架,你知道 Python 还有哪些比较流行的Web 开发框架吗?说说它们的主要区别。答:企业级开发框架Django 高并发处理框架Tornado 快速建站的框架Flask底层自定义协议网络框架Twisted2. 使用 GET 方法提交数据与使用 POST 方法提交数据有什么不同?在 Flask 中如何获取提交的数据?答:Flask 获取 GET/POST 数据: flask.request.values.get(参数名称,默认值)3. 使用 Flask 编写一个 Web 程序
2、,它接收如下代码提交的 user_name 与 user_pass数据。答:import flask app=flask.Flask(web)app.route(/) def index():s=return sapp.route(/login,methods=GET,POST) def login():user_name=flask.request.values.get(user_name,) user_pass=flask.request.values.get(user_pass,) return user_name+,+user_passapp.debug=True app.run()4
3、. 说出下面正则表达式匹配的字符串分别是什么。(1)rw+s(2)rw+b(3)rd+-d+(4)rw+(w+.)+w+(5)r(b|cd)ef 答: 省略5. 使用正则表达式匹配 HTML 代码中所有形如的 JPG图像文件,找出一个网站中所有这样表示的 JPG 图像文件,并下载这些图像文件。答:import urllib.request import redef getHtml(url): html=try:resp=urllib.request.urlopen(url) data=resp.read()try:html=data.decode().lower() except:html=d
4、ata.decode(gbk).lower() except Exception as err:print(err) return htmldef parseHtml(html):32try:imgReg=r srcReg=rhttp:/.+.jpgwhile True:m=re.search(imgReg,html) if m:s=htmlm.start():m.end() n=re.search(srcReg,s) src=sn.start():n.end() download(src) html=htmlm.end():else:breakexcept Exception as err:
5、 print(err)def download(src): try:print(downloding,src) resp=urllib.request.urlopen(src) data=resp.read() p=src.rfind(/)fn=srcp+1: fobj=open(fn,wb) fobj.write(data) fobj.close() print(downloaded,fn)except Exception as err: print(err)url=.html=getHtml(url) parseHtml(html)练习 21. 简单说明Beautiful Soup 解析数
6、据的特点。答: 省略2. 用Beautiful Soup 装载下面的 HTML 文档,并以规范的格式输出,比较与原来 HTMLHiHelloEnd文档的区别,说明 Beautiful Soup 是如何修改的。答:from bs4 import BeautifulSouphtml=HiHelloEnd soup=BeautifulSoup(html,html.parser) print(soup.prettify()3. 重新编写本书项目 1 中爬取外汇网站数据的程序,使用Beautiful Soup 分解出中的数据。答:import urllib.requestfrom bs4 import
7、BeautifulSoup import sqlite3class MySpider:def openDB(self):# 初始化数据库,创建数据库 rates.db 与一张空表 rates self.con = sqlite3.connect(rates.db) self.cursor = self.con.cursor()try:self.cursor.execute(drop table rates) except:passsql = create table rates (Currency varchar(256) primary key,TSP float,CSP float, TB
8、P float, CBP float,Time varchar(256)try:self.cursor.execute(sql) except:passdef closeDB(self): # 关闭数据库mit() self.con.close()def insertDB(self, Currency, TSP, CSP, TBP, CBP, Time): # 记录插入数据库try:sql = insert into rates (Currency,TSP,CSP,TBP,CBP,Time) values (?,?,?,?,?,?)self.cursor.execute(sql, Curren
9、cy, TSP, CSP, TBP, CBP,Time)except Exception as err: print(err)def show(self): # 显示函数self.cursor.execute(select Currency,TSP,CSP,TBP,CBP,Time fromrates)rows = self.cursor.fetchall()print(%-18s%-12s%-12s%-12s%-12s%-12s % (Currency, TSP,CSP, TBP, CBP, Time)for row in rows:print(%-18s%-12.2f%-12.2f%-12
10、.2f%-12.2f%-12s % (row0,row1, row2, row3, row4, row5)def spider(self, url): # 爬虫函数try:resp = urllib.request.urlopen(url) data = resp.read()html = data.decode() soup=BeautifulSoup(html,html.parser) div=soup.find(div,attrs=id:realRateInfo)trs=div.find_all(tr) for tr in trs1:tds=tr.find_all(td) Currenc
11、y = tds0.text.strip() TSP = float(tds3.text)CSP = float(tds4.text) TBP = float(tds5.text) CBP = float(tds6.text) Time = tds7.text.strip()self.insertDB(Currency, TSP, CSP, TBP, CBP, Time) except Exception as err:print(err)def process(self): # 爬取过程self.openDB()self.spider( self.show()self.closeDB()# 主
12、程序spider = MySpider() spider.process()Harry Potter23.99学习 XML39.95Learning Python30.204. 下面是一段 HTML 代码:试用 Beautiful Soup 完成下面的任务。(1) 找出所有书的名称。(2) 找出所有英文书的名称与价格。(3) 找出价格在 30 元以上的所有书的名称。答:from bs4 import BeautifulSouphtml=Harry Potter23.99学习 XML39.95Learning Python30.20 soup=BeautifulSoup(html,html.pa
13、rser) books=soup.find_all(book)for b in books: print(b.find(title).text)print() books=soup.find_all(book) for b in books:title=b.find(title,attrs=lang:english) if title:print(title.text)print()for b in books: price=b.find(price).text if float(price)mVersion: python=ppython url=purl mVersion=sreturn
14、python,urldef searchPython(surl): resp=urllib.request.urlopen(surl) data=resp.read() html=data.decode() soup=BeautifulSoup(html,lxml)div=soup.find(div,attrs=class:row download-list-widget) ol=div.find(name=ol,attrs=class:list-row-container menu) lis=ol.find_all(li)pList=for li in lis: a=li.find(name
15、=span,attrs=class:release-number).find(a)python=a.text url=urllib.request.urljoin(surl,ahref) print(%-20s %s %(python,url) pList.append(python:python,url:url)return pListtry:pList=searchPython(https:/www.python.org/downloads/) python,url=getLatestVersion(pList)print(The latest version) print(python,
16、url)except Exception as e: print(e)6. 在中国天气网中查找一个城市,如深圳,会转到地址为“ weather/101280601.shtml”的网页显示深圳的天气预报,如图 2-8-2 所示。图 2-8-2 深圳的天气预报from bs4 import BeautifulSoup from bs4 import UnicodeDammit import urllib.requesturl= try:headers=User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre)
17、Gecko/2008072421 Minefield/3.0.2prereq=urllib.request.Request(url,headers=headers) data=urllib.request.urlopen(req) data=data.read() dammit=UnicodeDammit(data,utf-8,gbk) data=dammit.unicode_markup soup=BeautifulSoup(data,lxml) lis=soup.select(ulclass=t clearfix li) for li in lis:try:date=li.select(h
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 爬虫 项目 教程 微课版 参考答案
限制150内