HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    爬虫爬取高频关键词(python爬虫爬取关键词频率)

    发布时间:2023-04-22 00:15:49     稿源: 创意岭    阅读: 112        

    大家好!今天让创意岭的小编来大家介绍下关于爬虫爬取高频关键词的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

    开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等

    只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端

    官网:https://ai.de1919.com

    创意岭作为行业内优秀的企业,服务客户遍布全球各地,如需了解SEO相关业务请拨打电话175-8598-2043,或添加微信:1454722008

    本文目录:

    爬虫爬取高频关键词(python爬虫爬取关键词频率)

    一、python爬虫是什么

    Python爬虫是指在某种原因进行互联网请求获取信息

    二、Python爬虫可以爬取什么

    Python爬虫可以爬取的东西有很多,Python爬虫怎么学?简单的分析下:

    如果你仔细观察,就不难发现,懂爬虫、学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得简单、容易上手。

    利用爬虫我们可以获取大量的价值数据,从而获得感性认识中不能得到的信息,比如:

    知乎:爬取优质答案,为你筛选出各话题下最优质的内容。

    淘宝、京东:抓取商品、评论及销量数据,对各种商品及用户的消费场景进行分析。

    安居客、链家:抓取房产买卖及租售信息,分析房价变化趋势、做不同区域的房价分析。

    拉勾网、智联:爬取各类职位信息,分析各行业人才需求情况及薪资水平。

    雪球网:抓取雪球高回报用户的行为,对股票市场进行分析和预测。

    爬虫是入门Python最好的方式,没有之一。Python有很多应用的方向,比如后台开发、web开发、科学计算等等,但爬虫对于初学者而言更友好,原理简单,几行代码就能实现基本的爬虫,学习的过程更加平滑,你能体会更大的成就感。

    掌握基本的爬虫后,你再去学习Python数据分析、web开发甚至机器学习,都会更得心应手。因为这个过程中,Python基本语法、库的使用,以及如何查找文档你都非常熟悉了。

    对于小白来说,爬虫可能是一件非常复杂、技术门槛很高的事情。比如有人认为学爬虫必须精通 Python,然后哼哧哼哧系统学习 Python 的每个知识点,很久之后发现仍然爬不了数据;有的人则认为先要掌握网页的知识,遂开始 HTMLCSS,结果入了前端的坑,瘁……

    但掌握正确的方法,在短时间内做到能够爬取主流网站的数据,其实非常容易实现,但建议你从一开始就要有一个具体的目标。

    在目标的驱动下,你的学习才会更加精准和高效。那些所有你认为必须的前置知识,都是可以在完成目标的过程中学到的。这里给你一条平滑的、零基础快速入门的学习路径。

    1.学习 Python 包并实现基本的爬虫过程

    2.了解非结构化数据的存储

    3.学习scrapy,搭建工程化爬虫

    4.学习数据库知识,应对大规模数据存储与提取

    5.掌握各种技巧,应对特殊网站的反爬措施

    6.分布式爬虫,实现大规模并发采集,提升效率

    学习 Python 包并实现基本的爬虫过程

    大部分爬虫都是按“发送请求——获得页面——解析页面——抽取并储存内容”这样的流程来进行,这其实也是模拟了我们使用浏览器获取网页信息的过程。

    Python中爬虫相关的包很多:urllib、requests、bs4、scrapy、pyspider 等,建议从requests+Xpath 开始,requests 负责连接网站,返回网页,Xpath 用于解析网页,便于抽取数据。

    如果你用过 BeautifulSoup,会发现 Xpath 要省事不少,一层一层检查元素代码的工作,全都省略了。这样下来基本套路都差不多,一般的静态网站根本不在话下,豆瓣、糗事百科、腾讯新闻等基本上都可以上手了。

    当然如果你需要爬取异步加载的网站,可以学习浏览器抓包分析真实请求或者学习Selenium来实现自动化,这样,知乎、时光网、猫途鹰这些动态的网站也可以迎刃而解。

    了解非结构化数据的存储

    爬回来的数据可以直接用文档形式存在本地,也可以存入数据库中。

    开始数据量不大的时候,你可以直接通过 Python 的语法或 pandas 的方法将数据存为csv这样的文件。

    当然你可能发现爬回来的数据并不是干净的,可能会有缺失、错误等等,你还需要对数据进行清洗,可以学习 pandas 包的基本用法来做数据的预处理,得到更干净的数据。

    学习 scrapy,搭建工程化的爬虫

    掌握前面的技术一般量级的数据和代码基本没有问题了,但是在遇到非常复杂的情况,可能仍然会力不从心,这个时候,强大的 scrapy 框架就非常有用了。

    scrapy 是一个功能非常强大的爬虫框架,它不仅能便捷地构建request,还有强大的 selector 能够方便地解析 response,然而它最让人惊喜的还是它超高的性能,让你可以将爬虫工程化、模块化。

    学会 scrapy,你可以自己去搭建一些爬虫框架,你就基本具备爬虫工程师的思维了。

    学习数据库基础,应对大规模数据存储

    爬回来的数据量小的时候,你可以用文档的形式来存储,一旦数据量大了,这就有点行不通了。所以掌握一种数据库是必须的,学习目前比较主流的 MongoDB 就OK。

    MongoDB 可以方便你去存储一些非结构化的数据,比如各种评论的文本,图片的链接等等。你也可以利用PyMongo,更方便地在Python中操作MongoDB。

    因为这里要用到的数据库知识其实非常简单,主要是数据如何入库、如何进行提取,在需要的时候再学习就行。

    掌握各种技巧,应对特殊网站的反爬措施

    当然,爬虫过程中也会经历一些绝望啊,比如被网站封IP、比如各种奇怪的验证码、userAgent访问限制、各种动态加载等等。

    遇到这些反爬虫的手段,当然还需要一些高级的技巧来应对,常规的比如访问频率控制、使用代理IP池、抓包、验证码的OCR处理等等。

    往往网站在高效开发和反爬虫之间会偏向前者,这也为爬虫提供了空间,掌握这些应对反爬虫的技巧,绝大部分的网站已经难不到你了.

    分布式爬虫,实现大规模并发采集

    爬取基本数据已经不是问题了,你的瓶颈会集中到爬取海量数据的效率。这个时候,相信你会很自然地接触到一个很厉害的名字:分布式爬虫。

    分布式这个东西,听起来很恐怖,但其实就是利用多线程的原理让多个爬虫同时工作,需要你掌握 Scrapy + MongoDB + Redis 这三种工具。

    Scrapy 前面我们说过了,用于做基本的页面爬取,MongoDB 用于存储爬取的数据,Redis 则用来存储要爬取的网页队列,也就是任务队列。

    所以有些东西看起来很吓人,但其实分解开来,也不过如此。当你能够写分布式的爬虫的时候,那么你可以去尝试打造一些基本的爬虫架构了,实现一些更加自动化的数据获取。

    你看,这一条学习路径下来,你已然可以成为老司机了,非常的顺畅。所以在一开始的时候,尽量不要系统地去啃一些东西,找一个实际的项目(开始可以从豆瓣、小猪这种简单的入手),直接开始就好。

    因为爬虫这种技术,既不需要你系统地精通一门语言,也不需要多么高深的数据库技术,高效的姿势就是从实际的项目中去学习这些零散的知识点,你能保证每次学到的都是最需要的那部分。

    当然唯一麻烦的是,在具体的问题中,如何找到具体需要的那部分学习资源、如何筛选和甄别,是很多初学者面临的一个大问题。

    以上就是我的回答,希望对你有所帮助,望采纳。

    三、python 新浪微博爬虫,求助

    0x00. 起因

    因为参加学校大学生创新竞赛,研究有关微博博文表达的情绪,需要大量微博博文,而网上无论是国内的某度、csdn,还是国外谷歌、gayhub、codeproject等都找不到想要的程序,没办法只能自己写一个程序了。

    ps.在爬盟找到类似的程序,但是是windows下的,并且闭源,而且最终爬取保存的文件用notepad++打开有很多奇怪的问题,所以放弃了。

    0x01. 基础知识

    本程序由Python写成,所以基本的python知识是必须的。另外,如果你有一定的计算机网络基础,在前期准备时会有少走很多弯路。

    对于爬虫,需要明确几点:

    1. 对爬取对象分类,可以分为以下几种:第一种是不需要登录的,比如博主以前练手时爬的中国天气网,这种网页爬取难度较低,建议爬虫新手爬这类网页;第二种是需要登录的,如豆瓣、新浪微博,这些网页爬取难度较高;第三种独立于前两种,你想要的信息一般是动态刷新的,如AJAX或内嵌资源,这种爬虫难度最大,博主也没研究过,在此不细举(据同学说淘宝的商品评论就属于这类)。

    2. 如果同一个数据源有多种形式(比如电脑版、手机版、客户端等),优先选取较为“纯净的”展现。比如新浪微博,有网页版,也有手机版,而且手机版可以用电脑浏览器访问,这时我优先选手机版新浪微博。

    3. 爬虫一般是将网页下载到本地,再通过某些方式提取出感兴趣的信息。也就是说,爬取网页只完成了一半,你还要将你感兴趣的信息从下载下来的html文件中提取出来。这时就需要一些xml的知识了,在这个项目中,博主用的是XPath提取信息,另外可以使用XQuery等等其他技术,详情请访问w3cschool。

    4. 爬虫应该尽量模仿人类,现在网站反爬机制已经比较发达,从验证码到禁IP,爬虫技术和反爬技术可谓不断博弈。

    0x02. 开始

    决定了爬虫的目标之后,首先应该访问目标网页,明确目标网页属于上述几种爬虫的哪种,另外,记录为了得到感兴趣的信息你需要进行的步骤,如是否需要登录,如果需要登录,是否需要验证码;你要进行哪些操作才能获得希望得到的信息,是否需要提交某些表单;你希望得到的信息所在页面的url有什么规律等等。

    以下博文以博主项目为例,该项目爬取特定新浪微博用户从注册至今的所有微博博文和根据关键词爬取100页微博博文(大约1000条)。

    0x03. 收集必要信息

    首先访问目标网页,发现需要登录,进入登录页面如下新浪微博手机版登录页面

    注意url后半段有很多形如”%xx”的转义字符,本文后面将会讲到。

    从这个页面可以看到,登录新浪微博手机版需要填写账号、密码和验证码。

    这个验证码是近期(本文创作于2016.3.11)才需要提供的,如果不需要提供验证码的话,将有两种方法进行登录。

    第一种是填写账号密码之后执行js模拟点击“登录”按钮,博主之前写过一个Java爬虫就是利用这个方法,但是现在找不到工程了,在此不再赘述。

    第二种需要一定HTTP基础,提交包含所需信息的HTTP POST请求。我们需要Wireshark 工具来抓取登录微博时我们发出和接收的数据包。如下图我抓取了在登录时发出和接收的数据包Wireshark抓取结果1

    在搜索栏提供搜索条件”http”可得到所有http协议数据包,右侧info显示该数据包的缩略信息。图中蓝色一行是POST请求,并且info中有”login”,可以初步判断这个请求是登录时发出的第一个数据包,并且这个180.149.153.4应该是新浪微博手机版登录认证的服务器IP地址,此时我们并没有任何的cookie。

    在序号为30是数据包中有一个从该IP发出的HTTP数据包,里面有四个Set-Cookie字段,这些cookie将是我们爬虫的基础。

    Wireshark抓取结果2

    早在新浪微博服务器反爬机制升级之前,登录是不需要验证码的,通过提交POST请求,可以拿到这些cookie,在项目源码中的TestCookie.py中有示例代码。

    ps.如果没有wireshark或者不想这么麻烦的话,可以用浏览器的开发者工具,以chrome为例,在登录前打开开发者工具,转到Network,登录,可以看到发出和接收的数据,登录完成后可以看到cookies,如下图chrome开发者工具

    接下来访问所需页面,查看页面url是否有某种规律。由于本项目目标之一是获取某用户的全部微博,所以直接访问该用户的微博页面,以央视新闻 为例。

    央视新闻1

    图为央视新闻微博第一页,观察该页面的url可以发现,新浪微博手机版的微博页面url组成是 “weibo.cn/(displayID)?page=(pagenum)” 。这将成为我们爬虫拼接url的依据。

    接下来查看网页源码,找到我们希望得到的信息的位置。打开浏览器开发者工具,直接定位某条微博,可以发现它的位置,如下所示。

    xpath

    观察html代码发现,所有的微博都在<div>标签里,并且这个标签里有两个属性,其中class属性为”c”,和一个唯一的id属性值。得到这个信息有助于将所需信息提取出来。

    另外,还有一些需要特别注意的因素

    * 微博分为原创微博和转发微博

    * 按照发布时间至当前时间的差距,在页面上有”MM分钟前”、”今天HH:MM”、”mm月dd日 HH:MM”、”yyyy-mm-dd HH:MM:SS”等多种显示时间的方式* 手机版新浪微博一个页面大约显示10条微博,所以要注意对总共页数进行记录以上几点都是细节,在爬虫和提取的时候需要仔细考虑。

    0x04. 编码

    1.爬取用户微博

    本项目开发语言是Python 2.7,项目中用了一些第三方库,第三方库可以用pip的方法添加。

    既然程序自动登录的想法被验证码挡住了,想要访问特定用户微博页面,只能使用者提供cookies了。

    首先用到的是Python的request模块,它提供了带cookies的url请求。

    import request

    print request.get(url, cookies=cookies).content使用这段代码就可以打印带cookies的url请求页面结果。

    首先取得该用户微博页面数,通过检查网页源码,查找到表示页数的元素,通过XPath等技术提取出页数。

    页数

    项目使用lxml模块对html进行XPath提取。

    首先导入lxml模块,在项目里只用到了etree,所以from lxml import etree

    然后利用下面的方法返回页数

    def getpagenum(self):

    url = self.geturl(pagenum=1)

    html = requests.get(url, cookies=self.cook).content # Visit the first page to get the page number.

    selector = etree.HTML(html)

    pagenum = selector.xpath('//input[@name="mp"]/@value')[0]

    return int(pagenum)

    接下来就是不断地拼接url->访问url->下载网页。

    需要注意的是,由于新浪反爬机制的存在,同一cookies访问页面过于“频繁”的话会进入类似于“冷却期”,即返回一个无用页面,通过分析该无用页面发现,这个页面在特定的地方会出现特定的信息,通过XPath技术来检查这个特定地方是否出现了特定信息即可判断该页面是否对我们有用。

    def ispageneeded(html):

    selector = etree.HTML(html)

    try:

    title = selector.xpath('//title')[0]

    except:

    return False

    return title.text != '微博广场' and title.text != '微博'

    如果出现了无用页面,只需简单地重新访问即可,但是通过后期的实验发现,如果长期处于过频访问,返回的页面将全是无用页面,程序也将陷入死循环。为了避免程序陷入死循环,博主设置了尝试次数阈值trycount,超过这个阈值之后方法自动返回。

    下面代码片展示了单线程爬虫的方法。

    def startcrawling(self, startpage=1, trycount=20):

    attempt = 0

    try:

    os.mkdir(sys.path[0] + '/Weibo_raw/' + self.wanted)except Exception, e:

    print str(e)

    isdone = False

    while not isdone and attempt < trycount:

    try:

    pagenum = self.getpagenum()

    isdone = True

    except Exception, e:

    attempt += 1

    if attempt == trycount:

    return False

    i = startpage

    while i <= pagenum:

    attempt = 0

    isneeded = False

    html = ''

    while not isneeded and attempt < trycount:

    html = self.getpage(self.geturl(i))

    isneeded = self.ispageneeded(html)

    if not isneeded:

    attempt += 1

    if attempt == trycount:

    return False

    self.savehtml(sys.path[0] + '/Weibo_raw/' + self.wanted + '/' + str(i) + '.txt', html)print str(i) + '/' + str(pagenum - 1)

    i += 1

    return True

    考虑到程序的时间效率,在写好单线程爬虫之后,博主也写了多线程爬虫版本,基本思想是将微博页数除以线程数,如一个微博用户有100页微博,程序开10个线程,那么每个线程只负责10个页面的爬取,其他基本思想跟单线程类似,只需仔细处理边界值即可,在此不再赘述,感兴趣的同学可以直接看代码。另外,由于多线程的效率比较高,并发量特别大,所以服务器很容易就返回无效页面,此时trycount的设置就显得更重要了。博主在写这篇微博的时候,用一个新的cookies,多线程爬取现场测试了一下爬取北京邮电大学的微博,3976条微博全部爬取成功并提取博文,用时仅15s,实际可能跟cookies的新旧程度和网络环境有关,命令行设置如下,命令行意义在项目网址里有说明python main.py _T_WM=xxx; SUHB=xxx; SUB=xxx; gsid_CTandWM=xxx u bupt m 20 20爬取的工作以上基本介绍结束,接下来就是爬虫的第二部分,解析了。由于项目中提供了多线程爬取方法,而多线程一般是无序的,但微博博文是依靠时间排序的,所以项目采用了一种折衷的办法,将下载完成的页面保存在本地文件系统,每个页面以其页号为文件名,待爬取的工作结束后,再遍历文件夹内所有文件并解析。

    通过前面的观察,我们已经了解到微博博文存在的标签有什么特点了,利用XPath技术,将这个页面里所有有这个特点的标签全部提取出来已经不是难事了。

    在这再次提醒,微博分为转发微博和原创微博、时间表示方式。另外,由于我们的研究课题仅对微博文本感兴趣,所以配图不考虑。

    def startparsing(self, parsingtime=datetime.datetime.now()):

    basepath = sys.path[0] + '/Weibo_raw/' + self.uidfor filename in os.listdir(basepath):

    if filename.startswith('.'):

    continue

    path = basepath + '/' + filename

    f = open(path, 'r')

    html = f.read()

    selector = etree.HTML(html)

    weiboitems = selector.xpath('//div[@class="c"][@id]')for item in weiboitems:

    weibo = Weibo()

    weibo.id = item.xpath('./@id')[0]

    cmt = item.xpath('./div/span[@class="cmt"]')if len(cmt) != 0:

    weibo.isrepost = True

    weibo.content = cmt[0].text

    else:

    weibo.isrepost = False

    ctt = item.xpath('./div/span[@class="ctt"]')[0]

    if ctt.text is not None:

    weibo.content += ctt.text

    for a in ctt.xpath('./a'):

    if a.text is not None:

    weibo.content += a.text

    if a.tail is not None:

    weibo.content += a.tail

    if len(cmt) != 0:

    reason = cmt[1].text.split(u'\xa0')

    if len(reason) != 1:

    weibo.repostreason = reason[0]

    ct = item.xpath('./div/span[@class="ct"]')[0]

    time = ct.text.split(u'\xa0')[0]

    weibo.time = self.gettime(self, time, parsingtime)self.weibos.append(weibo.__dict__)

    f.close()

    方法传递的参数parsingtime的设置初衷是,开发前期爬取和解析可能不是同时进行的(并不是严格的“同时”),微博时间显示是基于访问时间的,比如爬取时间是10:00,这时爬取到一条微博显示是5分钟前发布的,但如果解析时间是10:30,那么解析时间将错误,所以应该讲解析时间设置为10:00。到后期爬虫基本开发完毕,爬取工作和解析工作开始时间差距降低,时间差将是爬取过程时长,基本可以忽略。

    解析结果保存在一个列表里,最后将这个列表以json格式保存到文件系统里,删除过渡文件夹,完成。

    def save(self):

    f = open(sys.path[0] + '/Weibo_parsed/' + self.uid + '.txt', 'w')jsonstr = json.dumps(self.weibos, indent=4, ensure_ascii=False)f.write(jsonstr)

    f.close()

    2.爬取关键词

    同样的,收集必要的信息。在微博手机版搜索页面敲入”python”,观察url,研究其规律。虽然第一页并无规律,但是第二页我们发现了规律,而且这个规律可以返回应用于第一页第一页

    第二页

    应用后第一页

    观察url可以发现,对于关键词的搜索,url中的变量只有keyword和page(事实上,hideSearchFrame对我们的搜索结果和爬虫都没有影响),所以在代码中我们就可以对这两个变量进行控制。

    另外,如果关键词是中文,那么url就需要对中文字符进行转换,如我们在搜索框敲入”开心”并搜索,发现url如下显示搜索开心

    但复制出来却为

    http://weibo.cn/search/mblog?hideSearchFrame=&keyword=%E5%BC%80%E5%BF%83&page=1幸好,python的urllib库有qoute方法处理中文转换的功能(如果是英文则不做转换),所以在拼接url前使用这个方法处理一下参数。

    另外,考虑到关键词搜索属于数据收集阶段使用的方法,所以在此只提供单线程下载网页,如有多线程需要,大家可以按照多线程爬取用户微博的方法自己改写。最后,对下载下来的网页进行提取并保存(我知道这样的模块设计有点奇怪,打算重(xin)构(qing)时(hao)时再改,就先这样吧)。

    def keywordcrawling(self, keyword):

    realkeyword = urllib.quote(keyword) # Handle the keyword in Chinese.

    try:

    os.mkdir(sys.path[0] + '/keywords')

    except Exception, e:

    print str(e)

    weibos = []

    try:

    highpoints = re.compile(u'[\U00010000-\U0010ffff]') # Handle emoji, but it seems doesn't work.

    except re.error:

    highpoints = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')pagenum = 0

    isneeded = False

    while not isneeded:

    html = self.getpage('http://weibo.cn/search/mblog?keyword=%s&page=1' % realkeyword)isneeded = self.ispageneeded(html)

    if isneeded:

    selector = etree.HTML(html)

    try:

    pagenum = int(selector.xpath('//input[@name="mp"]/@value')[0])except:

    pagenum = 1

    for i in range(1, pagenum + 1):

    try:

    isneeded = False

    while not isneeded:

    html = self.getpage('http://weibo.cn/search/mblog?keyword=%s&page=%s' % (realkeyword, str(i)))isneeded = self.ispageneeded(html)

    selector = etree.HTML(html)

    weiboitems = selector.xpath('//div[@class="c"][@id]')for item in weiboitems:

    cmt = item.xpath('./div/span[@class="cmt"]')if (len(cmt)) == 0:

    ctt = item.xpath('./div/span[@class="ctt"]')[0]

    if ctt.text is not None:

    text = etree.tostring(ctt, method='text', encoding="unicode")tail = ctt.tail

    if text.endswith(tail):

    index = -len(tail)

    text = text[1:index]

    text = highpoints.sub(u'\u25FD', text) # Emoji handling, seems doesn't work.

    weibotext = text

    weibos.append(weibotext)

    print str(i) + '/' + str(pagenum)

    except Exception, e:

    print str(e)

    f = open(sys.path[0] + '/keywords/' + keyword + '.txt', 'w')try:

    f.write(json.dumps(weibos,indent=4,ensure_ascii=False))except Exception,ex:

    print str(ex)

    finally:

    f.close()

    博主之前从未写过任何爬虫程序,为了获取新浪微博博文,博主先后写了3个不同的爬虫程序,有Python,有Java,爬虫不能用了是很正常的,不要气馁,爬虫程序和反爬机制一直都在不断博弈中,道高一尺魔高一丈。

    另. 转载请告知博主,如果觉得博主帅的话就可以不用告知了

    四、网络爬虫抓取数据 有什么好的应用

    一般抓数据的话可以学习Python,但是这个需要代码的知识。

    如果是没有代码知识的小白可以试试用成熟的采集器。

    目前市面比较成熟的有八爪鱼,后羿等等,但是我个人习惯八爪鱼的界面,用起来也好上手,主要是他家的教程容易看懂。可以试试。

    以上就是关于爬虫爬取高频关键词相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。


    推荐阅读:

    百度关键词排名爬虫(关键词爬虫工具)

    爬虫人民日报关键词(人民日报 关键词)

    怎么通过一段话搜索来源爬虫(怎么通过一段话搜索来源爬虫的内容)

    团队口号大全(团队口号大全8个字)

    加速器外网YouTube(手机加速器外网)