微信号:mdyc919293
当前位置:网站首页 > 搜索优化词汇 > 百度词汇 > 正文

爬虫操纵 百度搜刮 引擎下载_爬虫爬取百度检索数据(爬虫 百度搜索)

作者:猫某人 发布时间:2025-04-28 08:32 分类:百度词汇 浏览:21 评论:1


导读:  泉源:lyrichu  www.cnblogs.com/lyrichu/p/6635798.html  如有好文章投稿,请点击→这里相识详情  近来在研究文...

  泉源 :lyrichu

  www.cnblogs.com/lyrichu/p/6635798.html

  如有好文章投稿,请点击 → 这里相识 详情

  近来 在研究文本发掘 相干 的内容 ,所谓巧妇难为无米之炊,要想举行 文天职 析,起首 得到有文本吧。获取文本的方式有很多 ,比如 从网上下载现成的文本文档,大概 通过第三方提供的API举行 获取数据。但是有的时间 我们想要的数据并不能直接获取,由于 并不提供直接的下载渠道大概 API供我们获取数据 。那么这个时间 该怎么办呢?有一种比力 好的办法是通过网络爬虫 ,即编写盘算 机程序伪装成用户去得到 想要的数据。利用 盘算 机的高效,我们可以轻松快速地获取数据。

  那么该怎样 写一个爬虫呢?有很多 种语言都可以写爬虫,比如 Java ,php,python 等,我个人比力 喜好 利用 python 。由于 python不但 有着内置的功能强大 的网络库,尚有 诸多良好 的第三方库 ,别人直接造好了轮子,我们直接拿过来用就可以了,这为写爬虫带来了极大的方便。不浮夸 地说,利用 不到10行python代码着实 就可以写一个小小的爬虫 ,而利用 其他的语言可以要多写很多 代码,简便 易懂正是python的巨大的上风 。

  好了废话不多说,进入本日 的正题 。近来 几年网易云音乐火了起来 ,我本身 就是网易云音乐的用户,用了几年了。从前 用的是QQ音乐和酷狗,通过我本身 的切身 履历 来看 ,我以为 网易云音乐最优特色的就是其精准的歌曲保举 和独具特色的用户批评 (谨慎 声明!!!这不是软文,非广告!!!仅代表个人观点,非喜勿喷!)。常常 一首歌曲下面会有一些被点赞浩繁 的神批评 。加上前些日子网易云音乐将精选用户批评 搬上了地铁 ,网易云音乐的批评 又火了一把。以是 我想对网易云的批评 举行 分析,发现此中 的规律,特别 是分析一些热评具有什么共同的特点。带着这个目标 ,我开始了对网易云批评 的抓取工作 。

  python内置了两个网络库urllib和urllib2,但是这两个库利用 起来不是特别 方便,以是 在这里我们利用 一个广受好评的第三方库requests。利用 requests只用很少的几行代码就可以实现设置署理 ,模仿 登岸 等比力 复杂的爬虫工作。假如 已经安装pip的话 ,直接利用 pip install requests 即可安装。中文文档地点 在此https://docs.python-requests.org/zh_CN/latest/user/quickstart.html,各人 有什么题目 可以自行参考官方文档,上面会有非常具体 的先容 。至于urllib和urllib2这两个库也是比力 有效 的 ,以后假如 有机遇 我会再给各人 先容 一下。

  在正式开始先容 爬虫之前,起首 来说一下爬虫的根本 工作原理,我们知道我们打开欣赏 器访问某个网址本质上是向服务器发送了肯定 的哀求 ,服务器在收到我们的哀求 之后,会根据我们的哀求 返回数据,然后通过欣赏 器将这些数据分析 好 ,出现 在我们的面前 。假如 我们利用 代码的话,就要跳过欣赏 器的这个步调 ,直接向服务器发送肯定 的数据 ,然后再取回服务器返回的数据,提取出我们想要的信息 。但是题目 是,有的时间 服务器必要 对我们发送的哀求 举行 校验,假如 它以为 我们的哀求 黑白 法的 ,就会不返回数据,大概 返回错误的数据。以是 为了克制 发生这种环境 ,我们有的时间 必要 把程序伪装成一个正常的用户 ,以便顺遂 得到服务器的回应。怎样 伪装呢?这就要看用户通过欣赏 器访问一个网页与我们通过程序访问一个网页之间的区别 。通常来说,我们通过欣赏 器访问一个网页,除了发送访问的url之外 ,还会给服务发送额外的信息,比如 headers(头部信息)等,这就相称 于是哀求 的身份证明 ,服务器看到了这些数据,就会知道我们是通过正常的欣赏 器访问的,就会乖乖地返回数据给我们了。以是 我们程序就得像欣赏 器一样 ,在发送哀求 的时间 ,带上这些标记 着我们身份的信息,如许 就能顺遂 拿到数据。有的时间 ,我们必须在登录状态下才华 得到一些数据 ,以是 我们必须要模仿 登录 。本质上来说,通过欣赏 器登录就是post一些表单信息给服务器(包罗 用户名,暗码 等信息) ,服务器校验之后我们就可以顺遂 登录了,利用 程序也是一样,欣赏 器post什么数据 ,我们原样发送就可以了。关于模仿 登录,我背面 会专门先容 一下。固然 事变 有的时间 也不会这么顺遂 ,由于 有些网站设置了反爬步伐 ,比如 假如 访问过快,偶然 间 会被封ip(典范 的比如 豆瓣) 。这个时间 我们还得要设置署理 服务器,即变动 我们的ip地点 ,假如 一个ip被封了,就换别的 一个ip,具体 怎么做,这些话题以后渐渐 再说。

  末了 ,再先容 一个我以为 在写爬虫过程中非常有效 的一个小本领 。假如 你在利用 火狐欣赏 器大概 chrome的话,大概 你会留意 到有一个叫作开辟 者工具(chrome)大概 web控制台(firefox)的地方。这个工具非常有效 ,由于 利用 它 ,我们可以清楚 地看到在访问一个网站的过程中,欣赏 器到底发送了什么信息,服务器毕竟 返回了什么信息 ,这些信息是我们写爬虫的关键地点 。下面你就会看到它的巨大用处。

