热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python爬虫如何机器登录新浪微博并抓取内容?

php中文网(www.php.cn)提供了最全的编程技术基础教程,介绍了HTML、CSS、Javascript、Python,Java,Ruby,C,PHP,MySQL等各种编程语言的基础知识。同时本站中也提供了大量的在线实例,通过实例,您可以更好的学习编程。..

回复内容:

教你一个爬虫小技巧:所有社交网站爬虫,优先选择爬移动版,比如:m.weibo.com 我开通了一个QQ群,在极客学院参加了我的定向爬虫课程的同学可以在里面沟通交流提问。群号为:398687538

如果你是直接在淘宝上买的视频或者甚至是直接在网盘上免费下载的视频,请不要进来。

====================================

我在极客学院做了一个视频课程来讲解如何模拟登陆新浪微博。

请戳:->

http://www.jikexueyuan.com/course/995.html

我做了一个定向爬虫的入门系列课程:
  1. 基本的正则表达式
  2. 单线程爬虫
  3. Xpath与多线程爬虫
  4. 简单的模拟登录
  5. Scrapy初探
  6. MongoDB与Scrapy
  7. Scrapy与Redis入门
  8. 动态加载网页的爬取
欢迎关注~ 你问,为什么浏览器中看到的跟程序里获取的html不一样。我推断你对网页从一个文本文件到你所看到得样子这期间经历了什么不甚了解。浏览器里所看到的跟你用程序抓取的看到不一样是因为网页文本中的Javascript代码会被浏览器解析执行。而Javascript会修改页面dom结构。但是python中网页文本中的Javascript不会被解析执行。建议了解一下浏览器解析网页过程。
工欲善其事,必先利其器。推荐你看一下这个项目 binux/pyspider · GitHub 。另外开阔思路的项目 ariya/phantomjs · GitHub 、 n1k0/casperjs · GitHub
最后经验,抓取网页的话 wap站 > m站 > pc站 。微博wap站无js,表单结构简单清晰。适合初学拿来学习抓取。做微博爬虫,微博机器人没事千万别在微博上关注微博反垃圾团队的工程师,因为他们很可能互粉你,别问我为什么知道滴。 啊喂,你们不要只收藏不点赞啊 = =
稍微更新一下,多说两句。
虽然爬取移动端比较简单,但是爬一点难的东西对身体好对吧。
总结一下这个模拟登陆涉及的东西:
1.用户名经过base64加密。
2.输入用户名后会进行预登陆操作。
3.密码明文与一些其它的字符串参数拼接后,使用RSA加密,再提交给服务器,其中RSA公钥和各种参数都可以从预登陆操作返回的结果中找到。
4.会出现两个跳转。

所以思路如下:
1.用base64加密用户名之后仿造一个预登陆,用正则匹配得到各项参数。
2.用上一步里得到的参数,拼接密码明文,再用RSA加密得到密文,并构造POST的form data。
3.使用构造好的form data仿造登录请求
4.用正则匹配获得跳转的目标链接。
5.为了保持登陆,用COOKIEjar一类的工具绑定一个COOKIE就行了。

======以下原答案=======
刚写完这个爬虫。。
新浪这东西做的煞是恶心。
代码和分析过程写在我blog里了。
http://shrik3.com/2016/03/25/sina-login/

测试可以用。
有理解不对的地方欢迎聚聚们指正
。。
你说的最后那段代码,是从重定向页面中获取新的url然后继续登陆,然而少了一步喔。 难点在于模拟登陆,登陆后不管直接抓网页还是调用API都好办,前者抓包仔细检查返回内容,后者抽时间阅读API,不过API有限制调用次数。
以前在研究的时候,找到一个不需要验证码的入口:新浪通行证登录
登陆代码见我博文中的第一种方法:Python 模拟登录新浪微博的两种方法 1. 可以不用模拟登陆,因为微博的登陆有注册码,很难手动破解。用搜狗浏览器或者chrome登陆网站前 按F12调出调试窗口,然后正常的登陆到网站,在调试窗口中找到访问网站所使用的COOKIE值。COOKIE值决定你是否有访问权限,没有COOKIE小饼干,你就是个游客,很多的url地址将会被重定位到weibo.cn/pub

