爬虫实战3—微博的抓取
文章说明:本文是在学习一个网络爬虫课程时所做笔记,文章如有不对的地方,欢迎指出,积极讨论
针对动态页面抓取的两个思路
1.营造一个浏览器的环境,让它去运行js文件(PhantomJS+Selenium)
2.直接分析接口,通过接口拿到数据 (API)
一、使用Selenium + PhantomJS抓取
(一)PhantomJS:headless的类似于chrome的浏览器
(1)基于webkit的javasscript API。
开源的浏览器引擎
浏览器内核:浏览器最核心的部分‘RederingEngine’,可大概翻译为‘喧嚷引擎’。负责网页语法的解释并渲染网页,决定了浏览器如何显示网页的内容以及页面的信息。不同的浏览器内核对网页编写的语法的解释有所不同。
API:是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。 类似于函数,编写一个DLL的时候,里面输出的函数就是这个DLL的例程。
DLL(DynamicLink Library)文件:动态链接库文件。
(2)它使用Qtwebkit作为它的核心浏览器功能,使用webkit来编译解释执行JavaScript代码。任何你可以在基于webkit做的事情,它都能做到。它不仅是一个隐形的浏览器,提供了诸如CSS选择器、支持Web标准、DOM操作、JSON、HTML5、Canvas、SVG等,同时也提供了处理I/O的操作,从而使你可以向操作系统读写文件等。
JSON:(JavaScript Object Notation)JS对象标记,是一种轻量级的数据交换格式。
<canvas>:是一个可以使用脚本(通常为JavaScript)在其中绘制图形的HTML元素。它可用制作照片集或者制作简单的动画。
SVG:(Scalable Vector Graphics)可缩放矢量图形,是基于XML,用于描述二位矢量图形的一种图形格式。由万维网指定,是一个开放标准。
I/O:(Input/Output)输入/输出端口,也称计算机接口。每个设备都会有一个专用的I/O地址,用来处理自己的输入输出信息。
GUI:(Graphical User Agent)图形用户界面
IDE:(Integrated Development Environment)集成开发环境,是用于提供程序开发环境的应用程序
(3)用处广泛:网络监测、网页截屏、无需浏览器的web测试、页面访问自动化等。
(二)selenium
python中的一个webdriver
二、微博分析
抓取思路,使用两个spider
spider1:获取用户列表(作为漫游weibo的外链)
spider2:获取feed流(微博信息)
(一)登录
1.最重要的是设置 user-agent,否则无法跳转
2.输入用户名和密码
Class:是一系列值;返回数组
Id:是唯一值;返回唯一值
1.相关的JavaScript代码
2.通过selenium提供的send_keys来传递value
(二)微博用户提取
微博外链使用ta的关注列表,而不是粉丝,主要基于两点:
1.关注的微博一般都是有质量的,而粉丝的微博是劣质(low quantity)的,其中不乏很多僵尸粉
2.粉丝的数量一般都是比较庞大的,对于反爬来说,不可能让我们进行深翻页(翻页对于DB有很大的负担,有深翻页行为的基本都是机器人,这样就会被屏蔽掉)
微博外链:driver.find_element_by_xpath(‘//a[@class=”t_linkS_txt1”]’)
打开关注列表页:driver.find_element_by_xpath(‘//a[@class=”t_linkS_txt1”]’).get_attribute(‘href’)
获取所有关注的微博号的地址:
driver.find_element_by_xpath(‘//*[contains(@class,”follow_item”)]//a[@class=”S_txt1”]’)
过滤掉劣质(lowquantity)用户,
1.不活跃的用户(僵尸)。微博数小于一个阈值
2.营销号 。微博数大于一个阈值
提取步骤:
1.滚屏; 2.提取; 3.翻页。
(三)微博信息提取
微博名:driver.find_element_by_tag_name(‘h1’)
所有的Feed:driver.find_elements_by_class_name(‘WB_detail’)
微博的图片,只需要保存图片名
http://wx2.sinaimg.cn/thumb150/4b7ljfaod43.jpg
http://存储域名/分辨率/文件名
滚频与翻页:每次滚动后,检查是否已经出现了
1.微博的下一页:
driver..find_element_by_xpath(‘//a[@class=”pagenext S_txt1 S_line1”]’).click()
每次滚动后,检查是否已经出现了“下一页”的按钮,如果是则可以停止滚屏,否则检查是否出现了“网络超时”的链接,是的话,点击这个链接来重新加载。
2.翻页命令:
driver.excute_script9(‘window.scrollTo(0,document.body.scrollHeight)’)
关注列表的下一页和微博的下一页是一样的(class:page next S_txt1)
三、微博接口分析
逆向分析一个动态网页:找接口,找规律
post-man:Google的chrome下的一个JSON插件
微博手机端(m.weibo.cn):它的接口更简单,更容易分析(都是简单的feed流)
对于任意的GET方法:
protocol://domain/path?parameters
很有可能对我们是没用的
(一)个人首页(例如姚晨的微博)
可以直接尝试:https://m.weibo.cn/u/1266321801
(二)个人feed流
https://m.weibo.cn/api/container/getIndex?type=uid&value=1266321801&containerid=1076031266321801&page=2
type:通过uid方式查询
value:user id
containerid:容器的id号 = 107603 +uid
page:当前请求的页码
爬虫实战3—微博的抓取相关推荐
- python3 爬虫实战 :用 Appium 抓取手机 app 的 数据
http://www.ziksp.com/%e5%ad%a6%e4%b9%a0%e8%b5%84%e6%96%99/python%e7%bc%96%e7%a8%8b/ python资料站 From: ...
- python3 爬虫实战 :用 Appium 抓取手机 app 微信朋友圈的数据
From:https://blog.csdn.net/Fan_shui/article/details/81413595 本编教程从 appium 的环境配置开始,到抓取手机 app 微信朋友圈结束. ...
- python3爬虫实战二:股票信息抓取及存储
参考:http://python.jobbole.com/88350/?utm_source=blog.jobbole.com&utm_medium=relatedPosts#article- ...
- python3爬虫系列23之selenium+腾讯OCR识别验证码登录微博且抓取数据
python3爬虫系列23之selenium+腾讯OCR识别验证码登录微博且抓取数据 1.前言 上一篇是一个 python3爬虫系列22之selenium模拟登录需要验证码的微博且抓取数据, 我们是首 ...
- iOS—网络实用技术OC篇网络爬虫-使用java语言抓取网络数据
网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...
- Python网络爬虫,pyautogui与pytesseract抓取新浪微博数据,OCR
Python网络爬虫,pyautogui与pytesseract抓取新浪微博数据,OCR方案 用ocr与pyautogui,以及webbrowser实现功能:设计爬虫抓取新浪微博数据,比如,抓取微博用 ...
- Python爬虫实战系列(一)-request爬取网站资源
Python爬虫实战系列(一)-request爬取网站资源 python爬虫实战系列第一期 文章目录 Python爬虫实战系列(一)-request爬取网站资源 前言 一.request库是什么? 二 ...
- python中国大学排名爬虫写明详细步骤-Python爬虫--2019大学排名数据抓取
Python爬虫--2019大学排名数据抓取 准备工作 输入:大学排名URL连接 输出:大学排名信息屏幕输出 所需要用到的库:requests,bs4 思路 获取网页信息 提取网页中的内容并放到数据结 ...
- 网络爬虫——中国大学排名数据抓取
网络爬虫--中国大学排名数据抓取 目标网址 中国大学排名网:http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html 全球有很多份大学排名,这里以上 ...
最新文章
- Kafka集群环境搭建
- 漫游飞行_魔兽世界:德拉诺时光周 冲声望解锁德拉诺飞行好时机
- 现代软件工程 来自卓越大学教师的建议 (读书笔记)
- gis里创建要素面板怎么打开_周末技术流 | GIS三维热力图分析
- Kafka集群部署搭建完美标准版
- Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(7) - 混洗指令 解组合指令
- 阿里云数据库HybridDB for PostgreSQL使用教程
- String特殊值的判断方式
- php curl exec ch,PHP curl_exec函数
- 聊聊reactive streams的schedulers 1
- Android开发之常见事件响应方式
- js定义php中变量,JavaScript 变量
- 玄学编程入坑指南之侠客行:黑匣子·谜
- HDFS中NameNode和DataNode的作用
- FPGA控制DAC8550
- 树形结构最优化问题:后根遍历
- 三表子查询IN和distinct的运用
- 模型选择准则之AIC和BIC
- CMMI 3级精简并行过程综述
- 《鸟哥的Linux私房菜》第四版辅助文档
热门文章
- 计算机实战项目、毕业设计、课程设计之 [含论文+辩论PPT+源码等]微信小程序家庭理财系统+后台管理|前后分离VUE[包运行成功
- Unet用于人像分割
- 【数据结构】折半查找及其二叉判定树画法
- Linux教程——常见Linux发行版本有哪些?
- AMD冲出Intel森林
- KPI绩效考核为何在国内不管用?
- php 中文转拼音最全字符集函数(包含20902个基本汉字+5059生僻字)
- 清空计算机搜索文件历史记录,Win10资源管理器怎么清空搜索历史记录?
- 计算机教室英语手抄报图片,英语手抄报图片四年级
- 从列表、字符串、元组或集合中随机抽取指定个元素 Python中random模块的sample()函数