作者|CDA数据分析师1.newspaper包介绍Newspaper框架是GitHub上被推崇的Python爬虫框架中的第三个爬虫框架,适用于爬取新闻网页。它的操作非常简单易学,即使对于完全没有爬虫知识的初学者也非常友好,简单的学习就很容易上手,因为使用它不需要考虑headers,IP代理,网页解析,网页源代码结构问题。这是它的优点,但也是它的缺点。如果不考虑这些,访问网页时可能会被直接拒绝。一般来说,Newspaper框架并不适合爬取实际的工程新闻信息。框架不稳定,爬取过程中会出现各种bug,比如获取不到url、新闻信息等,不过对于想获取一些新闻语料库的朋友不妨给个试试吧,简单方便好用,不需要太多的爬虫专业知识。报纸的特点多线程文章下载框架新闻url识别从html中提取文本从html中提取顶级图像从html中提取所有图像从文本中提取关键字从文本中提取摘要从文本中提取作者Google趋势术语提取。使用10多种语言(英文,中文,德文,阿拉伯文...)...2.报纸包实例教学报纸包不是默认安装的模块库,所以在第一次使用报纸库之前,需要先安装报库。通常可以使用快捷键win+R,输入cmd,回车打开命令窗口,输入pipinstallnewspaper3k进行安装。需要注意的是:需要安装的是newspaper3k而不是newspaper,因为newspaper是python2的安装包,pipinstallnewspaper不能正常安装,请使用python3对应的pipinstallnewspaper3k正确安装。2.1爬取单条新闻示例爬取单条新闻使用newspaper中的Article包来爬取指定网页的新闻内容,即当你想爬取某篇新闻文章的内容时,你需要先获取它的URL,然后再针对这个单一的URL进行内容的爬取。以2019年12月6日南方网的一则新闻《最短10分钟 广州南站直达市中心》为例。首先需要设置新闻的网址,然后使用文章功能。第一个参数是网址,第二个常用参数是language语言。中文由字符串“ch”表示。然后使用下载函数和解析函数加载并解析新闻。这两步执行完之后,新闻的所有内容就加载完毕了,剩下的就是用函数分解你需要的内容了。##使用Article从报纸importArticle中抓取单条新闻#目标新闻URLurl='http://news.southcn.com/gd/content/2019-12/06/content_189723331.htm'news=Article(url,language='zh')news.download()#加载网页news.parse()#解析网页print('Title:',news.title)#新闻标题print('Text:\n',news.text)#文本内容print(news.authors)#新闻作者print(news.keywords)#新闻关键字print(news.summary)#新闻摘要#print(news.top_image)#地图地址#print(news.movi??es)#视频地址#print(news.publish_date)#发布日期#print(news.html)#网页源码结果:标题:广州南站最短10分钟直达市中心文字:专家建议建设理念在核心区实施站城一体化,保证多层次地下空间的连续性,分层管理人流,明确南站将建设为三线城市。由轨道交通连接的ee维枢纽。5日,南方网消息,《广州南站周边地区控制性详细规划深化》在广州市计委会议上获批。该方案全面梳理了广州南站10年来面临的问题。方案提出,在36平方公里的规划区域内,形成七大组团协调发展,建设350米高的站前标志性建筑,全面改造12个老村.在规划委员会中,最受关注的是南站内外交通优化。专家建议,在核心区落实站城一体化建设理念,保障多层次地下空间连续性,分层管理人流,明确南站打造轨道交通连接的立体枢纽。为此,本轮规划在南站片区规划了9条轨道交通线路。规划铁路线总长38.2公里,共设车站16座。轨道交通站点覆盖率达到37.8%,核心区轨道交通站点覆盖率达到100%。9条轨道交通线路为:3条城际轨道——广珠城际:广州南站——珠海;广佛环城际:广州南站—金融城—白云机场—佛山西站—广州南站;广州城际:佛山—广州南站—莞城。4条地铁——2号线:嘉禾望岗——广州南站;7号线:佛山北滘新城—广州南站—萝岗;22号线:南沙客运口岸—广州南站—白鹅滩—白云机场;佛山2号线:佛山西站—广州南站。2路有轨电车——南海新交通:广州南站——南海金融高新区;N2线:广州南站—大夫山—石桥—莲花山。此外,规划提出建设4条直达干线公路,快速连接南站与广州中心城区,从南站直达市中心仅需10-20分钟。南方日报记者刘怀玉通讯员隋贵子轩[][]除了常用的文字和标题,还可以获取作者、发布时间、摘要、关键词、图片链接、视频链接等,但不是100%识别,很多新闻作者、关键词和文章摘要无法识别,但发布时间、图片和视频链接基本可以识别。如果文章没有注明使用的语言,报纸会尝试自动识别。世界上有那么多语言,报纸不可能100%完美支持所有语言,但目前报纸可以支持35种语言,从时间上来说基本可以覆盖大部分国家和地区的新闻。通过newspaper.languages()可以查看报库支持的语言及其对应的参数。输入>>>importnewspaper>>>newspaper.languages()#查看报库支持的语言及其对应的参数。输入您可用的语言是:输入代码全名ar阿拉伯语be白俄罗斯语bg保加利亚语da丹麦语de德语el希腊语en英语es西班牙语et爱沙尼亚语fa波斯语fi芬兰语fr法语he希伯来语hi印地语hr克罗地亚语hu匈牙利语id印度尼西亚语it意大利语ja日语ko韩语mk马其顿语nb)nl荷兰语no挪威语pl波兰语pt葡萄牙语ro罗马尼亚语ru俄语sl斯洛文尼亚语srSerbiansvSwedishswSwahilitrTurkishukUkrainianviVietnamesezhChinese2.2爬取同一个网站的多条新闻单个新闻爬取效率太低,需要找到新闻的详细UR??L才能爬取内容。需要从某个网站或者多个网站抓取大量的新闻,那么使用报纸显然是不够的。通过构建一个新闻源,可以包含整个新闻网站的所有新闻,然后利用这个新闻源对新闻网站的新闻进行索引和检索。爬行。下面以南方网为例,详细说明如何使用报库爬取多条新闻。1.首先构建新闻源importnewspaperurl='http://www.southcn.com/'#南方网south_paper=newspaper.build(url,language='zh')#构建新闻源2.文章缓存By默认情况下,报纸缓存所有以前获取的文章并删除它已经获取的所有文章。此功能用于防止重复文章并提高提取速度。>>>south_paper.size()#查看有多少个链接1838>>>##默认文章缓存的情况下,过一会>>>url='http://www.southcn.com/'#南方网>>>new_south_paper=newspaper.build(url,language='zh')#建立新的新闻源>>>new_south_paper.size()18一段时间后重建同网站的新闻源,并然后查看新闻链接,只找到18条,说明这段时间新增/更新了18条新闻。如果您不需要使用此功能,可以使用memoize_articles参数选择退出此功能。south_paper=newspaper.build(url,language='zh',memoize_articles=False)#构建新闻源3.提取源类别通过category_urls()可以提取源网站下的所有其他新闻网站链接,可以提取网站链接,建立更多新闻源,获取更多新闻。#提取源类别forcategoryinsouth_paper.category_urls():print(category)result:http://www.southcn.com/http://pc.nfapp.southcn.comhttp://culture.southcn.comhttp://theory.southcn.comhttp://creditgd.southcn.com......4.提取源新闻网站的品牌和描述构建新闻源后,可以直接查看其品牌名称和介绍新闻网站。#提取源新闻网站的品牌和描述print('brand:',south_paper.brand)#品牌print('Description:',south_paper.description)#描述品牌:southcn描述:南方网/南方新闻网是经中共广东省省委、广东省人民政府批准建设新闻宣传网站。南方网/南方新闻网由广东省委宣传部主办、管理,南方报业传媒集团成员单位。经国务院新闻办公室批准从事新闻出版业务,并被确定为全国重点新闻网站之一。南方网/南方新闻网作为华南地区最大的综合新闻平台,是海内外网友了解广东最权威、最快捷的途径。5、查看新闻链接构建新闻源后,还可以查看整个新闻源下的所有新闻链接及其编号。通过一个for循环,可以将所有对应的新闻页面一一列出。这与第三点中的来源类别不同。源类是预先新闻网站的主页。每个主页下面都有很多新闻链接,新闻链接就是新闻源中每条新闻报道的实际内容。网址。#查看south_paper.articles中文章的新闻来源下的所有新闻链接:print(article.url)len(south_paper.articles)#查看新闻链接数,与south_paper.size()一致输出结果:http://www.southcn.com/pc2018/nfrmt/node_384365.htmhttp://www.southcn.com/pc2018/xczx/node_384360.htmhttp://tech.southcn.com/t/2019-12/09/content_189747678.htmhttp://tech.southcn.com/t/2019-12/09/content_189747668.htmhttp://tech.southcn.com/t/2019-12/09/content_189747657.htm...1838有一件事需要注意的是,并不是所有的1838新闻链接都对应一个新闻报道,有些只是新闻网站的子节点。子节点类似于新闻类别,其中包含指向其他新闻的链接。它可能只是一个标题,没有新闻文本或类似的东西。例如,新闻链接中第一个和第二个链接的URL也与以下新闻报道的URL有明显不同。第一个链接对应的是《南方融媒体专区》,在报纸中可以通过.title()函数检索到它的名字,但是因为它没有新闻正文,所以用.text()检索出来的会是一个空字符串。6.提取单篇文章报库既然可以提取新闻源中每篇新闻报道的URL链接,那么它肯定能够据此爬取新闻内容。我们以新闻链接中的第四个链接为例。摘录其中一篇新闻报道-《创新的佛山呼唤一条创新街》。#推进其中一篇文章one_article=south_paper.articles[3]#选择第四条新闻链接one_article.download()#下载网页one_article.parse()#解析网页print("Title:",one_article.title)print("Text:",one_article.text)output:Title:创新佛山呼唤创新一条街Text:在钱塘江畔的杭州高新区,只有一公里长的物联网一条街从海康威视、吉利汽车等十家高新技术企业总部及研发部门。人才、技术、资本等创新要素聚集于此。在钱塘江畔的杭州高新区,一公里长的物联网一条街聚集了海康威视、吉利汽车等数十家高科技企业的总部和研发部门。人才、技术、资本等创新要素聚集于此。“创新区”是集生活与创新、高端研发机构、企业集群、孵化器于一体的城市经济空间。以其紧凑的物理空间、便利的交通、科技的网络交互,正逐渐成为城市经济空间。进入大众视野。近年来,创新区在世界各地蓬勃发展。在国外,纽约的硅巷、剑桥的肯德尔广场等街区已成为高科技中小企业集群的典型样本;在国内,北京的中关村和深圳的华强北也是创新创业资源最密集的特色街区。在一定程度上,创新区块是创新龙头企业与高新技术园区之间的中间状态,是创新集聚从“点”到“面”的跨越。杭州物联网街就是一个典型案例。作为杭州高新区的龙头产业,物联网产业的核心技术聚集地就从这条街开始。随着海康威视、大华集团等一批龙头企业率先入驻,一批产业链上下游企业迅速涌入物联网一条街,行业先进技术和高端人才逐渐聚集。当产业集聚发展到一定程度时,街区的城镇化进程也会加快。不少当地企业员工表示,5年前,物联网街两边还有一块空地。如今,物联网街的发展已经高度现代化,学校、医院、商场等生活设施十分齐全。另一个制造中心佛山,拥有美的、格兰仕等一批创新龙头企业。三龙湾、佛山高新区等重大创新平台也在稳步崛起,不乏创新“点”和“面”。然而,佛山尚未出现具有一定影响力的高水平创新街区。早在2013年,佛山高新区就提出建设科技一条街,探索金融与科技产业的创新融合,通过集约建设10余家科技创新载体,为佛高区打造科技新城积蓄力量。创新城市。同样在2013年,佛山提出建设民营金融街,为产业发展提供金融支持。如今,这些创新街区已初具雏形,但与国际国内一流水平相比,辐射力和集聚力仍有待提升。创新板块的形成离不开政府、企业和人才。一个成熟的创新区块,往往能让创新创业企业获得更多的知识溢出,让高端人才获得更好的生活体验,让地方政府从中获得更全面的收益。佛山在这个领域不缺资源,不缺平台,更不缺希望和未来。借鉴杭州物联网一条街发展经验,佛山可通过加强规划引领和突出产业功能分工,形成主业突出、分工协作、科学有序的平台格局。同时,用好政策工具,鼓励龙头企业发挥创新引领作用,引导形成上下游全产业链创新要素。更重要的是,佛山可以立足产业基础,发挥优势,加快“城产人”融合发展,完善高端人才工作生活配套。依托这一系列有力而有效的举措,我们期待在创新佛山找到一个全新的创新街区。7、提取新闻源下的所有新闻内容通过for循环,可以将新闻报道一个一个地加载解析,将其内容抓取出来,因为报库是一种比较简单粗暴的访问网页的方式爬行。拒绝访问的可能性还是很大的,所以一定要用try来试错。importpandasaspd#导入pandas库news_title=[]news_text=[]news=south_paper.articlesforiinrange(len(news)):#使用新闻链接的长度作为循环次数paper=news[i]尝试:纸。download()paper.parse()news_title.append(paper.title)#将新闻标题一一存储在列表中news_text.append(paper.text)#将新闻文本一一存储在列表中except:news_title.append('NULL')#如果无法访问,则使用NULL代替news_text.append('NULL')continue#创建数据表存储爬取到的新闻信息south_paper_data=pd.DataFrame({'title':news_title,'text':news_text})south_paper_data输出结果(部分):从结果来看,这次抓取报纸还是很成功的。没有出现404accessdenied的情况,所有新闻报道都爬取成功。大数据、AI时代,专业人士都在高薪奔跑,你怎么能OUT?马上去:https://www.cda.cn/?segmentfault
