重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
先上结论,通过公开的api如果想爬到某大v的所有数据,需要满足以下两个条件:
创新互联建站是专业的丰宁网站建设公司,丰宁接单;提供网站设计制作、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行丰宁网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
1、在你的爬虫开始运行时,该大v的所有微博发布量没有超过回溯查询的上限,新浪是2000,twitter是3200。
2、爬虫程序必须不间断运行。
新浪微博的api基本完全照搬twitter,其中接口的参数特性与底层的NoSQL密不可分,建议先看点Nosql数据库的设计理念有助于更好的理解api设计。
一般来说,如果决定爬某个大v,第一步先试获取该用户的基本信息,中间会包含一条最新的status,记下其中的id号作为基准,命名为baseId。
接口中最重要的两个参数:
since_id:返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0。
max_id:返回ID小于或等于max_id的微博,默认为0。
出于各种原因,获取statuses的接口,固定为按id降序排列(scan_index_forward=false),即最新的statuses返回在前。假设该微博第一天上线,就一个用户,发了一百条,id是1到100。而你在该用户发了第50条的时候开始运行的爬虫,即baseId=50。
假设按每次获取10条历史数据递归,先将max_id设为baseId,获取该用户id为41-50的微博,再将max_id设为41重复循环,直到返回微博数量为1或0。这步没有问题。
获取用户最新的statuses就有些蛋疼了,since_id=50,同样获取10条数据,返回的并不是id值为51-60的数据,而是100-91的数据。简单说就是你没法从since_id逐步更新到用户当前status,而是得一口气从用户当前status更新到上次爬虫运行时得到的最后一条status。假设你的爬虫一个月才运行一次,该用户在这期间发了2300条微博,根据限制你只能更新2000条,这其中最老的300条在你的系统内就会出现“断档”。
最后一条,以上只针对公开的api,stackoverflow上twitter
API可以申请权限突破数量限制和更改排序机制,微博也应该有类似机制。
通过爬虫技术就可以获取到微博热搜的数据了。
1、在新建的windos窗口程序中画:两个编辑框、一个按钮。再添加模块如图中三步!我们来实现,在一个编辑框中输入网址后,点击按钮,然后取到指定内容到编辑框2中。2、比如我们来取百度某贴吧一个帖子内的内容!我们在该页面上右键----查看网页源码(或查看源文件)。3、在打开的源文件内容中按CTRL+F组合键查找“你想要的数据”,我们只要一个开文中一部分就行了!找到对应的文字后,我们找到和网页中完全对应的那部分代码。PS:可能会出现几个被找到的内容,但是只要找到你需要取的那段全部对应部分就行。4、复制正文中的前面的部分代码,不要复制太多的内容,待会我们用正文前的内容找到中间的内容。然后在易语言中新建一个文本常量,把复制到的内容粘贴到“常量值”里面去。5、然后我们去复制正文后面的一小段代码,同样新建一个文本常量,然后粘贴到常量值里面去。6、此时我们回到编程程序中,点击按钮,在生成的“_按钮1_被单击”子程序下面新建一个文本型变量“得到的内容”,然后输入以下代码:得到的内容 = 网页_访问s (编辑框1.内容)编辑框2.内容 = 文本_取出中间文本 (得到的内容, #常量1, #常量2)PS:第一行是把把编辑框中的网址打开后得到的网页源码赋值给“得到的内容”这个文本变量。第二行则是对“得到的文本”进行取中间文本操作,文本_取出中间文本()是一个程序!它能取出中间内容的程序!7、最后我们把程序调试运行一下,点击按钮“取内容”,是不是成功了呢?打开其他帖子取也是有效的,只要你取前后代码是正确的!
希望我的回答对你有所帮助!
近期的一些微博爬虫内容,本篇主要将怎么根据关键词或指定用户进行博文爬取。
准备写的内容:
定向词及指定用户博文爬取方面,用的是微博网页版( )。对于微博网页版中相关博文的爬取,需要使用到 cookies 。这方面的爬取参考了github上的资源:
写的时候发现网页版的关键词检索接口已经不见了···可能是微博删除了网页版的接口吧···之后再看看怎么在pc端爬取。
这里先介绍怎么指定用户进行博文爬取吧···
指定用户的时候,需要有用户的用户id。通常用户id是一串数字,也有一些账号更改后是字符串,举个例子,何同学跟央视新闻的微博:
在这里何同学的 uid = 6529876887 ,央视新闻的 uid = cctvxinwen 。当然也可以获取到央视新闻以数字存储的id,之后再讲怎么获取,这里直接放出来就是 uid = 2656274875 ,点击可以发现确实是央视新闻的微博
这个问题在爬取用户博文方面没有影响,不过在爬取用户信息时会有影响,后面写用户信息爬取再说这个情况怎么解决。
下面以央视新闻为例看看怎么爬用户的博文。
点击进入 央视新闻 的微博,可以看到这个账号发布了很多很多微博,在网页版观看就会显示很多页,那么要爬取的时候就要先获取他的页数。
当点击第二页时,会发现 url 会变成 。也就是说这个翻页是以 page 这个字段进行翻页的,这就好办很多了。
将 page 改成 1 可以发现网页跳转到所有博文的第1页,接下来那我们就先获取到所有的页面url。
首先进入 ,打开开发者模式,在文件中找到自己的 cookies 。
在网页开发者模式下,点开文件可以发现没有json格式的数据输出。因此这里不能直接通过解析json数据获取到页面数据。
这里就需要查看网页返回的文本信息了。这里再定位具体信息时,我用的是 lxml 库里的 etree 方法。
这里要查看具体要定位到哪里,可以在网页上的源码进行定位,比如我们要定位到页数,找到页数所在的地方:
拿到用户的所有博文网页后,就可以进行博文的爬取了。这里每一页的数据是一样的,所以直接用第一页为例就可以了。同样的将页面数据爬下来:
还是在网页上看,定位到某一条博文,可以看到源码是这样子的:
可以看到第1页这里展示了11条博文(这个不一定),每条博文放在 div class="c" id="" 的控件里,这里的id是对应的博文id,于是我们就可以拿到博文的控件:
选择其中一个博文来看
这里我们可以看到要的信息全在这里了,接着就按着控件抓信息。这里拿其中一个节点为例。
首先获取微博的url以及微博id,这个从上面看到,可以从点赞、转发、评论处的链接获取,这里选择最简单的转发链接,对应的点赞数、转发数、评论数也可以顺便爬下来了:
接下来看下微博的创建时间,这里我们看到还有微博的来源,有一些可能会没有这个信息:
接下来就是博文的主体了:
博文方面的内容提取基本就是从github上搬过来的,对内容部分字符串进行了一些匹配清洗:
上面是比较简单的博文情况,有一些可能有图片、视频、转发等情况,这里直接放GitHub的做法,具体爬取方式是一样的,定位控件,找信息:
到这里,指定用户的博文爬取就结束了,主要还是参考了GitHub的大神~
任何事件在微博的发酵速度绝对是各大平台中最快的,如果把微博评论爬取下来,进行处理和分析,就能对某个事件的不同立场和风向有了全面的了解和掌握。
当然,评论量大的微博在爬取时耗费时间较长,为了缩短操作时间,找了老罗的一条评论不太多的微博进行演示。
Sitemap name : weibo
Start URL : ;wvr=6mod=weibotimetype=comment
有些页面变化比较细微,需要仔细观察才能发现,微博评论就是这样。
在拖动滚动条至出现「查看更多」的过程中,页面出现了轻微的卡顿,这表示页面有一部分会随着用户往下浏览而加载。
在爬取数据时,如果没有建立「滚动至底部」的选择器,让卡顿的页面也完全呈现出来,则会造成程序找不到「查看更多」的情况,导致大量的数据没有被爬取。
建立「滚动至底部」选择器
Id : scroll
Type : Element scroll down
Select : 点击第1条和第2条评论最外围的方形元素
点击 Done selecting!
勾选 Multiple
点击 Save seletor 完成创建
建立点击「查看更多」选择器
Id : more
Type : Element click
点击 Selector 的 Select : 点击第1条和第2条评论最外围的方形元素
点击 Done selecting!
点击 Click selector 的 Select : 点击「查看更多」,注意点击后对话框中的内容是「a.WB_cardmore」
点击 Done selecting!
Click type : Click more,表示需要不断点击「查看更多」
Click element uniqueness : unique CSS Selector
勾选 Multiple
点击 Save seletor 完成创建
点击刚刚创建的 more 选择器,在此选择器下创建爬取评论的选择器
Id : comment
Type : Text
Select : 点击黄色方形元素中的评论
点击 Done selecting!
点击 Save seletor 完成创建
Request interval 和 Page load delay 均按默认即可
微博这一类的主流网站现在都普遍采用ajax加载数据,也就是如果你通过传统的爬虫方式post一个url或者请求参数过去,接受响应的字符串,也就是响应的html代码,会发现里面没有你要的数据,这是因为这个代码里面有一些js脚本,等到浏览器显示这个网页的时候,这些js就会运行,从而显示你想要看的数据,ajax还用来在你操作的时候不刷新网页,只加载一部分页面数据,如果你发现一个网站在你操作的时候只有页面部分数据在变动,网址不变,就是ajax,这个很容易判断。另外,如果你发现网页浏览器显示网页加载完毕,然后页面上还有一些数据正在加载,这种数据也属于ajax异步加载的。判断好之后,就要采用能处理ajax的方式抓取数据了。
这里有两种方法: 1. 分析ajax脚本,找到对应的加载数据的js脚本,然后分析其逻辑,一般也是生成一个http请求,然后这个http请求一般只返回jason格式的数据。你可以通过代码模拟这个请求来获取数据。但是这种办法比较老土,也很麻烦需要你研究js代码的逻辑,你如果不会写代码就比较麻烦。当然有一些fiddler之类的网页通信抓包分析工具可以帮你一些忙。
2. 使用现在比较主流的智能采集软件如八爪鱼,需要支持浏览器和可视化采集,这样软件会自动模拟人的操作完成所有工作,包括运行界面的脚本,最后你会在界面上看到数据,就和上网看网页没任何区别,但是此类工具可以自动提取你在网页上看到的数据。用鼠标点点就提取到数据了,这种方式适合不懂代码的人。
3. 当然你也可以上网上找一下别人都是怎么采集微博数据的。然后拿别人的劳动成果来用,这个就更简单。比如,我按照你的要求在数多多上搜索微博数据采集规则就出来好多。截图如下:可以看到有微博账号,话题,评论,明星等等,别人也都详细写了如何用这些东西。