————————正式开始的分割线——————————

  起首 打开网易云音乐的网页版,任意 选择一首歌曲打开它的网页,这里我以周杰伦的《好天 》为例。如下图1

  

图1

  接下来打开web控制台(chrom的话打开开辟 者工具 ,假如 是其他欣赏 器应该也是雷同 ),如下图2

图2

  然后这个时间 我们必要 点选网络,打扫 全部 的信息 ,然后点击重新发送(相称 于是革新 欣赏 器),如许 我们就可以直观看到欣赏 器发送了什么信息以及服务器回应了什么信息 。如下图3

  

图3

  革新 之后得到的数据如下图4所示:

  

图4

  可以看到欣赏 器发送了非常多的信息,那么哪一个才是我们想要的呢?这里我们可以通过状态码做一个开端 的判定 ,status code(状态码)标记 了服务器哀求 的状态,这里状态码为200即表现 哀求 正常 ,而304则表现 不正常(状态码种类非常多,假如 要想具体 相识 可以自行搜刮 ,这里不说304具体 的寄义 了)。以是 我们一样平常 只用看状态码为200的哀求 就可以了 ,尚有 就是,我们可以通过右边栏的预览来大抵 观察服务器返回了什么信息(大概 查察 相应 )。如下图5所示:

  

图5

  通过这两种方法连合 一样平常 我们就可以快速找到我们想要分析的哀求 。留意 图5中的哀求 网址一栏便是 我们想要哀求 的网址,哀求 的方法有两种:get和post ,尚有 一个必要 重点关注的就是哀求 头,内里 包罗 了user-Agent(客户端信息),refrence(从那边 跳转过来)等多种信息 ,一样平常 无论是get还是 post方法我们都会把头部信息带上。头部信息如下图6所示:

  

