版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
厦门大学林子雨编著《Python程序设计基础教程(微课版)》教材配套实验指南第14章网络爬虫第1页厦门大学林子雨编著《Python程序设计基础教程(微课版)》教材习题题目第14章网络爬虫一、简答题1.请阐述什么是网络爬虫。2.请阐述网络爬虫有哪些类型。3.请阐述什么是反爬机制。4.请阐述用Python实现HTTP请求的常见的3种方式。5.请阐述如何定制requests。6.请阐述使用BeautifulSoup解析HTML可以使用哪些解析器?各有什么优缺点?二、编程题1、 访问豆瓣电影Top250(/top250?start=0),获取每部电影的中文片名、排名、评分及其对应的链接,按照“排名-中文片名-评分-链接”的格式显示在屏幕上。2、 访问豆瓣电影Top250(/top250?start=0),在问题1的基础上,获取每部电影的导演、编剧、主演、类型、上映时间、片长、评分人数以及剧情简介等信息,并将获取到的信息保存至本地文件中。3、 访问微博热搜榜(/top/summary),获取微博热搜榜前50条热搜名称、链接及其实时热度,并将获取到的数据通过邮件的形式,每20秒发送一次到个人邮箱中。一、简答题1.请阐述什么是网络爬虫。【参考答案】网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成部分。如图14-1所示,爬虫从一个或若干个初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。2.请阐述网络爬虫有哪些类型。【参考答案】网络爬虫的类型可以分为通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫。3.请阐述什么是反爬机制。【参考答案】为什么会有反爬机制?原因主要有两点:第一,在大数据时代,数据是十分宝贵的财富,很多企业不愿意让自己的数据被别人免费获取,因此,很多企业都为自己的网站运用了反爬机制,防止网页上的数据被爬走;第二,简单低级的网络爬虫,数据采集速度快,伪装度低,如果没有反爬机制,它们可以很快地抓取大量数据,甚至因为请求过多,造成网站服务器不能正常工作,影响了企业的业务开展。4.请阐述用Python实现HTTP请求的常见的3种方式。【参考答案】Python实现HTTP请求的常见的3种方式:urllib、urllib3和requests。5.请阐述如何定制requests。【参考答案】定制requests的方式包括传递URL参数、定制请求头、发送POST请求和设置超时等。6.请阐述使用BeautifulSoup解析HTML可以使用哪些解析器?各有什么优缺点?【参考答案】解析器用法优点缺点Python标准库BeautifulSoup(markup,"html.parser")Python标准库执行速度适中文档容错能力差lxml的HTML解析器BeautifulSoup(markup,"lxml")速度快文档容错能力强需要安装C语言库lxml的XML解析器BeautifulSoup(markup,"lxml-xml")BeautifulSoup(markup,"xml")速度快唯一支持XML的解析器需要安装C语言库html5libBeautifulSoup(markup,"html5lib")兼容性好以浏览器的方式解析文档生成HTML5格式的文档速度慢,不依赖外部扩展二、编程题1、 访问豆瓣电影Top250(/top250?start=0),获取每部电影的中文片名、排名、评分及其对应的链接,按照“排名-中文片名-评分-链接”的格式显示在屏幕上。【参考答案】importrequestsfrombs4importBeautifulSoupimporttime#请求网页defpage_request(url,ua):response=requests.get(url=url,headers=ua)html=response.content.decode('utf-8')returnhtml#解析网页defpage_parse(html):soup=BeautifulSoup(html,'lxml')#获取每部电影的排名position=soup.select('#content>div>div.article>ol>li>div>div.pic>em')#获取豆瓣电影名称name=soup.select('#content>div>div.article>ol>li>div>>div.hd>a>span:nth-child(1)')#获取电影评分rating=soup.select('#content>div>div.article>ol>li>div>>div.bd>div>span.rating_num')#获取电影链接href=soup.select('#content>div>div.article>ol>li>div>>div.hd>a')foriinrange(len(name)):print(position[i].get_text()+'\t'+name[i].get_text()+'\t'+rating[i].get_text()+'\t'+href[i].get('href'))if__name__=="__main__":print('**************开始爬取豆瓣电影**************')ua={'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/90.0.4421.5Safari/537.36'}#豆瓣电影Top250每页有25部电影,start就是每页电影的开头forstartNuminrange(0,251,25):url="/top250?start=%d"%startNumhtml=page_request(url=url,ua=ua)page_parse(html=html)print('**************爬取完成**************')2、 访问豆瓣电影Top250(/top250?start=0),在问题1的基础上,获取每部电影的导演、编剧、主演、类型、上映时间、片长、评分人数以及剧情简介等信息,并将获取到的信息保存至本地文件中。【参考答案】importrequestsfrombs4importBeautifulSoupimportreimportdocxfromdocx.oxml.nsimportqn#请求网页defpage_request(url,ua):response=requests.get(url=url,headers=ua)html=response.content.decode('utf-8')returnhtml#解析网页defpage_parse(html,ua):soup=BeautifulSoup(html,'lxml')fortaginsoup.find_all(attrs={'class':'item'}):data=[]#序号num=tag.find('em').get_text()data.append(num)#电影名称name=tag.find_all(attrs={'class':'title'})[0].get_text()data.append(name)#豆瓣链接href=tag.find(attrs={'class':'hd'}).aurl=href.attrs['href']data.append('豆瓣链接:'+url)#评分与评论数info=tag.find(attrs={'class':'star'}).get_text()info=info.replace('\n','').lstrip()#使用正则表达式获取数字mode=pile(r'\d+\.?\d')i=0forninmode.findall(info):ifi==0:#评分data.append('豆瓣评分:'+n)elifi==1:#评分人数data.append('评分人数:'+n)i=i+1#进入子网页,获取每部电影的具体信息sub_page_requests(url,ua,data)print('第%s部电影信息爬取完成'%num)#子网页处理函数:进入并解析子网页/请求子网页#获取影片详细信息defsub_page_requests(url,ua,data):html=page_request(url=url,ua=ua)soup=BeautifulSoup(html,'lxml')#影片信息info=soup.find(attrs={'id':'info'}).get_text()data.append(info)#影片简介summary=soup.find(attrs={'property':'v:summary'}).get_text()summary=summary.replace('\n','').replace('','').lstrip()data.append(data[1]+'影片简介:\n'+summary)#保存影片信息save(data)defsave(data):file=docx.Document()#设置字体格式file.styles['Normal'].=u'TimesNewRoman'file.styles['Normal'].element.rPr.rFonts.set(qn('w:eastAsia'),u'TimesNewRoman')#将爬取到的数据写入word中forelementindata:file.add_paragraph(element)file.save('result/'+data[0]+'、'+data[1]+'.docx')if__name__=="__main__":print('**************开始爬取豆瓣电影**************')ua={'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/90.0.4421.5Safari/537.36'}#豆瓣电影Top250每页有25部电影,start就是每页电影的开头data_List=[]forstartNuminrange(0,251,25):url="/top250?start=%d"%startNumhtml=page_request(url=url,ua=ua)#获取每部影片的信息page_parse(html=html,ua=ua)print('**************爬取完成**************')3、 访问微博热搜榜(/top/summary),获取微博热搜榜前50条热搜名称、链接及其实时热度,并将获取到的数据通过邮件的形式,每20秒发送一次到个人邮箱中。【参考答案】#爬虫相关模块importrequestsfrombs4importBeautifulSoup#发送邮箱相关模块importsmtplibfromemail.mime.textimportMIMETextfromemail.headerimportHeader#定时模块importscheduleimporttime#请求网页defpage_request(url,ua):response=requests.get(url=url,headers=ua)html=response.content.decode('utf-8')returnhtml#解析网页defpage_parse(html):soup=BeautifulSoup(html,'lxml')news=[]#处理热搜前50urls_title=soup.select('#pl_top_realtimehot>table>tbody>tr>td.td-02>a')hotness=soup.select('#pl_top_realtimehot>table>tbody>tr>td.td-02>span')foriinrange(len(urls_title)):new={}title=urls_title[i].get_text()url=urls_title[i].get('href')#个别链接会出现异常ifurl=='javascript:void(0);':url=urls_title[i].get('href_to')#热搜top没有显示热度ifi==0:hot='top'else:hot=hotness[i-1].get_text()new['title']=titlenew['url']=""+urlnew['hot']=hotnews.append(new)forelementinnews:print(element['title']+'\t'+element['hot']+'\t'+element['url'])#发送邮件sendMail(news)#将获取到的热搜信息发送到邮箱defsendMail(news):#发送邮箱from_addr='发送邮箱'#发送邮箱授权码,不是邮箱密码,而是smtp授权码password='发送邮箱授权码'#接收邮箱to_addr='接收邮箱'#qq邮箱的smtp地址maihost=''#建立SMTP对象qqmail=smtplib.SMTP()#25为SMTP常用端口qqmail.connect(maihost,25)#登录邮箱qqmail.login(from_addr,password)#设置发送邮件的内容content=''foriinrange(len(news)):content+=str(i)+'、\t'+news[i]['title']+'\t'+'热度:'+news[i]['hot']+'\t'+'链接:'+news[i]['url']+'\n'get_time=t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年中国超透膜市场数据研究及竞争策略分析报告
- 2026年中国超脉冲二氧化碳激光治疗仪市场数据研究及竞争策略分析报告
- 2026年航空业面试答题指导与模拟题集
- 2026年社会救助低保特困领域信息公开问答
- 2026年机关干部投标无效情形认定测试题
- 2026年城市规划与管理专业考试题库
- 2026年社区工作者能力素质提升工程实施方案与培训内容及考核及激励
- 2026年乡镇粮食收购政策与秩序知识
- 2026年中国超高压及特高压电力变压器市场数据研究及竞争策略分析报告
- 2026年中国超高温灭菌鲜奶市场数据研究及竞争策略分析报告
- 职工职业卫生培训课件
- 口腔科放射安全培训课件
- XJJ 057-2013 建筑工程高强钢筋应用技术导则
- 季度保密工作总结
- 2024年河北省中考数学真题及答案解析
- 清明节祭奠英烈教学课件
- GJB3243A-2021电子元器件表面安装要求
- 医疗器械生产企业质量控制与成品放行指南试题(含答案)
- 国自然培训课件
- 综合管廊清淤施工方案
- 增值税发票管理办法规定
评论
0/150
提交评论