ajax爬取情况

有时候我们在用 Requests 抓取页面的时候,得到的结果可能和在浏览器中看到的是不一样的,在浏览器中可以看到正常显示的页面数据,但是使用 Requests 得到的结果并没有,这其中的原因是 Requests 获取的都是原始的 HTML 文档,而浏览器中的页面则是页面又经过 JavaScript 处理数据后生成的结果,这些数据的来源有多种,可能是通过 Ajax 加载的,可能是包含在了 HTML 文档中的,也可能是经过 JavaScript 经过特定算法计算后生成的

项目代码如下

  1. import requests
  2. from fake_useragent import UserAgent
  3. from pyquery import PyQuery
  4. from urllib.parse import urlencode
  5. from requests.packages import urllib3
  6. from pymongo import MongoClient
  7.  
  8. # 关闭警告
  9. urllib3.disable_warnings()
  10.  
  11. base_url = 'https://m.weibo.cn/api/container/getIndex?'
  12.  
  13. # 激活本地MongoDB客户端
  14. client = MongoClient('localhost',27001)
  15. # 创建数据库
  16. pages = client['pages']
  17. # 创建集合
  18. ma_yun = pages['ma_yun']
  19.  
  20. # 保存到mongoDB中
  21. def save_to_mongo(result):
  22. if ma_yun.insert_one(result):
  23. print('saved to Mongo','已获取{number}条数据'.format(number=ma_yun.count()))
  24.  
  25. # 生成UA
  26. def create_user_agent():
  27. ua = UserAgent(use_cache_server=False)
  28. # print(ua.chrome)
  29. return ua.chrome
  30.  
  31. # 生成headers
  32. def create_headers():
  33. headers = {
  34. 'User-Agent': create_user_agent()
  35. }
  36. return headers
  37.  
  38. # 获取页面
  39. def get_page(page):
  40. # 设置参数
  41. params = {
  42. 'sudaref':'germey.gitbooks.io',
  43. 'display':'',
  44. 'retcode':'',
  45. 'type':'uid',
  46. 'value':'',
  47. 'containerid':'',
  48. 'page':page
  49. }
  50. url = base_url + urlencode(params)
  51. try:
  52. response = requests.get(url,create_headers(),verify=False)
  53. if response.status_code == 200:
  54. return response.json()
  55. except requests.ConnectionError as e:
  56. print('Error',e.args)
  57.  
  58. # 解析页面
  59. def parse_page(json):
  60. if json:
  61. items = json.get('data').get('cards')
  62. if items != None:
  63. for item in items:
  64. item = item.get('mblog')
  65. weibo = {}
  66. weibo['id'] = item.get('id')
  67. # 将正文中的 HTML 标签去除掉
  68. weibo['text'] = PyQuery(item.get('text')).text()
  69. # 点赞数
  70. weibo['attitudes_count'] = item.get('attitudes_count')
  71. # 评论数
  72. weibo['comments_count'] = item.get('comments_count')
  73. # 发布时间
  74. weibo['datetime'] = item.get('created_at')
  75. # 转发数
  76. weibo['reposts_count'] = item.get('reposts_count')
  77.  
  78. yield weibo
  79.  
  80. # 设置主方法进行调用其他方法
  81. def main():
  82. for page in range(1,30):
  83. json = get_page(page)
  84. results = parse_page(json)
  85. for result in results:
  86. save_to_mongo(result)
  87.  
  88. if __name__ == '__main__':
  89. main()

项目运行情况