图6

  别的 还必要 留意 的是:get哀求 一样平常 就直接把哀求 的参数以?parameter1=value1parameter2=value2 等如许 的情势 发送了,以是 不必要 带上额外的哀求 参数,而post哀求 则一样平常 必要 带上额外的参数 ,而不直接把参数放在url当中,以是 有的时间 我们还必要 关注参数这一栏。颠末 细致 探求 ,我们终于找到原来与批评 相干 的哀求 在https://music.163.com/weapi/v1/resource/comments/R_SO_4_186016?csrf_token= 这个哀求 当中,如下图7所示:

  

图7

  点开这个哀求 ,我们发现它是一个post哀求 ,哀求 的参数有两个,一个是params ,尚有 一个是encSecKey,这两个参数的值非常的长,感觉应该像是加密过的 。如下图8所示:

  

图8

  服务器返回的和批评 相干 的数据为json格式的 ,内里 含有非常丰富的信息(比如 有关批评 者的信息,批评 日期,点赞数 ,批评 内容等等),如下图9所示:(着实 hotComments为热门批评 ,comments为批评 数组)

图9

  至此 ,我们已经确定了方向了,即只必要 确定params和encSecKey这两个参数值即可,这个题目 困扰了我一下战书 ,我弄了好久 也没有搞清楚 这两个参数的加密方式 ,但是我发现了一个规律,https://music.163.com/weapi/v1/resource/comments/R_SO_4_186016?csrf_token= 中 R_SO_4_背面 的数字就是这首歌的id值,而对于差别 的歌曲的param和encSecKey值 ,假如 把一首歌比如 A的这两个参数值传给B这首歌,那么对于雷同 的页数,这种参数是通用的 ,即A的第一页的两个参数值传给其他任何一首歌的两个参数,都可以得到 相应歌曲的第一页的批评 ,对于第二页 ,第三页等也是雷同 。但是遗憾的是,差别 的页数参数是差别 的,这种办法只能抓取有限的几页(固然 抓取批评 总数和热门批评 已经充足 了) ,假如 要想抓取全部数据,就必须搞明白 这两个参数值的加密方式。以为没有搞明白 ,昨天晚上我带着这个题目 去知乎搜刮 了一下,居然真的被我找到了答案 。在这个题目 https://www.zhihu.com/question/36081767 下 ,@平胸小仙女 这位知友具体 阐明 白 怎样 破解这两个参数的加密过程,我研究了一下,发现还是 有点小复杂的 ,按照他写的方法,我改动了一下,就乐成 得到了全部的批评 。这里要对@平胸小仙女(个人主页 https://www.zhihu.com/people/luocaodan/answers)表现 感谢。假如 各人 对于破解参数加密有爱好 的话 ,可以去直接参考原帖,地点 是:https://www.zhihu.com/question/36081767。

  到此为止,怎样 抓取网易云音乐的批评 全部数据就全部讲完了 。按照惯例 ,末了 上代码,亲测有效 :

  #!/usr/bin/env python2.7

  # -*- coding: utf-8 -*-

  # a href="https://www.jobbole.com/members/dai745726163"@Time/a : 2017/3/28 8:46

  # @Author : Lyrichu

  # a href="https://www.jobbole.com/members/Email"@Email/a : 919987476@qq.com

  # @File : NetCloud_spider3.py

  '''

  @Deion:

  网易云音乐批评 爬虫,可以完备 爬取整个批评

  部分 参考了@平胸小仙女的文章(地点 :https://www.zhihu.com/question/36081767)

  post加密部分 也给出了 ,可以参考原帖:

  作者:平胸小仙女

  链接:https://www.zhihu.com/question/36081767/answer/140287795

  泉源 :知乎

  '''

  from Crypto.Cipher import AES

  import

  import requests

  import json

  import codecs

  import time

  # 头部信息

  headers= {

  'Host':"music.163.com",

  'Accept-Language':"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",

  'Accept-Encoding':"gzip, deflate",

  'Content-Type':"application/x-www-form-urlencoded",

  'Cookie':"_ntes_nnid=754361b04b121e078dee797cdb30e0fd,1486026808627; _ntes_nuid=754361b04b121e078dee797cdb30e0fd; JSESSIONID-WYYY=yfqt9ofhY%5CIYNkXW71TqY5OtSZyjE%2FoswGgtl4dMv3Oa7%5CQ50T%2FVaee%2FMSsCifHE0TGtRMYhSPpr20i%5CRO%2BO%2B9pbbJnrUvGzkibhNqw3Tlgn%5Coil%2FrW7zFZZWSA3K9gD77MPSVH6fnv5hIT8ms70MNB3CxK5r3ecj3tFMlWFbFOZmGw%5C%3A1490677541180; _iuqxldmzr_=32; vjuids=c8ca7976.15a029d006a.0.51373751e63af8; vjlast=1486102528.1490172479.21; __gads=ID=a9eed5e3cae4d252:T=1486102537:S=ALNI_Mb5XX2vlkjsiU5cIy91-ToUDoFxIw; vinfo_n_f_l_n3=411a2def7f75a62e.1.1.1486349441669.1486349607905.1490173828142; P_INFO=m15527594439@163.com|1489375076|1|study|0099|nullnullnull#hub420100#10#0#0|1554391|study_client|15527594439@163.com; NTES_CMT_USER_INFO=84794134%7Cm155****4439%7Chttps%3A%2F%2Fsimg.ws.126.net%2Fe%2Fimg5.cache.netease.com%2Ftie%2Fimages%2Fyun%2Fphoto_default_62.png.39x39.100.jpg%7Cfalse%7CbTE1NTI3NTk0NDM5QDE2My5jb20%3D; usertrack=c+5+hljHgU0T1FDmA66MAg==; Province=027; City=027; _ga=GA1.2.1549851014.1489469781; __utma=94650624.1549851014.1489469781.1490664577.1490672820.8; __utmc=94650624; __utmz=94650624.1490661822.6.2.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; playerid=81568911; __utmb=94650624.23.10.1490672820",

  'Connection':"keep-alive",

  'Referer':'https://music.163.com/'

  }

  # 设置署理 服务器

  proxies= {

  'http:':'https://121.232.146.184',

  'https:':'https://144.255.48.197'

  }

  # offset的取值为:(批评 页数-1)*20,total第一页为true,别的 页为false

  # first_param = '{rid:"", offset:"0", total:"true", limit:"20", csrf_token:""}' # 第一个参数

  second_param= "010001"# 第二个参数

  # 第三个参数

  third_param= "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"

  # 第四个参数

  forth_param= "0CoJUm6Qyw8W8jud"

  # 获取参数

  def get_params(page): # page为传入页数

  iv= "0102030405060708"

  first_key= forth_param

  second_key= 16* 'F'

