版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目8
社交Selenium爬虫项目网络爬虫应用项目式教程《网络爬虫项目实战》高级篇8.1项目介绍8.2任务分解8.3项目实施目录Content8.4课后练习8.5能力拓展8.1.1
项目目标爬取某社交网站的arXiv论文速递专栏,用词云图展示“计算机视觉与模式识别”领域论文热点词,效果如下图所示。8.1.2学习目标技能目标1.能够使用Selenium+CSS采集数据2.能够使用Pandas清洗数据3.能够使用Pandas分析数据4.能够使用词云图可视化词频知识目标1.熟悉数据采集过程2.熟悉数据清洗常见方法3.熟悉数据分析特点4.了解数据可视化形式素质目标1.培育项目管理能力2.培育解决实际问题能力实训目标实训项目爬取某社交网站,分析和可视化arxiv论文题目的单词频率实操内容1.CSS选择器定位网页元素2.编写Selenium爬虫3.编写数据清洗代码4.编写数据分析代码5.设计和实施可视化词频8.2任务分解8.1项目目标8.3项目实施目录Content8.4课后练习8.5能力拓展8.2
任务分解从数据采集到可视化,本项目包括以下任务。数据采集论文标题(英)论文标题(中)下载地址作者发表单位研究方向数据清洗删除重复行数据分析分词词频统计词频排序数据可视化“计算机视觉与模式识别论文热点词”词云图项目8购物Selenium爬虫项目网络爬虫实战项目式教程《网络爬虫项目实战》高级篇8.2任务分解8.1项目介绍8.3项目实施目录Content8.4课后练习8.5能力拓展8.3.1项目实施->数据采集(1)转到Tomcat安装目录下的bin目录,运行startup.bat后,打开Chrome,访问:50001/social/index.html,显示网站首页,代表Tomcat运行正常。如下图所示。8.3.1项目实施->数据采集(2)打开PyCharm,选择CreateNewProject,打开NewProject窗口,创建项目social,选择“Existinginterpreter”选项,Interpreter选择Anaconda安装目录下的python.exe。如下图所示。8.3.1项目实施->数据采集(3)创建social_spider.py,打开网站首页后关闭,测试ChromeDriver。(4)运行social_spider.py,看到Chrome浏览器打开网站首页,然后关闭浏览器。#encoding=utf-8importrandomimporttimefromseleniumimportwebdriverstart_url=":50001/social/index.html"if__name__=='__main__':#初始化ChromeDriverbrowser=webdriver.Chrome()#打开首页
browser.get(start_url)#最大化窗口
browser.maximize_window()#显式等待2~5秒钟
time.sleep(random.randint(2,5)+random.random())#退出浏览器,并释放资源
browser.quit()8.3.1项目实施->数据采集(5)打开网站首页,鼠标停留在第一个学术速递后右键,选择“检查”,在右边“Elements”窗口查找学术速递div。对照左边窗口的显示,找到学术速递对应的页面元素。从下图看出,学术速递的CSS模式为“div.Feed”。8.3.1项目实施->数据采集(6)social_spider.py定义do_once方法,主方法中调用do_once方法。importredefdo_once():#定位每日速递列表
topics=browser.find_elements_by_css_selector("div.Feed")fortopicintopics:#每日速递
content_title=topic.find_element_by_css_selector('h2.ContentItem-titlea').textcontent_title_groups=re.match("(.+)\[([\d|\.]+)\]",content_title)print(content_title_groups[1],content_title_groups[2])if__name__=='__main__':……#显式等待2~5秒钟
time.sleep(random.randint(2,5)+random.random())#爬取首页
do_once()#退出浏览器,并释放资源
browser.quit()统计学学术速递2022.7.18计算机视觉与模式识别学术速递2022.7.15自然语言处理学术速递2022.7.15人工智能学术速递2022.7.15机器学习学术速递2022.7.15……统计学学术速递2022.7.14计算机视觉与模式识别学术速递2022.7.13自然语言处理学术速递2022.7.13人工智能学术速递2022.7.13(7)运行social_spider.py,结果如下图所示。8.3.1项目实施->数据采集re.match(pattern,string,flags=0)pattern:模式字符串string:要匹配的字符串flags:可选参数,比如re.I不区分大小写尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match就返回None;匹配成功的话,通过调用span()方法获得匹配结果的位置。常见模式8.3.1项目实施->数据采集(8)回到网站首页,鼠标停留在第一个学术速递后右键,选择“检查”,在右边“Elements”窗口查找“阅读全文”输入框。对照左边窗口的显示,找到“阅读全文”输入框对应的页面元素。从下图看出,“阅读全文”输入框的CSS模式为”input.ContentItem-more”。8.3.1项目实施->数据采集(9)完善social_spider.py的do_once函数,展开“阅读全文”div。另外,忽略处理“计算机视觉和模式识别”每日速递。defdo_once():#定位每日速递列表
topics=browser.find_elements_by_css_selector("div.Feed")fortopicintopics:……ifcontent_title_groups:field_name=content_title_groups[1]#只处理”计算机与模式识别”方向论文
iffield_name.find("计算机视觉与模式识别")>-1:field_name="计算机视觉与模式识别"#展开阅读全文divreadall_btn=topic.find_element_by_css_selector('input.ContentItem-more')readall_btn.click()#隐式等待2秒钟
browser.implicitly_wait(2)8.3.1项目实施->数据采集(10)回到网站首页,鼠标停留在第2个学术速递后右键,选择“检查”,在右边“Elements”窗口查找速递详情div。对照左边窗口的显示,找到速递详情对应的页面元素。从下图看出,速递详情的CSS模式为“div.RichContent-inner>span”。8.3.1项目实施->数据采集(11)完善social_spider.py的do_once函数,分离出每一行。defdo_once():#定位每日速递列表
topics=browser.find_elements_by_css_selector("div.Feed")fortopicintopics:……ifcontent_title_groups:field_name=content_title_groups[1]#只处理”计算机与模式识别”方向论文
iffield_name.find("计算机视觉与模式识别")>-1:……#隐式等待2秒钟
browser.implicitly_wait(2)#解析当日速递全文,行间分隔符位"\n"rich_content=topic.find_element_by_css_selector("div.RichContent-inner>span").textlines=rich_content.split("\n")8.3.1项目实施->数据采集(12)完善social_spider.py的do_once函数,析取速递详情。defdo_once():#定位每日速递列表
topics=browser.find_elements_by_css_selector("div.Feed")fortopicintopics:……ifcontent_title_groups:field_name=content_title_groups[1]#只处理”计算机与模式识别”方向论文
iffield_name.find("计算机视觉与模式识别")>-1:……lines=rich_content.split("\n")#解析出每一行包含的论文信息
article_sec_end=Falseforlineinlines:sub_field_head_groups=re.match("(.+)\((\d+)篇\)",line)ifsub_field_head_groups:sub_field_name=sub_field_head_groups[1]else:article_title_groups=re.match("【(\d+)】(.+)",line)ifarticle_title_groups:article_title=article_title_groups[2].strip()article_ctitle_groups=re.match("标题:(.+)",line)ifarticle_ctitle_groups:article_ctitle=article_ctitle_groups[1].strip()article_href_groups=re.match("链接:(.+)",line)ifarticle_href_groups:article_href=article_href_groups[1].strip()article_authors_groups=re.match("作者:(.+)",line)ifarticle_authors_groups:article_authors=article_authors_groups[1].strip()article_org_groups=re.match("机构:(.+)",line)ifarticle_org_groups:article_org=article_org_groups[1].strip()article_sec_end=Trueprint(article_title,article_ctitle,article_href,article_authors,article_org,sub_field_name)8.3.1项目实施->数据采集(13)运行social_spider.py,结果如下图所示。……统计学学术速递2022.7.15计算机视觉与模式识别学术速递2022.7.14Symmetry-AwareTransformer-basedMirrorDetection基于对称性感知的Transformer镜面检测/abs/2207.06332TianyuHuang,BowenDong,JiayingLin,XiaohuiLiu,RynsonW.H.Lau,WangmengZuoHarbinInstituteofTechnology,CityUniversityofHongKongTransformer……LeftVentricleContouringofApicalThree-ChamberViewson2DEchocardiography心尖三腔心切面二维超声心动图左室壁轮廓/abs/2207.06330AlbertoGomez,MihaelaPorumb,AngelaMumith,ThierryJudge,ShanGao,Woo-JinChoKim,JorgeOliveira,AgisChartsiasUltromicsLtd,Oxford,UK,King’sCollegeLondon,UK,SherbrookeUniversity,Canada其他……计算机视觉与模式识别学术速递2022.7.13自然语言处理学术速递2022.7.13人工智能学术速递2022.7.138.3.1项目实施->数据采集(14)完善social_spider.py的do_once函数,保存计算机视觉与模式识别论文信息。importcsvdefdo_once():#定位每日速递列表
topics=browser.find_elements_by_css_selector("div.Feed")fortopicintopics:……ifcontent_title_groups:field_name=content_title_groups[1]#只处理”计算机视觉与模式识别”方向论文
iffield_name.find("计算机视觉与模式识别")>-1:……lines=rich_content.split("\n")#解析出每一行包含的论文信息
article_sec_end=Falseforlineinlines:sub_field_head_groups=re.match("(.+)\((\d+)篇\)",line)ifsub_field_head_groups:sub_field_name=sub_field_head_groups[1]else:……ifarticle_org_groups:……print(article_title,article_ctitle,article_href,article_authors,article_org,sub_field_name)ifarticle_sec_end:withopen('arxiv_articles.csv',mode='a',encoding='utf-8',newline='')asf:csv_write=csv.writer(f)csv_write.writerow([article_title,article_ctitle,article_href,article_authors,article_org,field_name,sub_field_name])article_sec_end=False8.3.1项目实施->数据采集(15)打开arxiv_articles.csv,看到有66行数据。Symmetry-AwareTransformer-basedMirrorDetection,基于对称性感知的Transformer镜面检测,/abs/2207.06332,"TianyuHuang,BowenDong,JiayingLin,XiaohuiLiu,RynsonW.H.Lau,WangmengZuo","HarbinInstituteofTechnology,CityUniversityofHongKong",计算机视觉与模式识别,TransformerEntry-FlippedTransformerforInferenceandPredictionofParticipantBehavior,用于参与者行为推理和预测的入口翻转转换器,/abs/2207.06235,"BoHu,Tat-JenCham","NanyangTechnologicalUniversity,Singapore",计算机视觉与模式识别,Transformer……LeftVentricleContouringofApicalThree-ChamberViewson2DEchocardiography,心尖三腔心切面二维超声心动图左室壁轮廓,/abs/2207.06330,"AlbertoGomez,MihaelaPorumb,AngelaMumith,ThierryJudge,ShanGao,Woo-JinChoKim,JorgeOliveira,AgisChartsias","UltromicsLtd,Oxford,UK,King’sCollegeLondon,UK,SherbrookeUniversity,Canada",计算机视觉与模式识别,其他Robustandefficientcomputationofretinalfractaldimensionthroughdeepapproximation,一种稳健高效的深度逼近视网膜分维计算方法,/abs/2207.05757,"JustinEngelmann,AnaVillaplana-Velasco,AmosStorkey,MiguelO.Bernabeu","CDTBiomedicalAI,SchoolofInformatics,UniversityofEdinburgh,CentreforMedicalInformatics,UniversityofEdinburgh",计算机视觉与模式识别,其他8.3.1项目实施->数据采集(16)完善social_spider.py的主函数,控制浏览器的滚动栏向下移动,页面载入所有数据后再读取每篇arXiv论文信息。if__name__=='__main__':#初始化ChromeDriverbrowser=webdriver.Chrome()#打开首页
browser.get(start_url)#最大化窗口
browser.maximize_window()foriinrange(9):#显式等待2~5秒钟
time.sleep(random.randint(2,5)+random.random())#移动滚动条到底部
js='window.scrollTo(0,100000)'browser.execute_script(js)#爬取首页
do_once()#退出浏览器,并释放资源
browser.quit()8.3.1项目实施->数据采集(17)打开arxiv_articles.csv,看到有1098行数据,其中前66行和第67~132行重复。Symmetry-AwareTransformer-basedMirrorDetection,基于对称性感知的Transformer镜面检测,/abs/2207.06332,"Tianyu……Symmetry-AwareTransformer-basedMirrorDetection,基于对称性感知的Transformer镜面检测,/abs/2207.06332,"Tianyu……CRFormer:ACross-RegionTransformerforShadowRemoval,CRFormer:一种用于阴影去除的跨区域Transformer,/abs/2207.01600,"JinWan,HuiYin,ZhenyaoWu,XinyiWu,ZhihaoLiu,SongWang","BeijingJiaotongUniversity,UniversityofSouthCarolina,ChinaMobileResearchInstitute",计算机视觉与模式识别,Transformer……AutomaticQuantificationofVolumesandBiventricularFunctioninCardiacResonance.ValidationofaNewArtificialIntelligenceApproach,心脏共振中容量和双心功能的自动量化。一种新的人工智能方法的验证,/abs/2206.01746,"ArielH.Curiale,MatÍasE.Calandrelli,LuccaDellazoppa,MarianoTrevisan,JorgeLuisBociÁn,JuanPabloBonifacio,GermÁnMato","Propuestayevaluacióndeunmétododeinteligenciaartificial1DepartmentofMedicalPhysics-TheBarilocheAtomicCenter-CONICET,UniversidadNacionaldeCuyo,HarvardMedicalSchool",计算机视觉与模式识别,其他8.3.1项目实施->数据采集Selenium执行JavaScriptSelenium能够执行JS,这使得Selenium拥有更为强大的能力。既然能执行JS,那么JS能做的事,Selenium大部分也能做。下面以操作百度页面()搜索“selenium测试”为例:1)填充文本#输入框输入查询值browser.find_element_by_css_selector("#kw").send_keys("selenium测试")2)触发按钮click事件#返回搜索按钮并点击element=browser.execute_script("returndocument.getElementById('su')")element.click()3)页面滚动到底部#滑动滚动栏到底部browser.execute_script("window.scrollTo(0,10000)")8.3.2项目实施->数据清洗(1)创建data_clean.py,读入arxiv_articles..csv到DataFrame类型。#encoding=utf-8importpandasaspd#显示所有列pd.set_option('display.max_columns',None)#显示宽度pd.set_option('display.width',200)#列名和数据对齐pd.set_option('display.unicode.east_asian_width',True)#读入CSV文件到DataFramelabels=["论文名字(英文)","论文名字(中文)","论文地址","论文作者","作者单位","研究领域","研究方向"]df=pd.read_csv('arxiv_articles.csv',encoding="utf-8",names=labels)print(df.head())(2)删除重复记录。#去重print("去重前:",df.shape)df.drop_duplicates(subset=["论文名字(英文)","论文作者"],inplace=True)print("去重后:",df.shape)8.3.2项目实施->数据清洗(3)保存清洗后的数据。打开arxiv_articles_clean.csv,有1032条商品记录,结果如下图。8.3.3项目实施->数据分析(1)创建data_analysis.py,读入arxiv_articles_clean.csv到DataFrame类型。#encoding=utf-8importpandasaspd#显示所有列pd.set_option('display.max_columns',None)#显示宽度pd.set_option('display.width',200)#列名和数据对齐pd.set_option('display.unicode.east_asian_width',True)#读入CSV文件到DataFramelabels=["论文名字(英文)","论文名字(中文)","论文地址","论文作者","作者单位","研究领域","研究方向"]df=pd.read_csv('arxiv_articles.csv',encoding="utf-8",names=labels)print(df.head())8.3.3项目实施->数据分析(2)完善data_analysis.py,用Jieba把中文论文名称分词,统计每个单词的使用频率。#切分单词counts={}titles=df["论文名字(中文)"].tolist()fortitleintitles:words_raw=jieba.lcut(title,cut_all=True)forwordinwords_raw:iflen(word)<=1:continueelse:counts[word]=counts.get(word,0)+1#计数print(counts){'基于':285,'对称':7,'对称性':3,'性感':6,'感知':39,'Transformer':37,'镜面':2,'检测':143,'用于':150,'参与':2,'参与者':2,……'高像素':1,'容量':1,'心功能':1}运行结果8.3.3项目实施->数据分析(3)在项目根目录New->File,创建stopwords.txt,定义停用词表。基于用于可以进行面向一个一种不可一次及其不同一对两步更好使用8.3.3项目实施->数据分析(4)待处理词语列表跳过stopwords.txt定义的停用词。#从待处理单词中删除停用词words_clean=[]stopwords=[line.strip()forlineinopen("stopwords.txt",encoding='utf-8')]print("处理前词语数量:",len(counts))fork,vincounts.items():ifk.strip()notinstopwords:words_clean.append((k,v))print("处理后词语数量:",len(words_clean))处理前词语数量:2820处理后词语数量:2805运行结果8.3.3项目实施->数据分析(5)按照词语使用频率倒序排列。为了便于复制处理结果到页面,也转换Python列表到JavaScript列表对象。#按照词频倒序排列words_clean.sort(key=lambdax:x[1],reverse=True)#生成JS格式字典列表,便于复制html_str="["fork,vinwords_clean[0:100]:html_str=html_str+"{"+"name:'{}',value:'{}'".format(k,v)+"},"#删除最后一个元素后面的","html_str=html_str[0:-1]+"]"print(html_str)[{name:'学习',value:'212'},{name:'图像',value:'205'},{name:'检测',value:'143'},…..,{name:'一致性',value:'17'},{name:'编码',value:'17'},{name:'标记',value:'17'}]运行结果8.3.4项目实施->数据可视化(1)在项目根目录New->Directory,创建app目录。(2)在app目录下New->Directory,创建目录static,然后把echarts.min.js和echarts-wordcloud.min.js复制到app/static目录。(3)在app目录下New->Directory,创建templates目录。8.3.4项目实施->数据可视化(4)在templates目录下NewHTMLFile,创建single_chart.html。8.3.4项目实施->数据可视化(5)在single_chart.html中引入依赖的JS文件。8.3.4项目实施->数据采集(6)完善single_chart.html,定义div元素和编写JS代码。其中,data值来自上面任务data_analysis.py的运行结果。myChart1获取chart1元素,把wordFreqData传给底层的词云库,显示词云图。<body><divid="chart1"style="float:left;width:600px;height:400px"></div> <script>varmychart1=echarts.init(document.getElementById("chart1"));option={title:{text:'计算机视觉与模式识别论文题目热门词',x:'center',textStyle:{color:'red',fontWeight:'bold',fontSize:'20'}},tooltip:{show:true
},series:[{name:'计算机视觉与模式识别论文题目热门词',type:'wordCloud',sizeRange:[6,66],textStyle:{normal:{color:function(){return'rgb('+[Math.round(Math.random()*160),Math.round(Math.random()*160),Math.round(Math.random()*160)].join(',')+')';}},emphasis:{shadowBlur:10,shadowColor:'#333'8.3.4项目实施->数据采集}},data:[{name:'学习',value:'212'},……,{name:'标记',value:'17'}]}]//series结束
};//option结束
mychart1.setOption(option);</script></body>项目8
社交Selenium爬虫项目网络爬虫实战项目式教程《网络爬虫项目实战》高级篇8.2任务分解8.1项目介绍8.4课后练习目录Content8.3项目实施8.5能力拓展8.4课后练习1.选择题1.webdriver执行JavaScript不可以()。A.填充文本B.触发按钮click事件C.页面滚动到底部 D.关闭浏览器2.webdriver.find_element_by_css_selector("#kw")中,"#kw"选择()。A.id等于kw的元素。 B.<kw>元素。C.属性值kw为前缀的元素。 D.属性值kw为后缀的元素。3.df.drop_duplicates(subset=["论文名字(英文)","论文作者"],inplace=True)中,”inplace=True”表示()。A.去重结果更新df。 B.去重结果不更新df。C.删除重复的记录。 D.只更新论文名字(英文)和论文作者。8.4课后练习1.选择题4.执行“groups=re.match("姓名:(.+),
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年惠州市惠城区政务服务中心(窗口人员)招聘笔试备考试题及答案详解
- 2026年宁波市江东区政务服务中心(窗口人员)招聘考试备考试题及答案详解
- 2026年哈尔滨市香坊区政务服务中心(窗口人员)招聘考试参考题库及答案详解
- 2026年清远市清城区医疗系统事业编人员招聘笔试备考试题及答案详解
- 2026年自贡市大安区政务服务中心(窗口人员)招聘笔试参考题库及答案详解
- 2026年浙江省绍兴市政务服务中心(窗口人员)招聘笔试备考题库及答案详解
- 2026-2027学年人教版八上物理 第四章 光现象 单元测试卷
- 2026年黑龙江省医疗系统事业编人员招聘笔试参考题库及答案详解
- 2026年河南省平顶山市政务服务中心(窗口人员)招聘考试参考题库及答案详解
- 2026年荆门市东宝区工会人员招聘考试模拟试题及答案详解
- 2026年四川省夹金山国有林保护局有限公司公开招聘工作人员25人考试备考题库及答案详解
- 2026年教育系统公开选拔学校年轻后备干部考试参考试题(含答案)
- 智能冷雾香氛机产业链上游:纳米雾化器技术突破
- 2026广东广永国资招聘1人笔试题库【必考】附答案详解
- 2026年全新中医主治医师考试题库及答案
- 半导体芯片先进封装项目质量管控方案
- 一升二语文暑假作业每日一练-一下
- 面瘫(面神经炎)精深中医临床路径
- JJF 1915-2021倾角仪校准规范
- GB/T 5211.14-2021颜料和体质颜料通用试验方法第14部分:筛余物的测定机械冲洗法
- GB/T 39813-2021输送带贮存和搬运指南
评论
0/150
提交评论