2. 设置header = { 'Connection' : 'keep-alive', 'COOKIE' : COOKIE, 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 SE 2.X MetaSr 1.0' }。 COOKIE就不用多说了, User-Agent模拟浏览器行为, Connection加速socket访问,不用每次都重新打开新的socket连接。

3. 调用req = urllib2.Request(url, headers=h) 构造请求,然后cOntent=urllib2.urlopen(req)返回网站的内容。请求包括地址与请求头,如果有表单参数,还要加入data。

4. 返回了内容content之后,可以采用正则表达式匹配要爬的数据,或者采用lxml、betaifulsoup等html解析工具解析找到需要爬的数据。看具体的任务,简单点的就直接正则匹配了,复杂的还是用html解析之后再提取内容。

爬虫就是这么简单。这么easy。有了python,再也不用担心指针越界内存回收了。哈哈哈。
url = url, # url = '....' (怎么找的?)
人工找的, 在你爬一个网页之前要进行踩点, 既然要模拟登录, 当然要人工找到登录的页面, 在请求中填入预先准备好的表单信息及http头并通过urllib提交表单(data=postdata, headers = headers这两句)
text = result.read() # 这读出来的是什么?
读的是页面源代码, 但这个页面源代码跟我们浏览器看到的页面并不完全一致, 这是经过js处理的, 你截图里看到p里没有内容, 排除认证失败或者操作错误的原因则说明这个p的内容是经过js处理输出的. 这对爬虫来说不是个好消息, 因为它意味着我们的爬虫要对js进行处理, 我所知道的方法是用一些可以模拟浏览器行为的python库,如selenium、webdriver.
可以参考下这个问题:Python 爬虫如何获取 JS 生成的 URL 和网页内容? - Javascript
不过我认为这种方法多少有点费劲了, 可以爬取这个页面的移动版来达到更好的效果.

写爬虫的时候还早用浏览器的查看源代码功能吧, 这才是爬虫看到的真实页面.

如果是要实现模拟登录的话, 推荐用截包工具Fiddler free web debugging proxy, 这个工具无论是用来前端调试还是截包分析都是个神器.
比如说, 在Fiddler的拦截下, 你可以试着把浏览器在该网站下的COOKIE和session清掉, 然后刷新一下. 观察有无COOKIE两个请求返回页面的差距, 再用Fiddler手工填写表单内容试一下登录, 接着只要用python的http库模拟发出一个一样的登录请求, 并把COOKIE保存下来就可以了.不知道说的是否清楚, 如果无法理解的话我再补充回答吧. 微博的内容是通过pagelet填进去的,你去看看下边的众多script标签就能看到一大堆转义过的html,在直接拿到的body内是看不到源html的
所以你要做的是去抓script标签,拿到html字段的内容并反转义 这个好像是初学爬虫必修课。。。爬微博,微博好可怜。以下是干货:
1、微博可以直接爬移动版: weibo.cn
2、关于pc版的模拟登录分析,可以参考我之前的文章,应该是帮助了不少人,最近还有人微博私信我的,地址:python 新浪微博模拟登陆 & 密码加密分析_The_Third_Wave_新浪博客
3、关于使用微博api,昨天接到升级通知,好像限制ip使用应用了,不知道还可以用否,但是当时的笔记,还是很有用的,同样,最近还能收到关于微博api使用的咨询私信,地址如下:
Python:新浪微博API的使用及安全的模拟登陆自动获取code值,微博API怎么爬取其他未授权用户的微博/怎么爬取指定用户发布的微博。 其实很简单,模拟提交一些数据,你先用抓包工具把正常登陆时发送的字段都记录下来,然后一个个模拟,建议不要直接模拟登录pc版的先试试wap版的
推荐阅读
  • 文章目录简介HTTP请求过程HTTP状态码含义HTTP头部信息Cookie状态管理HTTP请求方式简介HTTP协议(超文本传输协议)是用于从WWW服务 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 最近在学Python,看了不少资料、视频,对爬虫比较感兴趣,爬过了网页文字、图片、视频。文字就不说了直接从网页上去根据标签分离出来就好了。图片和视频则需要在获取到相应的链接之后取做下载。以下是图片和视 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • JavaScript简介及语言特点
    本文介绍了JavaScript的起源和发展历程,以及其在前端验证和服务器端开发中的应用。同时,还介绍了ECMAScript标准、DOM对象和BOM对象的作用及特点。最后,对JavaScript作为解释型语言和编译型语言的区别进行了说明。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • 【爬虫训练场】:分页爬虫案例设计Demo,Python Flask与MySQL的完美连接
    网站类应用,一定离不开MySQL,所以本案例将带着大家学习一下,通过Flask调用MySQL数据,并实现分页呈现。类被称作蓝图,它是一个存储操作方法的容器,Flask可以通过Blu ... [详细]
  • pyecharts 介绍
    一、pyecharts介绍ECharts,一个使用JavaScript实现的开源可视化库,可以流畅的运行在PC和移动设备上,兼容当前绝大部 ... [详细]
  • 表单提交前的最后验证:通常在表单提交前,我们必须确认用户是否都把必须填选的做了,如果没有,就不能被提交到服务器,这里我们用到表单的formname.submit()看演示,其实这个对于我们修炼道 ... [详细]
  • 前端提高篇(七十):SVG基本使用、基本样式、路径path
    SVG是使用XML来描述二维图形和绘图程序的语言。SVG遵循的是xml的规范,与html5的使用有所区别SVG绘制出来的是矢量图,放大之后不会失真官方文 ... [详细]
  • Scrapy 爬取图片
    1.创建Scrapy项目scrapystartprojectCrawlMeiziTuscrapygenspiderMeiziTuSpiderhttps:movie.douban.c ... [详细]
author-avatar
手机用户2502922313
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有