比如要抓取某网站折线图上数据,如下截图:

  

  借助Chrome开发者工具Network。经过分析发现获取上面的热度数据,找到对应的事件url:https://pcw-api.iqiyi.com/video/video/trendcontent?ids=309006000&callback=jsonp_1548834448424_4474

  

  

通过分析:https://pcw-api.iqiyi.com/video/video/trendcontent?ids=309006000&callback=jsonp_1548834448424_4474

发现,ids=309006000是个定值,1548834448424_4474是两个随机数

ids=309006000是个定值从网页中获取。

 右键“查看网页源代码” 发现如下:

具体实现代码如下:

  1. import random
  2. from urllib import request
  3. import requests
  4.  
  5. import json
  6. class test:
  7. def __init__(self):
         #插入合适的cookie值
  8. self.mycookies = []
  9.  
  10. self.user_agent_list = [
  11. 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36',
  12. 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36',
  13. 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36',
  14. 'Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36',
  15. 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36',
  16. 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36',
  17. 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0.6',
  18. 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36',
  19. 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36',
  20. 'Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36'
  21. ]
  22.  
  23. def gettvid(self,url):
  24. tvid = ''
  25. try:
  26. cookie1 = random.choice(self.mycookies)
  27. # print(cookie1)
  28. UserAgent = random.choice(self.user_agent_list)
  29. header = {'User-Agent': UserAgent}
  30. # print(header)
  31. txt1 = requests.get(url, cookies=cookie1, headers=header).text
  32. print(txt1)
  33.  
  34. response = request.urlopen(url)
  35. page = response.read()
  36. txt = str(page.decode('utf-8'))
  37. # cookie1 = random.choice(self.mycookies)
  38. # txt = requests.get(keyurl, cookies=cookie1).text
  39. txts = txt.split('\n')
  40. # print(txts)
  41. index = len(txts) - 1
  42. while index > 0:
  43. t = txts[index]
  44. if t.find("param['tvid']") > -1:
  45. tt = t.replace('"', '').replace(' ', '')
  46. start = tt.find("=")+1
  47. end = start+9
  48. tvid = tt[start:end]
  49. tvid = tvid.strip()
  50. break
  51. index -= 1
  52.  
  53. except Exception as ex:
  54. print(ex)
  55. # print(ex)
  56. return tvid
  57.  
  58. def gethotdx(self,url):
  59. tvid =self.gettvid(url)
  60. # 产生7位随机数
  61. id1=random.randint(1111111,9999999)
  62. # 产生5为随机数
  63. id2 = random.randint(11111, 99999)
  64. link ='https://pcw-api.iqiyi.com/video/video/trendcontent?ids=%s&callback=jsonp_154881%d_%d'%(tvid,id1,id2)
  65. try:
  66. cookie1 = random.choice(self.mycookies)
  67. # print(cookie1)
  68. UserAgent = random.choice(self.user_agent_list)
  69. header = {'User-Agent': UserAgent}
  70. # print(header)
  71. txt = requests.get(link, cookies=cookie1, headers=header).text
  72.  
  73. start = txt.find('(') + 1
  74. end = txt.find(")")
  75. jsonstr = txt[start:end]
  76. data_json = json.loads(jsonstr)
  77. datas = data_json.get('data')[0]
  78. # print(data_json.get('data'))
  79.  
  80. id = datas.get('id')
  81. print(id)
  82. print('\n')
  83. #
  84. # # 热度峰值
  85. pkHot = datas.get('pkHot')
  86. print(pkHot)
  87. print('\n')
  88. #
  89. # # 热度峰值 日期
  90. pkHD = datas.get('pkHD')
  91. print(pkHD)
  92. print('\n')
  93. #
  94. # # 热度值
  95. print('30天内容热度')
  96. aHot = datas.get('aHot')
  97. # print(aHot)
  98. for item in aHot:
  99. print(item.get('k'), item.get('v'))
  100. print('\n')
  101.  
  102. print('全部内容热度')
  103. mHot = datas.get('mHot')
  104. # print(aHot)
  105. for item in mHot:
  106. print(item.get('k'), item.get('v'))
  107. print('\n')
  108.  
  109. print('30天播放指数')
  110. aidx = datas.get('aidx')
  111. # print(aHot)
  112. for item in aidx:
  113. print(item.get('k'), item.get('v'))
  114. print('\n')
  115.  
  116. print('全部播放指数')
  117. midx = datas.get('midx')
  118. # print(aHot)
  119. for item in midx:
  120. print(item.get('k'), item.get('v'))
  121.  
  122. except Exception as e1:
  123. print(e1)
  124.  
  125. if __name__=="__main__":
  126. obj =test()
  127. url='https://www.iqiyi.com/v_19rrnbwrfg.html?vfm=m_103_txsp'
  128. obj.gethotdx(url)