爬虫操作百度搜索引擎下载_爬虫爬取百度检索数据 爬虫操纵
百度搜刮
引擎下载_爬虫爬取百度检索数据(爬虫 百度搜索) 百度词汇

  if(page== 1): # 假如 为第一页

  first_param= '{rid:"", offset:"0", total:"true", limit:"20", csrf_token:""}'

  h_encText= AES_encrypt(first_param,first_key,iv)

  else:

  offset= str((page-1)*20)

  first_param= '{rid:"", offset:"%s", total:"%s", limit:"20", csrf_token:""}'%(offset,'false')

  h_encText= AES_encrypt(first_param,first_key,iv)

  h_encText= AES_encrypt(h_encText,second_key,iv)

  returnh_encText

  # 获取 encSecKey

  def get_encSecKey():

  encSecKey= "257348aecb5e556c066de214e531faadd1c55d814f9be95fd06d6bff9f4c7a41f831f6394d5a3fd2e3881736d94a02ca919d952872e7d0a50ebfa1769a7a62d512f5f1ca21aec60bc3819a9c3ffca5eca9a0dba6d6f7249b06f5965ecfff3695b54e1c28f3f624750ed39e7de08fc8493242e26dbc4484a01c76f739e135637c"

  returnencSecKey

  # 解密过程

  def AES_encrypt(text,key,iv):

  pad= 16- len(text)% 16

  text= text+ pad *chr(pad)

  encryptor= AES.new(key,AES.MODE_CBC,iv)

  encrypt_text= encryptor.encrypt(text)

  encrypt_text= .b64encode(encrypt_text)

  returnencrypt_text

  # 得到 批评 json数据

  def get_json(url,params,encSecKey):

  data= {

  "params": params,

  "encSecKey": encSecKey

  }

  response= requests.post(url,headers=headers,data=data,proxies= proxies)

  returnresponse.content

  # 抓取热门批评 ,返回热评列表

  def get_hot_comments(url):

  hot_comments_list= []

  hot_comments_list.append(u"用户ID 用户昵称 用户头像地点 批评 时间 点赞总数 批评 内容n")

  params= get_params(1)# 第一页

  encSecKey= get_encSecKey()

  json_text= get_json(url,params,encSecKey)

  json_dict= json.loads(json_text)

  hot_comments= json_dict['hotComments']# 热门批评

  print("共有%d条热门批评 !"% len(hot_comments))

  foritem inhot_comments:

  comment= item['content']# 批评 内容

  likedCount= item['likedCount']# 点赞总数

  comment_time= item['time']# 批评 时间(时间戳)

  userID= item['user']['userID']# 批评 者id

  nickname= item['user']['nickname']# 昵称

  avatarUrl= item['user']['avatarUrl']# 头像地点

  comment_info= userID+ " "+ nickname+ " "+ avatarUrl+ " "+ comment_time+ " "+ likedCount+ " "+ comment+ u"n"

  hot_comments_list.append(comment_info)

  returnhot_comments_list

  # 抓取某一首歌的全部批评

  def get_all_comments(url):

  all_comments_list= []# 存放全部 批评

  all_comments_list.append(u"用户ID 用户昵称 用户头像地点 批评 时间 点赞总数 批评 内容n")# 头部信息

  params= get_params(1)

  encSecKey= get_encSecKey()

  json_text= get_json(url,params,encSecKey)

  json_dict= json.loads(json_text)

  comments_num= int(json_dict['total'])

  if(comments_num% 20== 0):

  page= comments_num/ 20

  else:

  page= int(comments_num/ 20)+ 1