Python 爬虫 ajax爬取马云爸爸微博内容的更多相关文章

  1. python爬虫:爬取读者某一期内容

    学会了怎么使用os模块 #!/usr/bin/python# -*- encoding:utf-8 -*- import requestsimport osfrom bs4 import Beauti ...

  2. [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)

    转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...

  3. Python爬虫之爬取慕课网课程评分

    BS是什么? BeautifulSoup是一个基于标签的文本解析工具.可以根据标签提取想要的内容,很适合处理html和xml这类语言文本.如果你希望了解更多关于BS的介绍和用法,请看Beautiful ...

  4. from appium import webdriver 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)

    使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium) - 北平吴彦祖 - 博客园 https://www.cnblogs.com/stevenshushu/p ...

  5. Python爬虫之爬取站内所有图片

    title date tags layut Python爬虫之爬取站内所有图片 2018-10-07 Python post 目标是 http://www.5442.com/meinv/ 如需在非li ...

  6. python爬虫实战---爬取大众点评评论

    python爬虫实战—爬取大众点评评论(加密字体) 1.首先打开一个店铺找到评论 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经 ...

  7. Python爬虫之爬取淘女郎照片示例详解

    这篇文章主要介绍了Python爬虫之爬取淘女郎照片示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 本篇目标 抓取淘宝MM ...

  8. python 爬虫之爬取大街网(思路)

    由于需要,本人需要对大街网招聘信息进行分析,故写了个爬虫进行爬取.这里我将记录一下,本人爬取大街网的思路. 附:爬取得数据仅供自己分析所用,并未用作其它用途. 附:本篇适合有一定 爬虫基础 crawl ...

  9. python爬虫项目-爬取雪球网金融数据(关注、持续更新)

    (一)python金融数据爬虫项目 爬取目标:雪球网(起始url:https://xueqiu.com/hq#exchange=CN&firstName=1&secondName=1_ ...

随机推荐

  1. ok6410 android driver(1)

    target system : Android (OK6410) host system : Debian Wheezy AMD64 1.Set up android system in ok6410 ...

  2. javac之Method Invocation Expressions

    15.12.1. Compile-Time Step 1: Determine Class or Interface to Search 15.12.2. Compile-Time Step 2: D ...

  3. javaweb 实现跨域

    现在的一个web应用会涉及到多个地方的restAPi的调用,传统的jsonp虽然支持跨域,但是只是支持get请求. 传统的ajax请求是不支持跨域的,是为了安全考虑. 跨域的思路是跟http机制有关, ...

  4. 王亮:游戏AI探索之旅——从alphago到moba游戏

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云加社区技术沙龙 发表于云+社区专栏 演讲嘉宾:王亮,腾讯AI高级研究员.2013年加入腾讯,从事大数据预测以及游戏AI研发工作.目前 ...

  5. Object的原型拷贝-create、assign、getPrototypeOf 方法的结合

    一.实现原型拷贝 1.1.代码         tips:为了体现原型链,写了继承实现的代码,这部分可跳过- <script> /* 创建包含原型链的实验对象obj1-- start */ ...

  6. vue中添加Echarts图表的使用,Echarts的学习笔记

    项目中需要使用一些折线图.柱状图.饼状图等等,之前使用过heightCharts(关于heightCharts请看我的另一篇 http://www.cnblogs.com/jasonwang2y60/ ...

  7. 关于Hall定理的学习

    基本定义 \(Hall\) 定理是二分图匹配的相关定理 用于判断二分图是否存在完美匹配 存在完美匹配的二分图即满足最大匹配数为 \(min(|X|,|Y|)\) 的二分图,也就是至少有一边的点全部被匹 ...

  8. html锚点使用示例

    <html> <body> <h1>HTML 教程目录</h1> <ul> <li><a href="#C1&q ...

  9. 从0开始整合SSM框架--3.整合SpringMvc

    前面面已经完成了2大框架的整合,SpringMVC的配置文件单独放,然后在web.xml中配置整合.1.配置spring-mvc.xml <beans xmlns="http://ww ...

  10. 激活 IntelliJ IDEA

    1.点击下面的链接下载 JetbrainsIdesCrack-4.2-release.jar 链接:https://pan.baidu.com/s/1eNY_bwxF7Efl4QG0yh6l1A  提 ...