python3 requests获取某网站折线图上数据的更多相关文章

  1. echart--如何在折线图上添加矩形背景(可以借用bar柱状图的实现效果)

    当鼠标滑过,如何在折线图上添加矩形背景图呢? 具体如下: 上面的dataShadow的来源

  2. chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法[bubuko.com]

    chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法,原文:http://bubuko.com/infodetail-328671.html 默认情况下如下图 Y轴并不是从0开始 ...

  3. CAD把当前图上数据保存为一个二进流对象(com接口VB语言)

    主要用到函数说明: MxDrawXCustomFunction::WriteBinStreamEx 把当前图上数据保存为一个二进流对象,详细说明如下: 参数 说明 LPCTSTR pszPasswor ...

  4. 比率(ratio)|帕雷托图|雷达图|轮廓图|条形图|茎叶图|直方图|线图|折线图|间隔数据|比例数据|标准分数|标准差系数|离散系数|平均差|异众比率|四分位差|切比雪夫|右偏分布|

    比率是什么? 比率(ratio) :不同类别数值的比值 在中文里,比率这个词被用来代表两个数量的比值,这包括了两个相似却在用法上有所区分的概念:一个是比的值:另一是变化率,是一个数量相对于另一数量的变 ...

  5. echarts折线图,数据切换时(最近七天)绘图不合理现象

    echarts折线图,当进行数据切换时存在绘制不合理的问题,数据没错,但绘制不对. 两个0之间的连线应该是平滑直线,如图: 正确的显示: 解决: 在myCharts.setOption(option) ...

  6. ECharts特效-折线图上一个光点来回移动

    参考地址:https://www.makeapie.com/editor.html?c=xxxcG6NGk0 效果图打开上面的网址就可以看到. 核心代码如下,该效果实现的难点是数据的封装,还有eval ...

  7. python3 requests 获取 拉勾工作数据

    #-*- coding:utf-8 -*- __author__ = "carry" import requests,json for x in range(1, 15): url ...

  8. python requests 模拟登陆网站,抓取数据

    抓取页面数据的时候,有时候我们需要登陆才可以获取页面资源,那么我们需要登陆以后才可以跳转到对应的资源页面,那么我们需要通过模拟登陆,登陆成功以后再次去抓取对应的数据. 首先我们需要通过手动方式来登陆一 ...

  9. react-echarts之折线图的显示

    react中想要实现折线图和饼图的功能,需要引入react-echarts包,然后再实现折线图的功能.我这里引用的版本是:0.1.1.其他的写法参echarts官网即可.下面详细讲解的是我在react ...

随机推荐

  1. Flask之数据库设置

    4 数据库 知识点 Flask-SQLALchemy安装 连接数据库 使用数据库 数据库迁移 邮件扩展 4.1 数据库的设置 Web应用中普遍使用的是关系模型的数据库,关系型数据库把所有的数据都存储在 ...

  2. Windows C#入门环境搭建

    Windows C#入门环境搭建 1. 安装Microsoft .NET Framework目录: C:\Windows\Microsoft.NET\Framework,查看已经安装的版本. 如果未安 ...

  3. A. 【UR #16】破坏发射台

    题解: 首先看n是偶数的 那么就是不需要满足对面这个性质的 这样就可以dp了 f[i][0/1]表示dp到第i位,当前数等于或不等于第一位的方案数 然后显然可以用矩阵优化 再考虑n为奇数 用一样的思路 ...

  4. zjoi 网络

    题解: 很显然会发现对于每种颜色分开处理这是一颗树 然后就是裸的lct 有个坑就是判断操作1 可能颜色改成跟原先一样的 代码: #include <bits/stdc++.h> using ...

  5. P1463 [SDOI2005]反素数ant

    题意: 题解: 思维难度不高,考虑到n较大,而反质数个数较少 所以只要算出每个反质数即可 考虑如何计算,可以发现,我们只需枚举计算出约数有x个的最小数,再做一下判断即可 另外约数的个数=(a1+1)( ...

  6. LR报错Error -27780: [GENERAL_MSG_CAT_SSL_ERROR]connect to host "XXX.XXX.com" failed解决方法

  7. Codeforces 788C The Great Mixing

    The Great Mixing 化简一下公式后发现, 问题变成了, 取最少多少数能使其和为1, bitset优化一下背包就好啦. 题解中介绍了一种bfs的方法没, 感觉比较巧妙. #include& ...

  8. BZOJ1406 [AHOI2007]密码箱 数论

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1406 题意概括 求所有数x,满足 x<n 且 x2≡1 (mod  n). n<=2 ...

  9. (转)Java按指定行数读取文件

    package test import java.io.File; import java.io.FileReader; import java.io.IOException; import java ...

  10. pycharm-2018.1.6永久激活(本人使用的是centos7)

    1. 从官网下载pycharm-2018.1.6, 下的是PyCharm Professional Edition版本的 (水平有限版本太高,激活不了) pycharm官网: https://www. ...