爬虫操作百度搜索引擎下载_爬虫爬取百度检索数据 爬虫操纵
百度搜刮
引擎下载_爬虫爬取百度检索数据(爬虫 百度搜索) 百度词汇

  print("共有%d页批评 !"% page)

  foriinrange(page): # 逐页抓取

  params= get_params(i+1)

  encSecKey= get_encSecKey()

  json_text= get_json(url,params,encSecKey)

  json_dict= json.loads(json_text)

  ifi== 0:

  print("共有%d条批评 !"% comments_num)# 全部批评 总数

  foritem injson_dict['comments']:

  comment= item['content']# 批评 内容

  likedCount= item['likedCount']# 点赞总数

  comment_time= item['time']# 批评 时间(时间戳)

  userID= item['user']['userId']# 批评 者id

  nickname= item['user']['nickname']# 昵称

  avatarUrl= item['user']['avatarUrl']# 头像地点

  comment_info= unicode(userID)+ u" "+ nickname+ u" "+ avatarUrl+ u" "+ unicode(comment_time)+ u" "+ unicode(likedCount)+ u" "+ comment+ u"n"

  all_comments_list.append(comment_info)

  print("第%d页抓取完毕!"% (i+1))

  returnall_comments_list

  # 将批评 写入文本文件

  def save_to_file(list,filename):

  with codecs.open(filename,'a',encoding='utf-8')asf:

  f.writelines(list)

  print("写入文件乐成 !")

  if__name__== "__main__":

  start_time= time.time()# 开始时间

  url= "https://music.163.com/weapi/v1/resource/comments/R_SO_4_186016/?csrf_token="

  filename= u"好天 .txt"

  all_comments_list= get_all_comments(url)

  save_to_file(all_comments_list,filename)

  end_time= time.time()#竣事 时间

  print("程序耗时%f秒."% (end_time- start_time))

  我利用 上述代码跑了一下,抓了两首周杰伦的热门歌曲《好天 》(有130多万批评 )和《告白气球》(有20多万批评 ) ,前者跑了大概有20多分钟,后者有6600多秒(也就是将近 2个小时),截图如下:

  

  留意 我是按照空格来分隔的 ,每一行分别有效 户ID 用户昵称 用户头像地点 批评 时间 点赞总数 批评 内容 这些内容。我将这两个txt文件上传到百度云了,对数据感爱好 的同砚 可以直接下载举行 文天职 析,地点 为:《好天 》(https://pan.baidu.com/s/1boBglfp) ,《告白气球》(https://pan.baidu.com/s/1o8O7k1s),大概 本身 跑一下代码抓取一下也是可以的(留意 不要开太多线程给网易云的服务器太大压力哦~~中心 有一段时间服务器返回数据特别 慢,不知道是不是限定 访问了 ,厥后 又好了)。我背面 大概 会本身 去对批评 数据举行 可视化分析,敬请等待 !

看完本文有劳绩 ?请转发分享给更多人

关注「Python开辟 者」,提拔 Python技能

标签:


相关推荐


热门推荐

您最想看到的:

已有1位网友发表了看法:

  • 匿名用户

    匿名用户  评论于 2025-05-04 13:00:51  回复

    警惕数据安全风险!使用爬虫操纵百度搜刮引擎下载、非法获取检索数据的做法应被避免和制止。

取消回复欢迎 发表评论

  • 请填写验证码
  • 百度词汇排行
    相关词汇
    标签列表
    相关推荐
  • 神马搜刮 引擎下载安装_神马搜刮 引擎下载安装手机版
  • 搜狗知乎搜刮 引擎下载_搜狗知乎搜刮 引擎下载安装
  • 必应搜刮 引擎下载官网安卓_必应搜刮 引擎下载官网安卓版
  • 欣赏 器怎么用必应搜刮 引擎下载_欣赏 器怎么用必应搜刮 引擎下载视频
  • 神马欣赏 器搜刮 引擎下载_神马欣赏 器搜刮 引擎下载安装
  • 信息检索正版查询_信息检索服务的网站
  • 百度搜刮 引擎下载免费版_百度搜刮 官网免费下载手机版
  • 百度搜刮 引擎下载官网_百度搜刮 app官方下载
  • 360急速百度搜刮 引擎_360急速百度搜刮 引擎下载
  • 高兴 国庆节百度搜刮 引擎_高兴 国庆节百度搜刮 引擎下载
  • 百度搜刮 引擎对搜刮 结果 _搜刮 引擎如百度的检索结果 页面一样平常 会有
  • 百度竞价怎么操纵 _百度竞价怎么操纵 视频
  • 百度蜘蛛是什么-常见百度爬虫有那些问题--seo在线优化工具-在线-爬虫-学习网-蜘蛛-常见
  • 白帽seo的操纵 流程包罗 哪些_白帽seo的操纵 流程包罗 哪些环节
  • seo黑帽操纵 流程_seo黑帽操纵 流程是什么
  • 随机列表

    关灯