
网站调用新浪微博内容
网站调用新浪微博内容(新浪新闻的采集方法,以及为什么要去采集新浪?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 394 次浏览 • 2022-02-12 01:13
现在,无论你是采集站的站长,还是采集的普通站长,采集的来源只有一个,就是新闻来源。今天小编就和大家聊一聊新浪新闻的采集方法,以及为什么要去采集新浪新闻。
首先我们来看看新浪新闻的介绍:新浪新闻可以及时获取全球新闻资讯、国内外新闻、精彩体育赛事报道、财经财经动态、影视娱乐赛事、独家微博“微” ” 新闻,精彩如你所见,新闻、星座、笑话很多。从这个信息我们可以知道,它基本上覆盖了各行各业,所以也适应了各种采集的需求,不管你在哪个站,新浪采集都可以联系到你需要 文章 资源。新浪作为互联网内容的领头羊,在传播、解读、把握新闻特别是专题方面做得很好。正因为新浪最擅长做新闻,所以它的时效性、时效性、权威性、
分析了这么多优势之后,采集新浪新闻的内容怎么办?可能对于大部分新手或者不懂编码技术的站长来说,只能一一复制粘贴。但是这种情况下效率很低,不能同时满足这么多网站的内容更新。那么如何解决这个问题呢?事实上,这很简单。只需要一个技巧就可以完美解决这个问题。我们完全可以用工具代替劳动力。
小编经常使用的一款免费采集工具,功能强大,不仅可以采集新闻来源,还可以微信公众号、知乎、相关咨询等采集 . 对于我们作为一个站来说,它非常实用,不仅功能多,而且好用,而且关键是免费的。提高效率,降低成本,可以说是站长们的福音。
完成采集,步骤很简单,就几个步骤。首先,我们新建一个采集任务,设置任务名称(例如:新闻采集),然后选择我们要采集的数据源,选择新浪新闻。接下来,我们需要为采集到文章找到一个住的地方,选择一个新的空白文件夹,并设置文章的数量关键词采集文章,这取决于你自己的情况。一般小编会选择多导入关键词,一篇关键词采集10篇,最后把关键词或者长尾关键词导入进去没关系。是不是很简单?整个操作过程可以在1分钟内完成。只需点击两次,输入几个字即可完成,与以往复制粘贴的效率形成鲜明对比。
在今天的效率时代,我们必须提高工作效率,才能在众多同行和对手中脱颖而出。今天小编的分享就到这里了。我希望它可以帮助大家。喜欢小编的可以点赞关注。您的喜欢和关注将是我不断的动力。谢谢收看! 查看全部
网站调用新浪微博内容(新浪新闻的采集方法,以及为什么要去采集新浪?)
现在,无论你是采集站的站长,还是采集的普通站长,采集的来源只有一个,就是新闻来源。今天小编就和大家聊一聊新浪新闻的采集方法,以及为什么要去采集新浪新闻。
首先我们来看看新浪新闻的介绍:新浪新闻可以及时获取全球新闻资讯、国内外新闻、精彩体育赛事报道、财经财经动态、影视娱乐赛事、独家微博“微” ” 新闻,精彩如你所见,新闻、星座、笑话很多。从这个信息我们可以知道,它基本上覆盖了各行各业,所以也适应了各种采集的需求,不管你在哪个站,新浪采集都可以联系到你需要 文章 资源。新浪作为互联网内容的领头羊,在传播、解读、把握新闻特别是专题方面做得很好。正因为新浪最擅长做新闻,所以它的时效性、时效性、权威性、
分析了这么多优势之后,采集新浪新闻的内容怎么办?可能对于大部分新手或者不懂编码技术的站长来说,只能一一复制粘贴。但是这种情况下效率很低,不能同时满足这么多网站的内容更新。那么如何解决这个问题呢?事实上,这很简单。只需要一个技巧就可以完美解决这个问题。我们完全可以用工具代替劳动力。

小编经常使用的一款免费采集工具,功能强大,不仅可以采集新闻来源,还可以微信公众号、知乎、相关咨询等采集 . 对于我们作为一个站来说,它非常实用,不仅功能多,而且好用,而且关键是免费的。提高效率,降低成本,可以说是站长们的福音。
完成采集,步骤很简单,就几个步骤。首先,我们新建一个采集任务,设置任务名称(例如:新闻采集),然后选择我们要采集的数据源,选择新浪新闻。接下来,我们需要为采集到文章找到一个住的地方,选择一个新的空白文件夹,并设置文章的数量关键词采集文章,这取决于你自己的情况。一般小编会选择多导入关键词,一篇关键词采集10篇,最后把关键词或者长尾关键词导入进去没关系。是不是很简单?整个操作过程可以在1分钟内完成。只需点击两次,输入几个字即可完成,与以往复制粘贴的效率形成鲜明对比。

在今天的效率时代,我们必须提高工作效率,才能在众多同行和对手中脱颖而出。今天小编的分享就到这里了。我希望它可以帮助大家。喜欢小编的可以点赞关注。您的喜欢和关注将是我不断的动力。谢谢收看!
网站调用新浪微博内容(参看开发文档首页连接微博的规范目录及指导说明书)
网站优化 • 优采云 发表了文章 • 0 个评论 • 72 次浏览 • 2022-02-10 14:08
<p>@1、网站推荐下线:121.2 网站已经被推荐,如果发现以下情况,将下线处理:122、数据分析与支持:13
网站调用新浪微博内容(参看开发文档首页连接微博的规范目录及指导说明书)
<p>@1、网站推荐下线:121.2 网站已经被推荐,如果发现以下情况,将下线处理:122、数据分析与支持:13
网站调用新浪微博内容(单从学习的角度,无论是微博模拟登陆还是抓取并且解析微博数据)
网站优化 • 优采云 发表了文章 • 0 个评论 • 183 次浏览 • 2022-02-10 00:21
单从学习的角度来看,无论是模拟登录微博,还是抓取解析微博数据,难度都远高于一般爬虫。模拟登录的困难已经体验过了。如果登录成功后抓取微博,解析返回的数据,会遇到很多问题。最明显的问题是,你在浏览器中看到的数据可以从网页的源代码中搜索到,但是找不到,因为它的真实数据是经过传递的。
FM.view\((.*)\)
这个正则表达式将它包装起来。
模拟登录,这对一些学生来说应该是困难的。更复杂的是如何全面获取数据。比如微博用户包括很多类别,比如普通用户100505域,作家100305域,企业账号100206域。很多爬虫粗略处理为100505。比如在微博上查看更多评论时,有时你可以下拉获取更多评论数据,有时还可以通过点击“查看更多”来获取更多评论,这也需要非常详细的研究才能获取完整的数据。而it之类的,还有用户首页所有微博的爬取等等,都会有一些坑,需要做很多测试。当然,我说的都是PC端的东西。移动端的登录和解析难度要小得多。当然,它的缺点也很明显,就是信息不全。
所以,重点来了:我开源了一个分布式微博爬虫,目前用户不多,反馈不错。无论你是学习爬虫还是需要微博数据,我想都能帮到你。项目没有使用scrapy-redis,而是使用celery作为任务调度。而且我看到网上分享的几乎所有分布式爬虫都没用过celery!因为他们的爬取任务可能比较简单,所以这个项目的爬取任务比较复杂,几乎涵盖了你能想到的所有微博相关数据的抓取,所以从任务优先级和耗时来看,任务路由是几乎是必须的。这也是我选择celery作为分布式任务调度的一个非常重要的因素。
以下为项目地址:ResolveWang/WeiboSpider
欢迎来到拍砖,小白就项目提出一些问题 查看全部
网站调用新浪微博内容(单从学习的角度,无论是微博模拟登陆还是抓取并且解析微博数据)
单从学习的角度来看,无论是模拟登录微博,还是抓取解析微博数据,难度都远高于一般爬虫。模拟登录的困难已经体验过了。如果登录成功后抓取微博,解析返回的数据,会遇到很多问题。最明显的问题是,你在浏览器中看到的数据可以从网页的源代码中搜索到,但是找不到,因为它的真实数据是经过传递的。
FM.view\((.*)\)
这个正则表达式将它包装起来。
模拟登录,这对一些学生来说应该是困难的。更复杂的是如何全面获取数据。比如微博用户包括很多类别,比如普通用户100505域,作家100305域,企业账号100206域。很多爬虫粗略处理为100505。比如在微博上查看更多评论时,有时你可以下拉获取更多评论数据,有时还可以通过点击“查看更多”来获取更多评论,这也需要非常详细的研究才能获取完整的数据。而it之类的,还有用户首页所有微博的爬取等等,都会有一些坑,需要做很多测试。当然,我说的都是PC端的东西。移动端的登录和解析难度要小得多。当然,它的缺点也很明显,就是信息不全。
所以,重点来了:我开源了一个分布式微博爬虫,目前用户不多,反馈不错。无论你是学习爬虫还是需要微博数据,我想都能帮到你。项目没有使用scrapy-redis,而是使用celery作为任务调度。而且我看到网上分享的几乎所有分布式爬虫都没用过celery!因为他们的爬取任务可能比较简单,所以这个项目的爬取任务比较复杂,几乎涵盖了你能想到的所有微博相关数据的抓取,所以从任务优先级和耗时来看,任务路由是几乎是必须的。这也是我选择celery作为分布式任务调度的一个非常重要的因素。
以下为项目地址:ResolveWang/WeiboSpider
欢迎来到拍砖,小白就项目提出一些问题
网站调用新浪微博内容(新浪微博注册应用的一些注意事项及注意的事项)
网站优化 • 优采云 发表了文章 • 0 个评论 • 67 次浏览 • 2022-02-06 20:08
首先需要下载新浪微博的SDK,地址如下:
下载后解压,然后打开myeclipse,新建一个项目,然后将刚刚解压的文件导入到项目中。如图所示:
接下来,转到此 URL 以注册应用程序。共有三种应用程序,选择站点应用程序,然后创建应用程序。填写所有必填项。确定确认。有两点需要注意:
1.注册应用后会有App Key和App Secret,接下来会用到。
2.进入“我的应用”,选择:应用信息,
点击“编辑”,注意有两个地址:其中,“应用实际地址”要认真填写,我的是,注意地址后面不要有“/”。现在,记住这个地址,你以后会用到它。
现在,进入myeclipse,在src下,有config.properties文件,编辑一下
client_ID 是 App 密钥。
client_SERCRET 是 App Secret
redirect_URI 是前面突出显示的地址:
保存。
接下来,我们发送一条推文:
在examples下,weibo4j.examples.oauth2包下:OAuth4Code类,直接运行:会出现应用授权页面。输入用户名和密码后,会跳转到之前填写的redirect_URI页面。如果微博信息保存在浏览器中,会直接跳转到redirect_URI页面,不经过这个页面。
跳转到redirect_URI页面后,看到URL地址栏,格式是redirect_URI?代码=xxxxxx。接下来复制代码的值,然后到myeclipse的控制台输出看看:
code=https://api.weibo.com/oauth2/a ... Dcode
Hit enter when it's done.[Enter]:
接下来,将代码粘贴到 [Enter]: 之后。进入。你会看到很多输出信息。
直接跳到最后,看access_token,这是我们需要的,记录一下。
接下来发微博:
在weibo4j.examples.timeline包下,UpdateStatus类下/
我需要传入两个参数,所以我直接写了。代码显示如下:
packageweibo4j.examples.timeline;
importweibo4j.Timeline;
importweibo4j.Weibo;
importweibo4j.examples.oauth2.Log;
importweibo4j.model.Status;
importweibo4j.model.WeiboException;
publicclassUpdateStatus {
publicstaticvoidmain(String[] args) {
String access_token = "2.00lBvA1CxikhaBfbc0d2a0c10FWttI";
String statuses = "此条微博来自星光发布系统发布";
Weibo weibo = newWeibo();
weibo.setToken(access_token);
Timeline tm = newTimeline();
try{
Status status = tm.UpdateStatus(statuses);
Log.logInfo(status.toString());
} catch(WeiboException e) {
e.printStackTrace();
} }
}
package weibo4j.examples.timeline;
import weibo4j.Timeline;
import weibo4j.Weibo;
import weibo4j.examples.oauth2.Log;
import weibo4j.model.Status;
import weibo4j.model.WeiboException;
public class UpdateStatus {
public static void main(String[] args) {
String access_token = "2.00lBvA1CxikhaBfbc0d2a0c10FWttI";
String statuses = "此条微博来自星光发布系统发布";
Weibo weibo = new Weibo();
weibo.setToken(access_token);
Timeline tm = new Timeline();
try {
Status status = tm.UpdateStatus(statuses);
Log.logInfo(status.toString());
} catch (WeiboException e) {
e.printStackTrace();
} }
}
statuses 是您要发布的内容。
这时候就可以发微博了。
有问题的留言。!
随附的:
有时,比如在使用另一个微博账号(即与注册应用不同的账号)时,会出现一些错误。错误信息:
{"error":"applications over the unaudited use restrictions!","error_code":21321,"request":"/2/statuses/update.json"}
eibo4j.model.WeiboException: 403:The request is understood, but it has been refused. An accompanying error message will explain why.
error:applications over the unaudited use restrictions! error_code:21321/2/statuses/update.json
at weibo4j.http.HttpClient.httpRequest(HttpClient.java:414)
at weibo4j.http.HttpClient.httpRequest(HttpClient.java:372)
at weibo4j.http.HttpClient.post(HttpClient.java:301)
at weibo4j.http.HttpClient.post(HttpClient.java:286)
at weibo4j.Timeline.UpdateStatus(Timeline.java:708)
at weibo4j.examples.timeline.UpdateStatus.main(UpdateStatus.java:18)
{"error":"applications over the unaudited use restrictions!","error_code":21321,"request":"/2/statuses/update.json"}
weibo4j.model.WeiboException: 403:The request is understood, but it has been refused. An accompanying error message will explain why.
error:applications over the unaudited use restrictions! error_code:21321/2/statuses/update.json
at weibo4j.http.HttpClient.httpRequest(HttpClient.java:414)
at weibo4j.http.HttpClient.httpRequest(HttpClient.java:372)
at weibo4j.http.HttpClient.post(HttpClient.java:301)
at weibo4j.http.HttpClient.post(HttpClient.java:286)
at weibo4j.Timeline.UpdateStatus(Timeline.java:708)
at weibo4j.examples.timeline.UpdateStatus.main(UpdateStatus.java:18)
解决方法:还是在我的app里,点击“应用信息”,“测试账号”,看到有添加了一个测试账号。这时候可以添加你想发微博的账号的用户昵称,就OK了。 查看全部
网站调用新浪微博内容(新浪微博注册应用的一些注意事项及注意的事项)
首先需要下载新浪微博的SDK,地址如下:
下载后解压,然后打开myeclipse,新建一个项目,然后将刚刚解压的文件导入到项目中。如图所示:

接下来,转到此 URL 以注册应用程序。共有三种应用程序,选择站点应用程序,然后创建应用程序。填写所有必填项。确定确认。有两点需要注意:
1.注册应用后会有App Key和App Secret,接下来会用到。
2.进入“我的应用”,选择:应用信息,
点击“编辑”,注意有两个地址:其中,“应用实际地址”要认真填写,我的是,注意地址后面不要有“/”。现在,记住这个地址,你以后会用到它。
现在,进入myeclipse,在src下,有config.properties文件,编辑一下
client_ID 是 App 密钥。
client_SERCRET 是 App Secret
redirect_URI 是前面突出显示的地址:
保存。
接下来,我们发送一条推文:
在examples下,weibo4j.examples.oauth2包下:OAuth4Code类,直接运行:会出现应用授权页面。输入用户名和密码后,会跳转到之前填写的redirect_URI页面。如果微博信息保存在浏览器中,会直接跳转到redirect_URI页面,不经过这个页面。
跳转到redirect_URI页面后,看到URL地址栏,格式是redirect_URI?代码=xxxxxx。接下来复制代码的值,然后到myeclipse的控制台输出看看:
code=https://api.weibo.com/oauth2/a ... Dcode
Hit enter when it's done.[Enter]:
接下来,将代码粘贴到 [Enter]: 之后。进入。你会看到很多输出信息。
直接跳到最后,看access_token,这是我们需要的,记录一下。
接下来发微博:
在weibo4j.examples.timeline包下,UpdateStatus类下/
我需要传入两个参数,所以我直接写了。代码显示如下:
packageweibo4j.examples.timeline;
importweibo4j.Timeline;
importweibo4j.Weibo;
importweibo4j.examples.oauth2.Log;
importweibo4j.model.Status;
importweibo4j.model.WeiboException;
publicclassUpdateStatus {
publicstaticvoidmain(String[] args) {
String access_token = "2.00lBvA1CxikhaBfbc0d2a0c10FWttI";
String statuses = "此条微博来自星光发布系统发布";
Weibo weibo = newWeibo();
weibo.setToken(access_token);
Timeline tm = newTimeline();
try{
Status status = tm.UpdateStatus(statuses);
Log.logInfo(status.toString());
} catch(WeiboException e) {
e.printStackTrace();
} }
}
package weibo4j.examples.timeline;
import weibo4j.Timeline;
import weibo4j.Weibo;
import weibo4j.examples.oauth2.Log;
import weibo4j.model.Status;
import weibo4j.model.WeiboException;
public class UpdateStatus {
public static void main(String[] args) {
String access_token = "2.00lBvA1CxikhaBfbc0d2a0c10FWttI";
String statuses = "此条微博来自星光发布系统发布";
Weibo weibo = new Weibo();
weibo.setToken(access_token);
Timeline tm = new Timeline();
try {
Status status = tm.UpdateStatus(statuses);
Log.logInfo(status.toString());
} catch (WeiboException e) {
e.printStackTrace();
} }
}
statuses 是您要发布的内容。
这时候就可以发微博了。
有问题的留言。!
随附的:
有时,比如在使用另一个微博账号(即与注册应用不同的账号)时,会出现一些错误。错误信息:
{"error":"applications over the unaudited use restrictions!","error_code":21321,"request":"/2/statuses/update.json"}
eibo4j.model.WeiboException: 403:The request is understood, but it has been refused. An accompanying error message will explain why.
error:applications over the unaudited use restrictions! error_code:21321/2/statuses/update.json
at weibo4j.http.HttpClient.httpRequest(HttpClient.java:414)
at weibo4j.http.HttpClient.httpRequest(HttpClient.java:372)
at weibo4j.http.HttpClient.post(HttpClient.java:301)
at weibo4j.http.HttpClient.post(HttpClient.java:286)
at weibo4j.Timeline.UpdateStatus(Timeline.java:708)
at weibo4j.examples.timeline.UpdateStatus.main(UpdateStatus.java:18)
{"error":"applications over the unaudited use restrictions!","error_code":21321,"request":"/2/statuses/update.json"}
weibo4j.model.WeiboException: 403:The request is understood, but it has been refused. An accompanying error message will explain why.
error:applications over the unaudited use restrictions! error_code:21321/2/statuses/update.json
at weibo4j.http.HttpClient.httpRequest(HttpClient.java:414)
at weibo4j.http.HttpClient.httpRequest(HttpClient.java:372)
at weibo4j.http.HttpClient.post(HttpClient.java:301)
at weibo4j.http.HttpClient.post(HttpClient.java:286)
at weibo4j.Timeline.UpdateStatus(Timeline.java:708)
at weibo4j.examples.timeline.UpdateStatus.main(UpdateStatus.java:18)
解决方法:还是在我的app里,点击“应用信息”,“测试账号”,看到有添加了一个测试账号。这时候可以添加你想发微博的账号的用户昵称,就OK了。
网站调用新浪微博内容(第二篇:新浪微博PC客户端(DotNetWinForm版)——功能实现分解介绍)
网站优化 • 优采云 发表了文章 • 0 个评论 • 43 次浏览 • 2022-02-06 20:06
第二部分:新浪微博PC客户端(DotNet WinForm版)——功能实现介绍
C#源代码下载
最近有兴趣尝试用DotNet技术实现新浪微博PC客户端。几天时间,实现了登录、微博列表、发布纯文本微博的功能。新浪API调用基本不难。以微博列表处理的形式,着实让我烦了一阵子。Windows Form 用的不多,这个开发感觉有些捉襟见肘。
环境:
操作系统:Windows 7 Ultimate
集成开发环境:Visual Studio 2010 Ultimate
.NET 框架:3.5
先看一下截图:
1、登录界面
2、 登录
3、第一次加载主界面
4、主页
5、翻页
6、如果博文中有图,点击小图查看大图
新浪微博API返回的数据有两种:XML和JSON。登录时,我直接将DataSet读取的XML数据存储在一个静态的用户信息类中;对于博客列表数据,我读取 JSON 格式的数据,并将 JSON 格式的数据反序列化为通用对象(类)集合,其中类是嵌套类。
然后画一个列表,显示数据的控件都是动态添加的。这里最烦人的是位置,这可能是每页20条数据加载慢的原因(界面默认每页返回20条),最快2秒。,经常需要4-6秒,后面提供下载,大家可以试试。此外,影响速度的原因可能包括:1)网速;2)输出图片,有的直接输出大图。如果回复源微博中有图片,则无法始终获取缩略图。,我们要依次判断小图、中图和大图,先到先输出。Label显示的文字的行距是不能调整的,所以我要做一个自定义控件,
界面虽然使用了skin(ssk),比Window Form原来的界面好看很多,但是和Adobe的AIR相比还是有差距的。也许您可以尝试使用WPF。
未来要实现的功能(没有看到所有的API,有些功能可能不一定提供API): 查看全部
网站调用新浪微博内容(第二篇:新浪微博PC客户端(DotNetWinForm版)——功能实现分解介绍)
第二部分:新浪微博PC客户端(DotNet WinForm版)——功能实现介绍
C#源代码下载
最近有兴趣尝试用DotNet技术实现新浪微博PC客户端。几天时间,实现了登录、微博列表、发布纯文本微博的功能。新浪API调用基本不难。以微博列表处理的形式,着实让我烦了一阵子。Windows Form 用的不多,这个开发感觉有些捉襟见肘。
环境:
操作系统:Windows 7 Ultimate
集成开发环境:Visual Studio 2010 Ultimate
.NET 框架:3.5
先看一下截图:
1、登录界面

2、 登录
3、第一次加载主界面

4、主页

5、翻页

6、如果博文中有图,点击小图查看大图
新浪微博API返回的数据有两种:XML和JSON。登录时,我直接将DataSet读取的XML数据存储在一个静态的用户信息类中;对于博客列表数据,我读取 JSON 格式的数据,并将 JSON 格式的数据反序列化为通用对象(类)集合,其中类是嵌套类。
然后画一个列表,显示数据的控件都是动态添加的。这里最烦人的是位置,这可能是每页20条数据加载慢的原因(界面默认每页返回20条),最快2秒。,经常需要4-6秒,后面提供下载,大家可以试试。此外,影响速度的原因可能包括:1)网速;2)输出图片,有的直接输出大图。如果回复源微博中有图片,则无法始终获取缩略图。,我们要依次判断小图、中图和大图,先到先输出。Label显示的文字的行距是不能调整的,所以我要做一个自定义控件,
界面虽然使用了skin(ssk),比Window Form原来的界面好看很多,但是和Adobe的AIR相比还是有差距的。也许您可以尝试使用WPF。
未来要实现的功能(没有看到所有的API,有些功能可能不一定提供API):
网站调用新浪微博内容(CSDN李毅的博客《给CSDN博客加上height腾讯微博》)
网站优化 • 优采云 发表了文章 • 0 个评论 • 69 次浏览 • 2022-02-05 12:21
CSDN的博客确实乏善可陈,音视频,Flash不能放,HTML不能加,博客布局模块不能自定义。我想同步更新我的新浪博客的内容并显示在博客上。花了很长时间才找到满意的解决方案。方法。最后参考Iijse李毅的博客《将腾讯微博加入CSDN博客》,通过自定义CSS,将新浪微博最新的微博以图片的形式显示在博客页面的顶部。
实现如下:
1、在新浪微博页面,点击右上角“工具”,然后选择“签名文件”,目的选择“图片”,复制“获取代码”中的图片地址。
2、 打开“配置”进入CSDN博客的“显示设置”页面,在“自定义CSS样式”栏中复制如下代码:
/* 添加新浪微博 */
/* 基本原理:将微博图片绑定到博客页面的搜索栏显示 */
#csdnblog_header ul#personalnav { top:0; }
/* 格式化搜索栏 */
#csdnblog_header ul#blogsearchsty {
边距顶部:-102px;/* 这里可以调整搜索栏和微博图片的垂直位置*/
位置:相对;
文本缩进:-9999px;
z 指数:9999
}
#csdnblog_header ul#blogsearchsty li.selectsty+li {
/* 替换下面url中你的微博签名文件图片,支持新浪、腾讯、搜狐等微博*/
背景:url() 不重复中心底部;
显示:块;
高度:100px;
位置:绝对;
右:0px;/* 这里调整微博图片的水平位置*/
文本对齐:右;
宽度:380 像素;
}
#csdnblog_header ul#blogsearchsty li.selectsty+li input { display:none; }
OK,有兴趣的朋友不妨试试,如果有更好的方法,请告诉我O(∩_∩)O~ 查看全部
网站调用新浪微博内容(CSDN李毅的博客《给CSDN博客加上height腾讯微博》)
CSDN的博客确实乏善可陈,音视频,Flash不能放,HTML不能加,博客布局模块不能自定义。我想同步更新我的新浪博客的内容并显示在博客上。花了很长时间才找到满意的解决方案。方法。最后参考Iijse李毅的博客《将腾讯微博加入CSDN博客》,通过自定义CSS,将新浪微博最新的微博以图片的形式显示在博客页面的顶部。

实现如下:
1、在新浪微博页面,点击右上角“工具”,然后选择“签名文件”,目的选择“图片”,复制“获取代码”中的图片地址。

2、 打开“配置”进入CSDN博客的“显示设置”页面,在“自定义CSS样式”栏中复制如下代码:
/* 添加新浪微博 */
/* 基本原理:将微博图片绑定到博客页面的搜索栏显示 */
#csdnblog_header ul#personalnav { top:0; }
/* 格式化搜索栏 */
#csdnblog_header ul#blogsearchsty {
边距顶部:-102px;/* 这里可以调整搜索栏和微博图片的垂直位置*/
位置:相对;
文本缩进:-9999px;
z 指数:9999
}
#csdnblog_header ul#blogsearchsty li.selectsty+li {
/* 替换下面url中你的微博签名文件图片,支持新浪、腾讯、搜狐等微博*/
背景:url() 不重复中心底部;
显示:块;
高度:100px;
位置:绝对;
右:0px;/* 这里调整微博图片的水平位置*/
文本对齐:右;
宽度:380 像素;
}
#csdnblog_header ul#blogsearchsty li.selectsty+li input { display:none; }

OK,有兴趣的朋友不妨试试,如果有更好的方法,请告诉我O(∩_∩)O~
网站调用新浪微博内容(新浪微博的用户接口和话题接口实现了(组图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 82 次浏览 • 2022-02-04 19:19
如标题,调用新浪微博用户界面和话题界面,搜索新浪微博用户及关键词相关内容:
选择一个搜索昵称:
返回搜索昵称结果:
选择搜索微博内容:
返回微博搜索结果:
但内容超过屏幕长度,向下滚动条显示剩余内容:
使用的插件有:kendoUI.js 来操作UI和添加特效幻灯片到界面切换。 jscex.js实习生异步加载数据,绑定搜索id和搜索微博按钮2个响应函数。还是用jQuery的ajax调用新浪微博加载相应的api数据。
在这次练习中遇到的问题并不罕见。一开始是因为对kendoUI的不熟悉而带来的麻烦。在 kendoUI 中,所有页面内容都放在同一个页面上,但每个页面都通过 data-role="view" 进行区分。默认主页显示第一个收录属性 data- div with role="view";
接下来是api调用的跨域问题,本来打算用jsonp数据格式解决的,但是据说jscex可以解决这个问题。回头看,发现jecex.js好像也有jsonp格式的。
看完jscex的样例,感觉好强大。但是这一次它只是用来定义异步方法,$await(), $start() 来使用异步方法。以下是点击搜索昵称按钮的一系列动作的代码:
其实还有一个问题没有解决:在遍历返回的数据时,如果去掉if(index)判断语句,结果总会返回一个“undefined”。调试后发现underfined对应的index其实是code,没错。结果对应的索引是data。实在没有办法,只能用这个判断。希望以后能找到原因。 查看全部
网站调用新浪微博内容(新浪微博的用户接口和话题接口实现了(组图))
如标题,调用新浪微博用户界面和话题界面,搜索新浪微博用户及关键词相关内容:

选择一个搜索昵称:

返回搜索昵称结果:

选择搜索微博内容:

返回微博搜索结果:

但内容超过屏幕长度,向下滚动条显示剩余内容:

使用的插件有:kendoUI.js 来操作UI和添加特效幻灯片到界面切换。 jscex.js实习生异步加载数据,绑定搜索id和搜索微博按钮2个响应函数。还是用jQuery的ajax调用新浪微博加载相应的api数据。
在这次练习中遇到的问题并不罕见。一开始是因为对kendoUI的不熟悉而带来的麻烦。在 kendoUI 中,所有页面内容都放在同一个页面上,但每个页面都通过 data-role="view" 进行区分。默认主页显示第一个收录属性 data- div with role="view";
接下来是api调用的跨域问题,本来打算用jsonp数据格式解决的,但是据说jscex可以解决这个问题。回头看,发现jecex.js好像也有jsonp格式的。
看完jscex的样例,感觉好强大。但是这一次它只是用来定义异步方法,$await(), $start() 来使用异步方法。以下是点击搜索昵称按钮的一系列动作的代码:

其实还有一个问题没有解决:在遍历返回的数据时,如果去掉if(index)判断语句,结果总会返回一个“undefined”。调试后发现underfined对应的index其实是code,没错。结果对应的索引是data。实在没有办法,只能用这个判断。希望以后能找到原因。
网站调用新浪微博内容(Python初学Python必备官方教程(1)(附PythonTutorial))
网站优化 • 优采云 发表了文章 • 0 个评论 • 48 次浏览 • 2022-02-04 18:15
阿里云 > 云栖社区 > 主题图 > P > Python调用新浪微博API实践
推荐活动:
更多优惠>
当前话题: Python调用新浪微博api实践 加入采集
相关话题:
Python调用新浪微博api实践相关博客看更多博文
Python应用与实践【转】
作者:sky-heaven1726 人浏览评论:05年前
来自:目录 1.什么是 Python?1.1.Python 语言1.2.Python 哲学2.
阅读全文
Python 资源
作者:方北工作室 4477 浏览评论:05年前
Python教程(Python中文翻译版2.7.11)。Python教程是初学者学习Python必备的官方教程。本教程适用于Python2.< @k33@ > Series X. 在线阅读 » Fork Me » Python
阅读全文
Python爬虫框架-PySpider
作者:shadowcat7965 浏览人数评论:04年前
From: From: PySpider PySpider github地址PySpider官方文档PySpi
阅读全文
大公司都有哪些开源项目~~~阿里、百度、腾讯、360、新浪、网易、小米等
作者:xumaojun3896人浏览评论:03年前
红色字体现阶段比较流行------------------------------------------ --- ------------------------------------------------------------ -----------奇虎36
阅读全文
程序员的技术练级策略
作者:马哥 Linux2163 浏览评论:02年前
月光博客 6 月 12 日发表《给新手程序员的一封信》,翻译自《一封给那些想开始编程的人的公开信》,我的朋友(他在这个网站上的 id 是 Mailper)告诉我,他想看更多Cool Shell 上可操作的 文章
阅读全文
开发者干货合集!阿里巴巴开源、移动开发、机器学习等海量资源限时开放!
作者:阿里云活动秘书6535查看评论:22年前
2019阿里云Hi购物季已于2月25日正式开启。从公开活动页面来看,活动分为三个阶段:活动报名阶段2月25日至3月04日,3月04日3月16日至3月16日,新购返利+抢购阶段50%,以及3月16日至3月31日期间,续费抽奖+50%的抢购阶段。活动核心亮点:作为
阅读全文
开发者必看!探索阿里云大购季开发者分支:0元起海量学习资源!
作者:阿里云活动秘书 13543 浏览评论:42年前
2019阿里云Hi购物季已于2月25日正式开启。从公开活动页面来看,活动分为三个阶段:活动报名阶段2月25日至3月04日,3月04日3月16日至3月16日,新购返利+抢购阶段50%,以及3月16日至3月31日期间,续费抽奖+50%的抢购阶段。活动核心亮点:作为
阅读全文
DockOne微信分享(一四三):FreeWheel基于Kubernetes容器云建设与实践:应用编排与服务质量保障
作者:猫范先生 2161 浏览评论:04年前
本文为DockOne微信分享(14三):FreeWheel基于Kubernetes容器云的构建与实践:应用编排与服务质量保障【编者的话】随着公司业务的不断发展,逐步向微服务转型,我们借助 Kubernetes 容器化解决方案标准化和简化应用发布的整个过程,
阅读全文 查看全部
网站调用新浪微博内容(Python初学Python必备官方教程(1)(附PythonTutorial))
阿里云 > 云栖社区 > 主题图 > P > Python调用新浪微博API实践

推荐活动:
更多优惠>
当前话题: Python调用新浪微博api实践 加入采集
相关话题:
Python调用新浪微博api实践相关博客看更多博文
Python应用与实践【转】


作者:sky-heaven1726 人浏览评论:05年前
来自:目录 1.什么是 Python?1.1.Python 语言1.2.Python 哲学2.
阅读全文
Python 资源


作者:方北工作室 4477 浏览评论:05年前
Python教程(Python中文翻译版2.7.11)。Python教程是初学者学习Python必备的官方教程。本教程适用于Python2.< @k33@ > Series X. 在线阅读 » Fork Me » Python
阅读全文
Python爬虫框架-PySpider


作者:shadowcat7965 浏览人数评论:04年前
From: From: PySpider PySpider github地址PySpider官方文档PySpi
阅读全文
大公司都有哪些开源项目~~~阿里、百度、腾讯、360、新浪、网易、小米等


作者:xumaojun3896人浏览评论:03年前
红色字体现阶段比较流行------------------------------------------ --- ------------------------------------------------------------ -----------奇虎36
阅读全文
程序员的技术练级策略


作者:马哥 Linux2163 浏览评论:02年前
月光博客 6 月 12 日发表《给新手程序员的一封信》,翻译自《一封给那些想开始编程的人的公开信》,我的朋友(他在这个网站上的 id 是 Mailper)告诉我,他想看更多Cool Shell 上可操作的 文章
阅读全文
开发者干货合集!阿里巴巴开源、移动开发、机器学习等海量资源限时开放!


作者:阿里云活动秘书6535查看评论:22年前
2019阿里云Hi购物季已于2月25日正式开启。从公开活动页面来看,活动分为三个阶段:活动报名阶段2月25日至3月04日,3月04日3月16日至3月16日,新购返利+抢购阶段50%,以及3月16日至3月31日期间,续费抽奖+50%的抢购阶段。活动核心亮点:作为
阅读全文
开发者必看!探索阿里云大购季开发者分支:0元起海量学习资源!


作者:阿里云活动秘书 13543 浏览评论:42年前
2019阿里云Hi购物季已于2月25日正式开启。从公开活动页面来看,活动分为三个阶段:活动报名阶段2月25日至3月04日,3月04日3月16日至3月16日,新购返利+抢购阶段50%,以及3月16日至3月31日期间,续费抽奖+50%的抢购阶段。活动核心亮点:作为
阅读全文
DockOne微信分享(一四三):FreeWheel基于Kubernetes容器云建设与实践:应用编排与服务质量保障


作者:猫范先生 2161 浏览评论:04年前
本文为DockOne微信分享(14三):FreeWheel基于Kubernetes容器云的构建与实践:应用编排与服务质量保障【编者的话】随着公司业务的不断发展,逐步向微服务转型,我们借助 Kubernetes 容器化解决方案标准化和简化应用发布的整个过程,
阅读全文
网站调用新浪微博内容(试试用python调用微博API的方法微博 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 62 次浏览 • 2022-02-03 06:18
)
因为最近碰到一个调用新浪微博开放接口的项目,想试试用python调用微博API。
SDK下载地址:代码不超过十几K,完全可以理解。
如果你有微博账号,可以新建一个APP,然后获取APP获取OAuth2.0授权所需要的app key和app secret。
要了解 OAuth2,您可以查看链接到新浪微博的说明。OAuth2授权参数除了app key和app secret外,还需要网站回调地址redirect_uri,并且这个回调地址不允许在局域网内(神马localhost,127.0.0.@ >1 好像不行),这真的让我焦急了很久。我没有使用 API 调用 网站,所以我检查了很多。我看到有人写我可以用这个地址代替,我试过了,它奏效了。对潘克的无礼深表歉意。
这里有一个简单的程序来体验:
设置以下参数
import sys
import weibo
import webbrowser
APP_KEY = ''
MY_APP_SECRET = ''
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html'
获取微博授权网址,如第2行,用默认浏览器打开后,会提示登录微博,使用需要授权的账号登录,如下图
api = weibo.APIClient(app_key=APP_KEY,app_secret=MY_APP_SECRET,redirect_uri=REDIRECT_URL)
authorize_url = api.get_authorize_url()
print(authorize_url)
webbrowser.open_new(authorize_url)
登录后,您将被重定向到一个连接
关键是码值,是认证的关键。手动输入码值模拟认证
request = api.request_access_token(code, REDIRECT_URL)
access_token = request.access_token
expires_in = request.expires_in
api.set_access_token(access_token, expires_in)
api.statuses.update.post(status=u'Test OAuth 2.0 Send a Weibo!')
access_token为获取到的token,expires_in为授权过期时间(UNIX时间)
使用 set_access_token 保存授权。往下走,就可以调用微博界面了。测试发了一条推文
但是,这种手动输入代码的方式并不适合调用程序。是否可以在不打开链接的情况下请求登录并获得授权?经过多方搜索参考,程序改进如下,可以自动获取代码并保存,方便程序服务调用。
accessWeibo
# -*- coding: utf-8 -*-
#/usr/bin/env python
#access to SinaWeibo By sinaweibopy
#实现微博自动登录,token自动生成,保存及更新
#适合于后端服务调用
from weibo import APIClient
import pymongo
import sys, os, urllib, urllib2
from http_helper import *
from retry import *
try:
import json
except ImportError:
import simplejson as json
# setting sys encoding to utf-8
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
# weibo api访问配置
APP_KEY = '' # app key
APP_SECRET = '' # app secret
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html' # callback url 授权回调页,与OAuth2.0 授权设置的一致
USERID = '' # 登陆的微博用户名,必须是OAuth2.0 设置的测试账号
USERPASSWD = '' # 用户密码
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=REDIRECT_URL)
def make_access_token():
#请求access token
params = urllib.urlencode({
'action':'submit',
'withOfficalFlag':'0',
'ticket':'',
'isLoginSina':'',
'response_type':'code',
'regCallback':'',
'redirect_uri':REDIRECT_URL,
'client_id':APP_KEY,
'state':'',
'from':'',
'userId':USERID,
'passwd':USERPASSWD,
})
login_url = 'https://api.weibo.com/oauth2/authorize'
url = client.get_authorize_url()
content = urllib2.urlopen(url)
if content:
headers = { 'Referer' : url }
request = urllib2.Request(login_url, params, headers)
opener = get_opener(False)
urllib2.install_opener(opener)
try:
f = opener.open(request)
return_redirect_uri = f.url
except urllib2.HTTPError, e:
return_redirect_uri = e.geturl()
# 取到返回的code
code = return_redirect_uri.split('=')[1]
#得到token
token = client.request_access_token(code,REDIRECT_URL)
save_access_token(token)
def save_access_token(token):
#将access token保存到MongoDB数据库
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
t={
"access_token":token['access_token'],
"expires_in":str(token['expires_in']),
"date":time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
}
db.token.insert(t,safe=True)
#Decorator 目的是当调用make_access_token()后再执行一次apply_access_token()
@retry(1)
def apply_access_token():
#从MongoDB读取及设置access token
try:
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
if db.token.count()>0:
tokenInfos=db.token.find().sort([("_id",pymongo.DESCENDING)]).limit(1)
else:
make_access_token()
return False
for tokenInfo in tokenInfos:
access_token=tokenInfo["access_token"]
expires_in=tokenInfo["expires_in"]
try:
client.set_access_token(access_token, expires_in)
except StandardError, e:
if hasattr(e, 'error'):
if e.error == 'expired_token':
# token过期重新生成
make_access_token()
return False
else:
pass
except:
make_access_token()
return False
return True
if __name__ == "__main__":
apply_access_token()
# 以下为访问微博api的应用逻辑
# 以发布文字微博接口为例
client.statuses.update.post(status='Test OAuth 2.0 Send a Weibo!')
retry.py
import math
import time
# Retry decorator with exponential backoff
def retry(tries, delay=1, backoff=2):
"""Retries a function or method until it returns True.
delay sets the initial delay, and backoff sets how much the delay should
lengthen after each failure. backoff must be greater than 1, or else it
isn't really a backoff. tries must be at least 0, and delay greater than
0."""
if backoff decorated function
return deco_retry # @retry(arg[, ...]) -> true decorator
http_helper.py
# -*- coding: utf-8 -*-
#/usr/bin/env python
import urllib2,cookielib
class SmartRedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_301(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_301(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def http_error_302(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_302(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def get_cookie():
cookies = cookielib.CookieJar()
return urllib2.HTTPCookieProcessor(cookies)
def get_opener(proxy=False):
rv=urllib2.build_opener(get_cookie(), SmartRedirectHandler())
rv.addheaders = [('User-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)')]
return rv 查看全部
网站调用新浪微博内容(试试用python调用微博API的方法微博
)
因为最近碰到一个调用新浪微博开放接口的项目,想试试用python调用微博API。
SDK下载地址:代码不超过十几K,完全可以理解。
如果你有微博账号,可以新建一个APP,然后获取APP获取OAuth2.0授权所需要的app key和app secret。
要了解 OAuth2,您可以查看链接到新浪微博的说明。OAuth2授权参数除了app key和app secret外,还需要网站回调地址redirect_uri,并且这个回调地址不允许在局域网内(神马localhost,127.0.0.@ >1 好像不行),这真的让我焦急了很久。我没有使用 API 调用 网站,所以我检查了很多。我看到有人写我可以用这个地址代替,我试过了,它奏效了。对潘克的无礼深表歉意。
这里有一个简单的程序来体验:
设置以下参数
import sys
import weibo
import webbrowser
APP_KEY = ''
MY_APP_SECRET = ''
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html'
获取微博授权网址,如第2行,用默认浏览器打开后,会提示登录微博,使用需要授权的账号登录,如下图
api = weibo.APIClient(app_key=APP_KEY,app_secret=MY_APP_SECRET,redirect_uri=REDIRECT_URL)
authorize_url = api.get_authorize_url()
print(authorize_url)
webbrowser.open_new(authorize_url)

登录后,您将被重定向到一个连接
关键是码值,是认证的关键。手动输入码值模拟认证
request = api.request_access_token(code, REDIRECT_URL)
access_token = request.access_token
expires_in = request.expires_in
api.set_access_token(access_token, expires_in)
api.statuses.update.post(status=u'Test OAuth 2.0 Send a Weibo!')
access_token为获取到的token,expires_in为授权过期时间(UNIX时间)
使用 set_access_token 保存授权。往下走,就可以调用微博界面了。测试发了一条推文

但是,这种手动输入代码的方式并不适合调用程序。是否可以在不打开链接的情况下请求登录并获得授权?经过多方搜索参考,程序改进如下,可以自动获取代码并保存,方便程序服务调用。
accessWeibo
# -*- coding: utf-8 -*-
#/usr/bin/env python
#access to SinaWeibo By sinaweibopy
#实现微博自动登录,token自动生成,保存及更新
#适合于后端服务调用
from weibo import APIClient
import pymongo
import sys, os, urllib, urllib2
from http_helper import *
from retry import *
try:
import json
except ImportError:
import simplejson as json
# setting sys encoding to utf-8
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
# weibo api访问配置
APP_KEY = '' # app key
APP_SECRET = '' # app secret
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html' # callback url 授权回调页,与OAuth2.0 授权设置的一致
USERID = '' # 登陆的微博用户名,必须是OAuth2.0 设置的测试账号
USERPASSWD = '' # 用户密码
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=REDIRECT_URL)
def make_access_token():
#请求access token
params = urllib.urlencode({
'action':'submit',
'withOfficalFlag':'0',
'ticket':'',
'isLoginSina':'',
'response_type':'code',
'regCallback':'',
'redirect_uri':REDIRECT_URL,
'client_id':APP_KEY,
'state':'',
'from':'',
'userId':USERID,
'passwd':USERPASSWD,
})
login_url = 'https://api.weibo.com/oauth2/authorize'
url = client.get_authorize_url()
content = urllib2.urlopen(url)
if content:
headers = { 'Referer' : url }
request = urllib2.Request(login_url, params, headers)
opener = get_opener(False)
urllib2.install_opener(opener)
try:
f = opener.open(request)
return_redirect_uri = f.url
except urllib2.HTTPError, e:
return_redirect_uri = e.geturl()
# 取到返回的code
code = return_redirect_uri.split('=')[1]
#得到token
token = client.request_access_token(code,REDIRECT_URL)
save_access_token(token)
def save_access_token(token):
#将access token保存到MongoDB数据库
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
t={
"access_token":token['access_token'],
"expires_in":str(token['expires_in']),
"date":time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
}
db.token.insert(t,safe=True)
#Decorator 目的是当调用make_access_token()后再执行一次apply_access_token()
@retry(1)
def apply_access_token():
#从MongoDB读取及设置access token
try:
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
if db.token.count()>0:
tokenInfos=db.token.find().sort([("_id",pymongo.DESCENDING)]).limit(1)
else:
make_access_token()
return False
for tokenInfo in tokenInfos:
access_token=tokenInfo["access_token"]
expires_in=tokenInfo["expires_in"]
try:
client.set_access_token(access_token, expires_in)
except StandardError, e:
if hasattr(e, 'error'):
if e.error == 'expired_token':
# token过期重新生成
make_access_token()
return False
else:
pass
except:
make_access_token()
return False
return True
if __name__ == "__main__":
apply_access_token()
# 以下为访问微博api的应用逻辑
# 以发布文字微博接口为例
client.statuses.update.post(status='Test OAuth 2.0 Send a Weibo!')
retry.py
import math
import time
# Retry decorator with exponential backoff
def retry(tries, delay=1, backoff=2):
"""Retries a function or method until it returns True.
delay sets the initial delay, and backoff sets how much the delay should
lengthen after each failure. backoff must be greater than 1, or else it
isn't really a backoff. tries must be at least 0, and delay greater than
0."""
if backoff decorated function
return deco_retry # @retry(arg[, ...]) -> true decorator
http_helper.py
# -*- coding: utf-8 -*-
#/usr/bin/env python
import urllib2,cookielib
class SmartRedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_301(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_301(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def http_error_302(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_302(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def get_cookie():
cookies = cookielib.CookieJar()
return urllib2.HTTPCookieProcessor(cookies)
def get_opener(proxy=False):
rv=urllib2.build_opener(get_cookie(), SmartRedirectHandler())
rv.addheaders = [('User-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)')]
return rv
网站调用新浪微博内容(通过Python爬虫来爬取新浪微博用户数据的文章教程)
网站优化 • 优采云 发表了文章 • 0 个评论 • 54 次浏览 • 2022-02-01 03:13
新浪微博作为新时代流行的新媒体社交平台,拥有大量的用户行为和商业数据。因此,研究人员需要获取新浪微博数据。但新浪微博数据量巨大,最好的获取方式无疑是使用Python爬虫获取。网上有一些使用Python爬虫爬取新浪微博数据的教程,但是完整的介绍和爬取用户的所有数据信息都比较少,所以这里主要用selenium包爬取新浪微博用户数据的文章文章.
目标
抓取新浪微博用户数据,包括以下字段:id、昵称、关注数、关注数、微博数、每条微博内容、转发数、评论数、点赞数、发布时间、来源、是 原创 还是转推。(本文以GUCCI(古驰)为例)
方法
+ 用 selenium 模拟爬虫
+ 使用 BeautifulSoup 解析 HTML
结果显示
步骤分解
1.选择抓取目标网址
首先,在你准备好开始爬取之前,你必须想好要爬取哪个 URL。新浪微博网站分为网页和手机两部分。大部分爬取微博数据都会选择爬手机,因为相比之下,手机基本收录了你想要的所有数据,而且手机相对PC端来说是轻量级的。
下面是GUCCI的移动端和PC端的网页展示。
2.模拟登录
决定爬取微博手机数据后,就该模拟登录了。
模拟登录网址
登录页面如下所示
模拟登录代码
3.获取用户微博的页码
登录后可以输入要抓取的商户信息。因为每个商家的微博数量不同,对应的微博页码也不同。在这里,先爬下商家的微博页码。同时,抓取那些公开的信息,如用户uid、用户名、微博数、关注者数、粉丝数。
图像.png
4.根据爬取的最大页码,循环爬取所有数据
得到最大页码后,直接通过循环爬取每一页数据。抓取的数据包括微博内容、转发数、评论数、点赞数、发微博时间、微博来源、是原创还是转发。
4.获取所有数据后,可以写入csv文件,或者excel,最终结果如上图所示
文章完整的微博爬虫就在这里解决! 查看全部
网站调用新浪微博内容(通过Python爬虫来爬取新浪微博用户数据的文章教程)
新浪微博作为新时代流行的新媒体社交平台,拥有大量的用户行为和商业数据。因此,研究人员需要获取新浪微博数据。但新浪微博数据量巨大,最好的获取方式无疑是使用Python爬虫获取。网上有一些使用Python爬虫爬取新浪微博数据的教程,但是完整的介绍和爬取用户的所有数据信息都比较少,所以这里主要用selenium包爬取新浪微博用户数据的文章文章.
目标
抓取新浪微博用户数据,包括以下字段:id、昵称、关注数、关注数、微博数、每条微博内容、转发数、评论数、点赞数、发布时间、来源、是 原创 还是转推。(本文以GUCCI(古驰)为例)
方法
+ 用 selenium 模拟爬虫
+ 使用 BeautifulSoup 解析 HTML
结果显示
步骤分解
1.选择抓取目标网址
首先,在你准备好开始爬取之前,你必须想好要爬取哪个 URL。新浪微博网站分为网页和手机两部分。大部分爬取微博数据都会选择爬手机,因为相比之下,手机基本收录了你想要的所有数据,而且手机相对PC端来说是轻量级的。
下面是GUCCI的移动端和PC端的网页展示。
2.模拟登录
决定爬取微博手机数据后,就该模拟登录了。
模拟登录网址
登录页面如下所示
模拟登录代码
3.获取用户微博的页码
登录后可以输入要抓取的商户信息。因为每个商家的微博数量不同,对应的微博页码也不同。在这里,先爬下商家的微博页码。同时,抓取那些公开的信息,如用户uid、用户名、微博数、关注者数、粉丝数。
图像.png
4.根据爬取的最大页码,循环爬取所有数据
得到最大页码后,直接通过循环爬取每一页数据。抓取的数据包括微博内容、转发数、评论数、点赞数、发微博时间、微博来源、是原创还是转发。
4.获取所有数据后,可以写入csv文件,或者excel,最终结果如上图所示
文章完整的微博爬虫就在这里解决!
网站调用新浪微博内容(3.修改参数拼接请求链接——解析网页数据解析)
网站优化 • 优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2022-02-01 01:15
使用java自动爬取新浪微博历史列表——免登录目录准备工作原理
找到微博内容页面的请求链接-》修改参数拼接请求链接-》解析网页数据-》存入数据库
工作流程1.找出微博内容页面请求链接
网页端微博在加载内容页面时,会请求如下箭头所示的链接。点击后可以发现整个网页的数据都在框内,也就是说我们只需要拿到这个链接就可以解析网页数据了。
2.修改参数拼出请求链接
接下来,我们需要拼出这个链接。需要更改的参数有domain、domain_op、pre_page和_rnd。
图中我们可以发现id是由domain和一个10位数字拼接而成,domain和domain_op是一样的,pre_page指的是当前内容页数,_rnd是时间戳,我们需要用到的cookie运行程序时。接下来我们谈谈如何获取它们:
ID:
,
其中,2399108715为普通用户id;
其中,1191044977是大V的id;
领域:
下图中的红框就是我们需要的域。可以直接在用户微博首页右键查看源码查看:
域操作:
同一个域;
前页:
我们可以直接在代码中循环累加pre_page,但是我们需要知道用户发送的总页数才能终止循环:
如上图,仍然可以在用户首页的源码中获取countPage
_rnd:
一个时间戳,可以在程序中设置为系统的当前时间,以保证能抓取到最新的微博。
3.解析网页数据
解析网页数据使用jsoup和正则表达式。如何使用可以下载文末代码查看。
4.存入数据库
在程序中实现,使用mysql。
程序部分 程序结构
service层:
build:构建链接
content:解析网页内容
dao层:
common:持久化数据,存入数据库
model层:
SinaModel:实体类
process:
Main:程序组装
运行程序部分
修改进程目录下Main方法中的参数。上面已经获取了id和cookie,可以免费获取高密代理的ip和端口。
然后运行 MainTest 程序
./test
./java
./com
./yk
./process
MainTest
数据库字段解释
sina.sql:
id-表id
userId-用户Id
content-微博正文
contentlink-微博正文中的链接
imglink-微博中的图片链接
transmitnum-转发数
commentnum-评论数
likenum-喜欢数
username-用户名
pulishTime-发布时间
equipment-设备
updateTime-数据存入时间
最后一个想法 查看全部
网站调用新浪微博内容(3.修改参数拼接请求链接——解析网页数据解析)
使用java自动爬取新浪微博历史列表——免登录目录准备工作原理
找到微博内容页面的请求链接-》修改参数拼接请求链接-》解析网页数据-》存入数据库
工作流程1.找出微博内容页面请求链接
网页端微博在加载内容页面时,会请求如下箭头所示的链接。点击后可以发现整个网页的数据都在框内,也就是说我们只需要拿到这个链接就可以解析网页数据了。
2.修改参数拼出请求链接
接下来,我们需要拼出这个链接。需要更改的参数有domain、domain_op、pre_page和_rnd。
图中我们可以发现id是由domain和一个10位数字拼接而成,domain和domain_op是一样的,pre_page指的是当前内容页数,_rnd是时间戳,我们需要用到的cookie运行程序时。接下来我们谈谈如何获取它们:
ID:
,
其中,2399108715为普通用户id;
其中,1191044977是大V的id;
领域:
下图中的红框就是我们需要的域。可以直接在用户微博首页右键查看源码查看:
域操作:
同一个域;
前页:
我们可以直接在代码中循环累加pre_page,但是我们需要知道用户发送的总页数才能终止循环:
如上图,仍然可以在用户首页的源码中获取countPage
_rnd:
一个时间戳,可以在程序中设置为系统的当前时间,以保证能抓取到最新的微博。
3.解析网页数据
解析网页数据使用jsoup和正则表达式。如何使用可以下载文末代码查看。
4.存入数据库
在程序中实现,使用mysql。
程序部分 程序结构
service层:
build:构建链接
content:解析网页内容
dao层:
common:持久化数据,存入数据库
model层:
SinaModel:实体类
process:
Main:程序组装
运行程序部分
修改进程目录下Main方法中的参数。上面已经获取了id和cookie,可以免费获取高密代理的ip和端口。
然后运行 MainTest 程序
./test
./java
./com
./yk
./process
MainTest
数据库字段解释
sina.sql:
id-表id
userId-用户Id
content-微博正文
contentlink-微博正文中的链接
imglink-微博中的图片链接
transmitnum-转发数
commentnum-评论数
likenum-喜欢数
username-用户名
pulishTime-发布时间
equipment-设备
updateTime-数据存入时间
最后一个想法
网站调用新浪微博内容(介绍常用爬虫开源项目和腾讯微博爬虫的问题总结)
网站优化 • 优采云 发表了文章 • 0 个评论 • 66 次浏览 • 2022-01-26 18:11
介绍
常用爬虫开源项目
新浪微博爬虫和腾讯微博爬虫
新浪爬虫问题
总结
介绍
相关介绍
即网络爬虫是一种自动获取网页内容的程序。它是搜索引擎的重要组成部分,因此搜索引擎优化主要针对爬虫进行优化。
主要分类
网络爬虫从万维网上为搜索引擎下载网页。一般分为传统爬虫和专注爬虫。
传统爬虫从一个或多个初始网页的URL开始,获取初始网页上的URL。在爬取网页的过程中,不断地从当前页面中提取新的 URL 并放入队列中,直到满足系统的某个停止条件。通俗的讲,就是通过源码分析得到想要的内容。
焦点爬虫的工作流程比较复杂。它需要按照一定的网页分析算法过滤掉与主题无关的链接,保留有用的链接,并放入等待抓取的URL队列中。然后,它会根据一定的搜索策略从队列中选择下一个要爬取的网页URL,并重复上述过程,直到达到系统的一定条件并停止。此外,爬虫爬取的所有网页都会被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。
反爬虫:KS-WAF将爬虫行为分为搜索引擎爬虫和扫描爬虫,可以屏蔽特定搜索引擎爬虫以节省带宽和性能,也可以屏蔽扫描爬虫防止网站被恶意爬取。
常用爬虫开源项目
Nutch 标志 搜索引擎 Nutch
Nutch 是一个搜索引擎的开源 Java 实现。它提供了我们运行自己的搜索引擎所需的所有工具。包括全文搜索和网络爬虫。
尽管网络搜索是漫游 Internet 的基本要求,但现有网络搜索引擎的数量正在下降。而这很可能会演变成一家为其商业利益垄断几乎所有网络搜索的公司。这显然对绝大多数网民不利。
现在所有主要的搜索引擎都使用专有的排名算法,这些算法不能解释为什么一个页面被排在一个特定的位置。另外,有些搜索引擎按网站付费,而不是按自己的值排序。
Apache Nutch 项目(一个网络搜索引擎)。当 Nutch 发展到一定程度时,遇到了可扩展性的问题,即当存储的网页数量达到 1 亿的水平时,Nutch 原有的结构很难达到高效率。就在整个团队不知所措的时候,救星谷歌出现了。谷歌在2003年发布了谷歌使用的分布式文件存储系统文章(The Google File System),Nutch的开发者意识到可以将Nutch放在GFS上实现,所以经过一年的发展,NDFS(Nutch Distributed文件系统)出现。在解决了瓶颈问题之后,Nutch 得到了很大的发展,而就在 2004 年,Google 发布了 MapReduce 的想法,因此尝到甜头的 Nutch 开发者毫不犹豫地将 MapReduce 模型应用到了 Nutch 系统中。
但是在 Nutch 加入 GFS 和 MapReduce 之后,Nutch 变得太大了,超出了网络搜索引擎的范围,所以在 2006 年分别移植了 NDFS 和 MapReduce,形成了一个新的项目,叫做 Hadoop。
Java 多线程网络爬虫 Crawler4j
Crawler4j 是一个开源的 Java 类库,它提供了一个简单的网页爬取接口。它可以用来构建一个多线程的网络爬虫。
crawler4j的使用主要分为两步:
1. 实现一个继承自WebCrawler的爬虫类;
2.调用CrawlController实现的爬虫类。
WebCrawler 是一个抽象类,继承它必须实现两个方法:shouldVisit 和 visit。在:
shouldVisit 是判断当前URL是否应该被爬取(visited);
visit 是抓取URL指向的页面的数据,传入的参数是网页所有数据的封装对象Page。
Crawler.CrawController 控制爬虫,先添加seed,然后开启多个爬虫,不断监控每个爬虫的生存状态。
Crawler.WebCrawler 爬虫
1. Run():不断循环,每次从Frontier取50个url,对每个url进行processPage(curUrl)。
2. processPage(curURL):使用 PageFetcher.fetch 抓取网页。如果 curURL 有重定向,则将重定向后的 url 的 url 添加到 Frontier 并稍后调度;如果爬取正常,则先解析,生成Page,然后将新的url下降到Frontier(此时确定新增url的深度),调用visit(Page){用户自定义操作} .
Crawler.Configurations 读取 crawler4j.properties 中的信息
Crawler.PageFetcher 启动 IdleConnectionMonitorThread 并使用 fetch(Page, ignoreIfBinary) 抓取单个 Page 页面。是一个静态类。
Crawler.Page 一个页面
Crawler.PageFetchStatus 单页爬取的配置,如返回的爬取状态号的含义等。
Crawler.HTMLParser 解析 HTML 源代码并将其存储在 Page 中。
Crawler.LinkExtractor 提取 HTML 页面中收录的所有链接。
Crawler.IdleConnectionMonitorThread 用于监控连接(用于发送get请求,获取页面),其connMgr负责发送HTML请求。
HTML单元
HtmlUnitHtmlUnit 是“Java 程序的无 GUI 浏览器”。它对 HTML 文档进行建模并提供一个 API,允许您调用页面、填写表单、单击链接等……就像您在“普通”浏览器中所做的一样。
HtmlUnit的使用: 简介:HtmlUnit是一个浏览器,用Java编写,没有界面。因为它没有接口,所以执行速度仍然可以下降。HtmlUnit提供了一系列的API,这些API可以做很多功能,比如表单填写、表单提交、模拟点击链接,并且由于内置了Rhinojs引擎,可以执行Javascript
1、模拟特定浏览器,也可以指定浏览器对应版本(HtmlUnit最新版本2.13现在可以模拟Chrome/FireFox/IE)
WebClient webClient=new WebClient(BrowserVersion.FIREFOX_24);
2、查找特定元素,可以通过get或者XPath从HtmlPage中获取特定的Html元素。例如;
DomElement plc_main=page.getElementById("plc_main");
DomElement code_box=(DomElement) pl_common_sassfilter.getByXPath("//div[@class='code_box clearfix']").get(0);
3. 模拟表单的提交显示在用于登录的代码中;
HtmlForm loginform = logonPage.getFormByName("loginform");
HtmlTextInput uid = loginform.getInputByName("u");
uid.click();//点击获取焦点
uid.type(Config.getAccount());
HtmlPasswordInput pwd = loginform.getInputByName("p");
pwd.click();
pwd.type(Config.getPassword());
4、获取新浪微博等微博内容等信息。
DomNodeList dls = pl_weibo_direct.getElementsByTagName("dl");
DomElement dl= dls.get(0);
整数索引 = 0;
而(DL!=空){
DomElement em=feed_list_content.getElementsByTagName("em").get(0);
字符串内容 = em.getTextContent();
newlist.add(内容);
索引++;
dl = dls.get(索引);}
2.模拟登录,找到微博内容的位置。
3.获取微博数据并存入数据库,数据库使用MYSQL
逻辑其实很简单。需要熟悉HTMLunit提供的一些类,然后是XPath语法,再熟悉一些基础的数据库知识,就可以完成微博的爬取。
腾讯微博也有同样的想法。一些区别是
1.页面解析不同。
2.URL 的某些特征是不同的。
新浪爬虫问题总结
新浪微博爬虫的一些问题:
首先是微博数量的限制,从搜索页关键词开始,只能搜索到50页的微博数据。那么每页有20条,只能搜到1000条,这肯定跟实时微博的数量不匹配。
所以你可以使用高级搜索从2009年开始搜索,这需要不断的实验,看看时间可以弥补50页的微博。因为无论我搜索什么,新浪微博都只能显示50页的数据。
以本田雅阁为例,可以分为5次搜索,第一次是2009年到2010年,这个时间段只有33页数据,然后是2010年1.1到2011.1.1有50页数据,然后往下推。在某些时期,建立50页数据只需要五六个月。简而言之,这不是常规模式。大概,时间越长,微博越多。. 所以当这个编程达到50页时,url链接的下一页就没有了。这是一个限制。
第二个问题是微博内容重复。如果连接是
%25E6%259C%25AC%25E7%2594%25B0%25E9%259B%2585%25E9%2598%2581&xsort=time&scope=ori×cope=custom:2013-01-01-0:2014-04-23-0&page=8
以本田雅阁为例,这个页面上的微博基本上都是一样的内容。据我观察,这个品牌的微博更像是一个营销和广告的微博。当然,你可以用微博来验证这个方法来刷选。但真正有意义的是,原创的微博,是一个少得可怜的数字。只有几百个大小。
还是有一些方法可以删除同一个微博。最近在数据库下操作比较有效,使用select distinct content from weibo where program='Honda Accord' into outfile 'D:/Honda Accord.txt';仍然可以删除其中大部分重复推文。
或者对于几乎相同的情况,只有 URL 不同。您可以使用删除微博内容 LIKE '%铃木“大型车”将与本田雅阁同级%';或其他一些具有特别明显特征的词或短语。
第三个问题是,虽然新浪只提供了这么多数据,但还是处处受限。当程序运行到20页时,会出现需要手动输入验证码以防止爬虫影响其服务器的问题。这个方案是通过模仿登录验证码的方法来解决的。就是拿到需要输入的验证码,把imageReader拿出来变成一个JFrame,手动输入,点一下,基本上就可以解决问题了。
第四个问题是微博内容在页面中体现不规则。例如,所有微博内容合二为一,只需 em.getTextContent()。因为不规则,有的em像点赞、空格等,解决方法是通过判断发现em只要不是真实的内容就没有任何属性。否则会有一个类属性。使用判断 hasAttribute() 踢掉点赞和空格。
第五个问题是不同id定位的问题。使用通用搜索时,定位ID为pl_weibo_direct,使用高级搜索时,微博内容定位ID为pl_wb_feedlist。
,当然是一些细节。
总结:
虽然还有很多问题,但是爬取数据的效果不是很好。不过可以肯定的是,新浪微博上的大部分数据还是可以通过网址找到的,新浪不可能大规模删除。假设像我这样的用户很久以前在2009年发了一条支持本田雅阁的微博,我可以通过我的微博链接看到与本田雅阁相关的微博内容。因此,与关键字相关的微博仍然存在于页面上,但新浪微博本身提供的搜索功能并不强大且有限。 查看全部
网站调用新浪微博内容(介绍常用爬虫开源项目和腾讯微博爬虫的问题总结)
介绍
常用爬虫开源项目
新浪微博爬虫和腾讯微博爬虫
新浪爬虫问题
总结
介绍
相关介绍
即网络爬虫是一种自动获取网页内容的程序。它是搜索引擎的重要组成部分,因此搜索引擎优化主要针对爬虫进行优化。
主要分类
网络爬虫从万维网上为搜索引擎下载网页。一般分为传统爬虫和专注爬虫。
传统爬虫从一个或多个初始网页的URL开始,获取初始网页上的URL。在爬取网页的过程中,不断地从当前页面中提取新的 URL 并放入队列中,直到满足系统的某个停止条件。通俗的讲,就是通过源码分析得到想要的内容。
焦点爬虫的工作流程比较复杂。它需要按照一定的网页分析算法过滤掉与主题无关的链接,保留有用的链接,并放入等待抓取的URL队列中。然后,它会根据一定的搜索策略从队列中选择下一个要爬取的网页URL,并重复上述过程,直到达到系统的一定条件并停止。此外,爬虫爬取的所有网页都会被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。
反爬虫:KS-WAF将爬虫行为分为搜索引擎爬虫和扫描爬虫,可以屏蔽特定搜索引擎爬虫以节省带宽和性能,也可以屏蔽扫描爬虫防止网站被恶意爬取。
常用爬虫开源项目
Nutch 标志 搜索引擎 Nutch
Nutch 是一个搜索引擎的开源 Java 实现。它提供了我们运行自己的搜索引擎所需的所有工具。包括全文搜索和网络爬虫。
尽管网络搜索是漫游 Internet 的基本要求,但现有网络搜索引擎的数量正在下降。而这很可能会演变成一家为其商业利益垄断几乎所有网络搜索的公司。这显然对绝大多数网民不利。
现在所有主要的搜索引擎都使用专有的排名算法,这些算法不能解释为什么一个页面被排在一个特定的位置。另外,有些搜索引擎按网站付费,而不是按自己的值排序。
Apache Nutch 项目(一个网络搜索引擎)。当 Nutch 发展到一定程度时,遇到了可扩展性的问题,即当存储的网页数量达到 1 亿的水平时,Nutch 原有的结构很难达到高效率。就在整个团队不知所措的时候,救星谷歌出现了。谷歌在2003年发布了谷歌使用的分布式文件存储系统文章(The Google File System),Nutch的开发者意识到可以将Nutch放在GFS上实现,所以经过一年的发展,NDFS(Nutch Distributed文件系统)出现。在解决了瓶颈问题之后,Nutch 得到了很大的发展,而就在 2004 年,Google 发布了 MapReduce 的想法,因此尝到甜头的 Nutch 开发者毫不犹豫地将 MapReduce 模型应用到了 Nutch 系统中。
但是在 Nutch 加入 GFS 和 MapReduce 之后,Nutch 变得太大了,超出了网络搜索引擎的范围,所以在 2006 年分别移植了 NDFS 和 MapReduce,形成了一个新的项目,叫做 Hadoop。
Java 多线程网络爬虫 Crawler4j
Crawler4j 是一个开源的 Java 类库,它提供了一个简单的网页爬取接口。它可以用来构建一个多线程的网络爬虫。
crawler4j的使用主要分为两步:
1. 实现一个继承自WebCrawler的爬虫类;
2.调用CrawlController实现的爬虫类。
WebCrawler 是一个抽象类,继承它必须实现两个方法:shouldVisit 和 visit。在:
shouldVisit 是判断当前URL是否应该被爬取(visited);
visit 是抓取URL指向的页面的数据,传入的参数是网页所有数据的封装对象Page。
Crawler.CrawController 控制爬虫,先添加seed,然后开启多个爬虫,不断监控每个爬虫的生存状态。
Crawler.WebCrawler 爬虫
1. Run():不断循环,每次从Frontier取50个url,对每个url进行processPage(curUrl)。
2. processPage(curURL):使用 PageFetcher.fetch 抓取网页。如果 curURL 有重定向,则将重定向后的 url 的 url 添加到 Frontier 并稍后调度;如果爬取正常,则先解析,生成Page,然后将新的url下降到Frontier(此时确定新增url的深度),调用visit(Page){用户自定义操作} .
Crawler.Configurations 读取 crawler4j.properties 中的信息
Crawler.PageFetcher 启动 IdleConnectionMonitorThread 并使用 fetch(Page, ignoreIfBinary) 抓取单个 Page 页面。是一个静态类。
Crawler.Page 一个页面
Crawler.PageFetchStatus 单页爬取的配置,如返回的爬取状态号的含义等。
Crawler.HTMLParser 解析 HTML 源代码并将其存储在 Page 中。
Crawler.LinkExtractor 提取 HTML 页面中收录的所有链接。
Crawler.IdleConnectionMonitorThread 用于监控连接(用于发送get请求,获取页面),其connMgr负责发送HTML请求。
HTML单元
HtmlUnitHtmlUnit 是“Java 程序的无 GUI 浏览器”。它对 HTML 文档进行建模并提供一个 API,允许您调用页面、填写表单、单击链接等……就像您在“普通”浏览器中所做的一样。
HtmlUnit的使用: 简介:HtmlUnit是一个浏览器,用Java编写,没有界面。因为它没有接口,所以执行速度仍然可以下降。HtmlUnit提供了一系列的API,这些API可以做很多功能,比如表单填写、表单提交、模拟点击链接,并且由于内置了Rhinojs引擎,可以执行Javascript
1、模拟特定浏览器,也可以指定浏览器对应版本(HtmlUnit最新版本2.13现在可以模拟Chrome/FireFox/IE)
WebClient webClient=new WebClient(BrowserVersion.FIREFOX_24);
2、查找特定元素,可以通过get或者XPath从HtmlPage中获取特定的Html元素。例如;
DomElement plc_main=page.getElementById("plc_main");
DomElement code_box=(DomElement) pl_common_sassfilter.getByXPath("//div[@class='code_box clearfix']").get(0);
3. 模拟表单的提交显示在用于登录的代码中;
HtmlForm loginform = logonPage.getFormByName("loginform");
HtmlTextInput uid = loginform.getInputByName("u");
uid.click();//点击获取焦点
uid.type(Config.getAccount());
HtmlPasswordInput pwd = loginform.getInputByName("p");
pwd.click();
pwd.type(Config.getPassword());
4、获取新浪微博等微博内容等信息。
DomNodeList dls = pl_weibo_direct.getElementsByTagName("dl");
DomElement dl= dls.get(0);
整数索引 = 0;
而(DL!=空){
DomElement em=feed_list_content.getElementsByTagName("em").get(0);
字符串内容 = em.getTextContent();
newlist.add(内容);
索引++;
dl = dls.get(索引);}
2.模拟登录,找到微博内容的位置。
3.获取微博数据并存入数据库,数据库使用MYSQL
逻辑其实很简单。需要熟悉HTMLunit提供的一些类,然后是XPath语法,再熟悉一些基础的数据库知识,就可以完成微博的爬取。
腾讯微博也有同样的想法。一些区别是
1.页面解析不同。
2.URL 的某些特征是不同的。
新浪爬虫问题总结
新浪微博爬虫的一些问题:
首先是微博数量的限制,从搜索页关键词开始,只能搜索到50页的微博数据。那么每页有20条,只能搜到1000条,这肯定跟实时微博的数量不匹配。
所以你可以使用高级搜索从2009年开始搜索,这需要不断的实验,看看时间可以弥补50页的微博。因为无论我搜索什么,新浪微博都只能显示50页的数据。
以本田雅阁为例,可以分为5次搜索,第一次是2009年到2010年,这个时间段只有33页数据,然后是2010年1.1到2011.1.1有50页数据,然后往下推。在某些时期,建立50页数据只需要五六个月。简而言之,这不是常规模式。大概,时间越长,微博越多。. 所以当这个编程达到50页时,url链接的下一页就没有了。这是一个限制。
第二个问题是微博内容重复。如果连接是
%25E6%259C%25AC%25E7%2594%25B0%25E9%259B%2585%25E9%2598%2581&xsort=time&scope=ori×cope=custom:2013-01-01-0:2014-04-23-0&page=8
以本田雅阁为例,这个页面上的微博基本上都是一样的内容。据我观察,这个品牌的微博更像是一个营销和广告的微博。当然,你可以用微博来验证这个方法来刷选。但真正有意义的是,原创的微博,是一个少得可怜的数字。只有几百个大小。
还是有一些方法可以删除同一个微博。最近在数据库下操作比较有效,使用select distinct content from weibo where program='Honda Accord' into outfile 'D:/Honda Accord.txt';仍然可以删除其中大部分重复推文。
或者对于几乎相同的情况,只有 URL 不同。您可以使用删除微博内容 LIKE '%铃木“大型车”将与本田雅阁同级%';或其他一些具有特别明显特征的词或短语。
第三个问题是,虽然新浪只提供了这么多数据,但还是处处受限。当程序运行到20页时,会出现需要手动输入验证码以防止爬虫影响其服务器的问题。这个方案是通过模仿登录验证码的方法来解决的。就是拿到需要输入的验证码,把imageReader拿出来变成一个JFrame,手动输入,点一下,基本上就可以解决问题了。
第四个问题是微博内容在页面中体现不规则。例如,所有微博内容合二为一,只需 em.getTextContent()。因为不规则,有的em像点赞、空格等,解决方法是通过判断发现em只要不是真实的内容就没有任何属性。否则会有一个类属性。使用判断 hasAttribute() 踢掉点赞和空格。
第五个问题是不同id定位的问题。使用通用搜索时,定位ID为pl_weibo_direct,使用高级搜索时,微博内容定位ID为pl_wb_feedlist。
,当然是一些细节。
总结:
虽然还有很多问题,但是爬取数据的效果不是很好。不过可以肯定的是,新浪微博上的大部分数据还是可以通过网址找到的,新浪不可能大规模删除。假设像我这样的用户很久以前在2009年发了一条支持本田雅阁的微博,我可以通过我的微博链接看到与本田雅阁相关的微博内容。因此,与关键字相关的微博仍然存在于页面上,但新浪微博本身提供的搜索功能并不强大且有限。
网站调用新浪微博内容(【魔兽世界】新浪微博登录常用接口:对应主界面)
网站优化 • 优采云 发表了文章 • 0 个评论 • 68 次浏览 • 2022-01-25 12:24
日志条目
新浪微博登录常用界面:
对应主界面:
不过,我个人推荐使用移动端的微博入口:
对应主界面:
原因是手机上的数据比较轻量级,基础数据齐全,可能会缺少一些基本的个人信息,比如“个人资料完成度”、“个人等级”等。粉丝ID和关注ID只能显示20页,但可以作为大部分验证的语料库。
通过对比下面两张图,分别是PC端和手机端,可以发现内容基本一致:
如下图在手机上,图片比较小,内容也比较简洁。
完整的源代码
下面的代码主要分为三部分:
1.登录微博(用户名、密码) 登录微博
2.VisitPersonPage(user_id) 访问follower网站获取个人信息
3.获取微博内容同时翻页
<p># coding=utf-8
"""
Created on 2016-02-22 @author: Eastmount
功能: 爬取新浪微博用户的信息
信息:用户ID 用户名 粉丝数 关注数 微博数 微博内容
网址:http://weibo.cn/ 数据量更小 相对http://weibo.com/
"""
import time
import re
import os
import sys
import codecs
import shutil
import urllib
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.action_chains import ActionChains
#先调用无界面浏览器PhantomJS或Firefox
#driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")
driver = webdriver.Firefox()
wait = ui.WebDriverWait(driver,10)
#全局变量 文件操作读写信息
inforead = codecs.open("SinaWeibo_List.txt", 'r', 'utf-8')
infofile = codecs.open("SinaWeibo_Info.txt", 'a', 'utf-8')
#********************************************************************************
# 第一步: 登陆weibo.cn 获取新浪微博的cookie
# 该方法针对weibo.cn有效(明文形式传输数据) weibo.com见学弟设置POST和Header方法
# LoginWeibo(username, password) 参数用户名 密码
# 验证码暂停时间手动输入
#********************************************************************************
def LoginWeibo(username, password):
try:
#**********************************************************************
# 直接访问driver.get("http://weibo.cn/5824697471")会跳转到登陆页面 用户id
#
# 用户名
# 密码 "password_4903" 中数字会变动,故采用绝对路径方法,否则不能定位到元素
#
# 勾选记住登录状态check默认是保留 故注释掉该代码 不保留Cookie 则'expiry'=None
#**********************************************************************
#输入用户名/密码登录
print u'准备登陆Weibo.cn网站...'
driver.get("http://login.weibo.cn/login/")
elem_user = driver.find_element_by_name("mobile")
elem_user.send_keys(username) #用户名
elem_pwd = driver.find_element_by_xpath("/html/body/div[2]/form/div/input[2]")
elem_pwd.send_keys(password) #密码
#elem_rem = driver.find_element_by_name("remember")
#elem_rem.click() #记住登录状态
#重点: 暂停时间输入验证码
#pause(millisenconds)
time.sleep(20)
elem_sub = driver.find_element_by_name("submit")
elem_sub.click() #点击登陆
time.sleep(2)
#获取Coockie 推荐 http://www.cnblogs.com/fnng/p/3269450.html
print driver.current_url
print driver.get_cookies() #获得cookie信息 dict存储
print u'输出Cookie键值对信息:'
for cookie in driver.get_cookies():
#print cookie
for key in cookie:
print key, cookie[key]
#driver.get_cookies()类型list 仅包含一个元素cookie类型dict
print u'登陆成功...'
except Exception,e:
print "Error: ",e
finally:
print u'End LoginWeibo!\n\n'
#********************************************************************************
# 第二步: 访问个人页面http://weibo.cn/5824697471并获取信息
# VisitPersonPage()
# 编码常见错误 UnicodeEncodeError: 'ascii' codec can't encode characters
#********************************************************************************
def VisitPersonPage(user_id):
try:
global infofile
print u'准备访问个人网站.....'
#原创内容 http://weibo.cn/guangxianliuya ... e%3D2
driver.get("http://weibo.cn/" + user_id)
#**************************************************************************
# No.1 直接获取 用户昵称 微博数 关注数 粉丝数
# str_name.text是unicode编码类型
#**************************************************************************
#用户id
print u'个人详细信息'
print '**********************************************'
print u'用户id: ' + user_id
#昵称
str_name = driver.find_element_by_xpath("//div[@class='ut']")
str_t = str_name.text.split(" ")
num_name = str_t[0] #空格分隔 获取第一个值 "Eastmount 详细资料 设置 新手区"
print u'昵称: ' + num_name
#微博数 除个人主页 它默认直接显示微博数 无超链接
#Error: 'unicode' object is not callable
#一般是把字符串当做函数使用了 str定义成字符串 而str()函数再次使用时报错
str_wb = driver.find_element_by_xpath("//div[@class='tip2']")
pattern = r"\d+\.?\d*" #正则提取"微博[0]" 但r"(\[.*?\])"总含[]
guid = re.findall(pattern, str_wb.text, re.S|re.M)
print str_wb.text #微博[294] 关注[351] 粉丝[294] 分组[1] @他的
for value in guid:
num_wb = int(value)
break
print u'微博数: ' + str(num_wb)
#关注数
str_gz = driver.find_element_by_xpath("//div[@class='tip2']/a[1]")
guid = re.findall(pattern, str_gz.text, re.M)
num_gz = int(guid[0])
print u'关注数: ' + str(num_gz)
#粉丝数
str_fs = driver.find_element_by_xpath("//div[@class='tip2']/a[2]")
guid = re.findall(pattern, str_fs.text, re.M)
num_fs = int(guid[0])
print u'粉丝数: ' + str(num_fs)
#***************************************************************************
# No.2 文件操作写入信息
#***************************************************************************
infofile.write('=====================================================================\r\n')
infofile.write(u'用户: ' + user_id + '\r\n')
infofile.write(u'昵称: ' + num_name + '\r\n')
infofile.write(u'微博数: ' + str(num_wb) + '\r\n')
infofile.write(u'关注数: ' + str(num_gz) + '\r\n')
infofile.write(u'粉丝数: ' + str(num_fs) + '\r\n')
infofile.write(u'微博内容: ' + '\r\n\r\n')
#***************************************************************************
# No.3 获取微博内容
# http://weibo.cn/guangxianliuya ... e%3D1
# 其中filter=0表示全部 =1表示原创
#***************************************************************************
print '\n'
print u'获取微博内容信息'
num = 1
while num 查看全部
网站调用新浪微博内容(【魔兽世界】新浪微博登录常用接口:对应主界面)
日志条目
新浪微博登录常用界面:
对应主界面:
不过,我个人推荐使用移动端的微博入口:
对应主界面:
原因是手机上的数据比较轻量级,基础数据齐全,可能会缺少一些基本的个人信息,比如“个人资料完成度”、“个人等级”等。粉丝ID和关注ID只能显示20页,但可以作为大部分验证的语料库。
通过对比下面两张图,分别是PC端和手机端,可以发现内容基本一致:
如下图在手机上,图片比较小,内容也比较简洁。
完整的源代码
下面的代码主要分为三部分:
1.登录微博(用户名、密码) 登录微博
2.VisitPersonPage(user_id) 访问follower网站获取个人信息
3.获取微博内容同时翻页
<p># coding=utf-8
"""
Created on 2016-02-22 @author: Eastmount
功能: 爬取新浪微博用户的信息
信息:用户ID 用户名 粉丝数 关注数 微博数 微博内容
网址:http://weibo.cn/ 数据量更小 相对http://weibo.com/
"""
import time
import re
import os
import sys
import codecs
import shutil
import urllib
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.action_chains import ActionChains
#先调用无界面浏览器PhantomJS或Firefox
#driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")
driver = webdriver.Firefox()
wait = ui.WebDriverWait(driver,10)
#全局变量 文件操作读写信息
inforead = codecs.open("SinaWeibo_List.txt", 'r', 'utf-8')
infofile = codecs.open("SinaWeibo_Info.txt", 'a', 'utf-8')
#********************************************************************************
# 第一步: 登陆weibo.cn 获取新浪微博的cookie
# 该方法针对weibo.cn有效(明文形式传输数据) weibo.com见学弟设置POST和Header方法
# LoginWeibo(username, password) 参数用户名 密码
# 验证码暂停时间手动输入
#********************************************************************************
def LoginWeibo(username, password):
try:
#**********************************************************************
# 直接访问driver.get("http://weibo.cn/5824697471")会跳转到登陆页面 用户id
#
# 用户名
# 密码 "password_4903" 中数字会变动,故采用绝对路径方法,否则不能定位到元素
#
# 勾选记住登录状态check默认是保留 故注释掉该代码 不保留Cookie 则'expiry'=None
#**********************************************************************
#输入用户名/密码登录
print u'准备登陆Weibo.cn网站...'
driver.get("http://login.weibo.cn/login/")
elem_user = driver.find_element_by_name("mobile")
elem_user.send_keys(username) #用户名
elem_pwd = driver.find_element_by_xpath("/html/body/div[2]/form/div/input[2]")
elem_pwd.send_keys(password) #密码
#elem_rem = driver.find_element_by_name("remember")
#elem_rem.click() #记住登录状态
#重点: 暂停时间输入验证码
#pause(millisenconds)
time.sleep(20)
elem_sub = driver.find_element_by_name("submit")
elem_sub.click() #点击登陆
time.sleep(2)
#获取Coockie 推荐 http://www.cnblogs.com/fnng/p/3269450.html
print driver.current_url
print driver.get_cookies() #获得cookie信息 dict存储
print u'输出Cookie键值对信息:'
for cookie in driver.get_cookies():
#print cookie
for key in cookie:
print key, cookie[key]
#driver.get_cookies()类型list 仅包含一个元素cookie类型dict
print u'登陆成功...'
except Exception,e:
print "Error: ",e
finally:
print u'End LoginWeibo!\n\n'
#********************************************************************************
# 第二步: 访问个人页面http://weibo.cn/5824697471并获取信息
# VisitPersonPage()
# 编码常见错误 UnicodeEncodeError: 'ascii' codec can't encode characters
#********************************************************************************
def VisitPersonPage(user_id):
try:
global infofile
print u'准备访问个人网站.....'
#原创内容 http://weibo.cn/guangxianliuya ... e%3D2
driver.get("http://weibo.cn/" + user_id)
#**************************************************************************
# No.1 直接获取 用户昵称 微博数 关注数 粉丝数
# str_name.text是unicode编码类型
#**************************************************************************
#用户id
print u'个人详细信息'
print '**********************************************'
print u'用户id: ' + user_id
#昵称
str_name = driver.find_element_by_xpath("//div[@class='ut']")
str_t = str_name.text.split(" ")
num_name = str_t[0] #空格分隔 获取第一个值 "Eastmount 详细资料 设置 新手区"
print u'昵称: ' + num_name
#微博数 除个人主页 它默认直接显示微博数 无超链接
#Error: 'unicode' object is not callable
#一般是把字符串当做函数使用了 str定义成字符串 而str()函数再次使用时报错
str_wb = driver.find_element_by_xpath("//div[@class='tip2']")
pattern = r"\d+\.?\d*" #正则提取"微博[0]" 但r"(\[.*?\])"总含[]
guid = re.findall(pattern, str_wb.text, re.S|re.M)
print str_wb.text #微博[294] 关注[351] 粉丝[294] 分组[1] @他的
for value in guid:
num_wb = int(value)
break
print u'微博数: ' + str(num_wb)
#关注数
str_gz = driver.find_element_by_xpath("//div[@class='tip2']/a[1]")
guid = re.findall(pattern, str_gz.text, re.M)
num_gz = int(guid[0])
print u'关注数: ' + str(num_gz)
#粉丝数
str_fs = driver.find_element_by_xpath("//div[@class='tip2']/a[2]")
guid = re.findall(pattern, str_fs.text, re.M)
num_fs = int(guid[0])
print u'粉丝数: ' + str(num_fs)
#***************************************************************************
# No.2 文件操作写入信息
#***************************************************************************
infofile.write('=====================================================================\r\n')
infofile.write(u'用户: ' + user_id + '\r\n')
infofile.write(u'昵称: ' + num_name + '\r\n')
infofile.write(u'微博数: ' + str(num_wb) + '\r\n')
infofile.write(u'关注数: ' + str(num_gz) + '\r\n')
infofile.write(u'粉丝数: ' + str(num_fs) + '\r\n')
infofile.write(u'微博内容: ' + '\r\n\r\n')
#***************************************************************************
# No.3 获取微博内容
# http://weibo.cn/guangxianliuya ... e%3D1
# 其中filter=0表示全部 =1表示原创
#***************************************************************************
print '\n'
print u'获取微博内容信息'
num = 1
while num
网站调用新浪微博内容(微博爬虫,单机每日千万级的数据ampamp总结(图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 95 次浏览 • 2022-01-25 12:22
微博爬虫,单机每天千万级数据&&吐血整理微博爬虫总结
前言
早前我发表了一篇博客微博爬虫,每天上百万条数据,并在Github上开源了代码,后来很多人联系我,还有一些公众号转载了这个文章。
但是,对于微博爬虫,我还是很内疚的,因为账号池的问题还没有解决,所以每天百万数据里都有水。仅仅爬取好友关系,这个简单的数据就可以达到数百万。如果你抓取关键词搜索过的微博,或者一个人的所有微博,都达不到百万级数据量。
但既然坑已经埋了,就必须要填上!所以自从写了那篇文章之后,我就一直想打造一个稳定的单机千万级每日微博抓取系统。
值得庆祝的是,这个问题现在已经完全解决了!对微博爬虫也有了更深的了解!
微博网站分析
目前共有三个微博网站:
可以看出,这三个站点的复杂度在逐渐增加。很显然,如果你能爬到最简单的完成,你肯定不会爬复杂的,但实际上,有些只能爬复杂的。!
什么任务不能完成?可以说,抢一个人的所有微博,抢朋友,抢个人信息,这一切都可以在这个网站上完成。
但是,有一个任务是无法完成的,那就是高级搜索
微博高级搜索
也许你经常有这样的需求。比如最近疫苗事件的兴起,你需要抓住7月10日到7月20日这个时间段,提一下疫苗的关键词微博。
这其实是一个非常刚性的要求,需要使用微博的高级搜索来完成。
对于高级搜索界面,三个微博网站的情况是:
高级搜索条目:
可以看到这里可以过滤的条件有,类型,用户,时间,注意这里的时间是以天为单位的。
以下是对 关键词 疫苗的特定搜索
可以看到一页有10条搜索结果,最多显示100页,也就是1000条结果。
因此,搜索结果最多会返回1000条微博,
本站的时间单位是天,比如搜索时间段是10天,那么最多可以抓取10*1000=10000条数据。
不幸的是,这个网站没有高级搜索界面
高级搜索条目:
可以看到这里可以过滤的条件有类型、用户、时间、地区。请注意,这里的时间以小时为单位。
本站一页有20条微博,最多50页,所以一次搜索最多也能返回1000条微博数据
但是这个网站的时间单位是小时,
所以比如搜索时间段是10天,那么最多可以抓取10*24*1000=240000条数据。
总结
所以可能只需要高级搜索,而且你需要的搜索结果数据非常大,而且过滤条件非常精细,比如地区,其他爬虫需求都可以通过本站抓取,包括比较粗略的高级搜索
微博爬取经验总结
还是传统的验证码,5位数字和字母的组合
这个验证码可以通过扫码平台来解决。具体登录代码请参考这里
但是,由于您购买的小号可能会因为操作频繁而被微博盯上,所以登录时账号异常,会生成一个非常恶心的验证码,如下图。
遇到这种情况,建议你放弃治疗,不要想着破解这个验证码,所以你平时买的小号也不是100%可用的,还有一些是异常账号!
打造千万级爬虫系统
基于以上分析,如果要搭建千万级爬虫系统,只需要做一件事,搭建一个账户池。
建立账户池的步骤也很简单:
1. 购买批量帐户
2. 登录微博并保存cookie
在这两个步骤中,对于每个后续请求,只需从帐户池中随机选择一个帐户即可。
这两个站点的cookies是不同的,所以我们需要建立两个账户池,一个给cn站点,一个给com站点。
这时候,结合我之前写的项目WeiboSpider,就可以轻松实现每日百万级数据抓取!
注意这里的实际爬取速度与你的账户池大小和电脑带宽有很大关系。如果账户池不大,请求间隔延迟会稍微长一些。如果带宽小,每个请求的耗时也会长一点
我的数据是
账户池中有 230 个账户,每个请求的延迟为 0.1 秒,每天可以实现 2-300 万个获取结果。
冲刺到千万
一直以为我上面搭建的爬虫占用了带宽!
有一次,我启动了另一个爬虫,发现另一个爬虫也可以达到每天2到300万的爬行速度。同时,之前的爬虫也在以每天2到300万的爬行速度运行。
所以,只是CPU在限制爬虫的爬取量,而不是网络IO!
所以你只需要使用多进程优化。这里推荐使用 Redis-Scrapy。所有爬虫共享一个 Redis 队列,通过 Redis 将 URL 统一分配给爬虫,Redis 是一个分布式爬虫系统。
它可以部署在不同的机器上(如果一台机器的带宽/CPU已满),或者只是在一台机器上打开多个进程。
就这样,开了5个进程,不敢再开多了,毕竟账户池还是200多。
那么结果是:
一分钟可抓8000条数据,一天可抓1100万+
抓取系统目前运行稳定
因此,最初的目标已经实现,一个千万级的微博爬虫系统
总结
至此,可以说微博爬虫的所有问题都彻底解决了!!!
开源代码在这里,你需要添加自己的帐户池。 查看全部
网站调用新浪微博内容(微博爬虫,单机每日千万级的数据ampamp总结(图))
微博爬虫,单机每天千万级数据&&吐血整理微博爬虫总结
前言
早前我发表了一篇博客微博爬虫,每天上百万条数据,并在Github上开源了代码,后来很多人联系我,还有一些公众号转载了这个文章。
但是,对于微博爬虫,我还是很内疚的,因为账号池的问题还没有解决,所以每天百万数据里都有水。仅仅爬取好友关系,这个简单的数据就可以达到数百万。如果你抓取关键词搜索过的微博,或者一个人的所有微博,都达不到百万级数据量。
但既然坑已经埋了,就必须要填上!所以自从写了那篇文章之后,我就一直想打造一个稳定的单机千万级每日微博抓取系统。
值得庆祝的是,这个问题现在已经完全解决了!对微博爬虫也有了更深的了解!
微博网站分析
目前共有三个微博网站:
可以看出,这三个站点的复杂度在逐渐增加。很显然,如果你能爬到最简单的完成,你肯定不会爬复杂的,但实际上,有些只能爬复杂的。!
什么任务不能完成?可以说,抢一个人的所有微博,抢朋友,抢个人信息,这一切都可以在这个网站上完成。
但是,有一个任务是无法完成的,那就是高级搜索
微博高级搜索
也许你经常有这样的需求。比如最近疫苗事件的兴起,你需要抓住7月10日到7月20日这个时间段,提一下疫苗的关键词微博。
这其实是一个非常刚性的要求,需要使用微博的高级搜索来完成。
对于高级搜索界面,三个微博网站的情况是:
高级搜索条目:
可以看到这里可以过滤的条件有,类型,用户,时间,注意这里的时间是以天为单位的。
以下是对 关键词 疫苗的特定搜索
可以看到一页有10条搜索结果,最多显示100页,也就是1000条结果。
因此,搜索结果最多会返回1000条微博,
本站的时间单位是天,比如搜索时间段是10天,那么最多可以抓取10*1000=10000条数据。
不幸的是,这个网站没有高级搜索界面
高级搜索条目:
可以看到这里可以过滤的条件有类型、用户、时间、地区。请注意,这里的时间以小时为单位。
本站一页有20条微博,最多50页,所以一次搜索最多也能返回1000条微博数据
但是这个网站的时间单位是小时,
所以比如搜索时间段是10天,那么最多可以抓取10*24*1000=240000条数据。
总结
所以可能只需要高级搜索,而且你需要的搜索结果数据非常大,而且过滤条件非常精细,比如地区,其他爬虫需求都可以通过本站抓取,包括比较粗略的高级搜索
微博爬取经验总结
还是传统的验证码,5位数字和字母的组合
这个验证码可以通过扫码平台来解决。具体登录代码请参考这里
但是,由于您购买的小号可能会因为操作频繁而被微博盯上,所以登录时账号异常,会生成一个非常恶心的验证码,如下图。
遇到这种情况,建议你放弃治疗,不要想着破解这个验证码,所以你平时买的小号也不是100%可用的,还有一些是异常账号!
打造千万级爬虫系统
基于以上分析,如果要搭建千万级爬虫系统,只需要做一件事,搭建一个账户池。
建立账户池的步骤也很简单:
1. 购买批量帐户
2. 登录微博并保存cookie
在这两个步骤中,对于每个后续请求,只需从帐户池中随机选择一个帐户即可。
这两个站点的cookies是不同的,所以我们需要建立两个账户池,一个给cn站点,一个给com站点。
这时候,结合我之前写的项目WeiboSpider,就可以轻松实现每日百万级数据抓取!
注意这里的实际爬取速度与你的账户池大小和电脑带宽有很大关系。如果账户池不大,请求间隔延迟会稍微长一些。如果带宽小,每个请求的耗时也会长一点
我的数据是
账户池中有 230 个账户,每个请求的延迟为 0.1 秒,每天可以实现 2-300 万个获取结果。
冲刺到千万
一直以为我上面搭建的爬虫占用了带宽!
有一次,我启动了另一个爬虫,发现另一个爬虫也可以达到每天2到300万的爬行速度。同时,之前的爬虫也在以每天2到300万的爬行速度运行。
所以,只是CPU在限制爬虫的爬取量,而不是网络IO!
所以你只需要使用多进程优化。这里推荐使用 Redis-Scrapy。所有爬虫共享一个 Redis 队列,通过 Redis 将 URL 统一分配给爬虫,Redis 是一个分布式爬虫系统。
它可以部署在不同的机器上(如果一台机器的带宽/CPU已满),或者只是在一台机器上打开多个进程。
就这样,开了5个进程,不敢再开多了,毕竟账户池还是200多。
那么结果是:
一分钟可抓8000条数据,一天可抓1100万+
抓取系统目前运行稳定
因此,最初的目标已经实现,一个千万级的微博爬虫系统
总结
至此,可以说微博爬虫的所有问题都彻底解决了!!!
开源代码在这里,你需要添加自己的帐户池。
网站调用新浪微博内容(网站调用新浪微博显示搜狐的内容是一个页面)
网站优化 • 优采云 发表了文章 • 0 个评论 • 70 次浏览 • 2022-01-23 04:03
网站调用新浪微博内容然后显示搜狐的内容,新浪转给搜狐之后搜狐和转给搜狐的内容是一个页面。百度收录排名靠前就能给你这个站带来用户和流量,从而使得用户、站长、新浪微博、新浪微博读者找到对应的内容。反之,如果你本身没有用户,或者没有搜索结果,就没有用户,就没有内容提供。
第一次参加百度开发者大会
内容为王,百度是站长生态的维护者,
百度或者谷歌属于工具类平台,百度的体系就是以流量换取数据和名声。谷歌则是搜索引擎,两者之间还是有不同。不好衡量谁占优势谁占劣势。
我猜:一,谷歌不是百度的子公司。而百度不再买百度作为优势,而百度也没必要买谷歌的优势。二,谷歌收购百度的路演很足,招揽人才,拉团队,百度的发展状况对整个上市并没有太大影响。三,谷歌虽说自己也没做内容,但人家也说了,客户如果有需求的话会第一时间联系谷歌的,百度需要的是做搜索的,单就这点百度缺乏对重点客户的宣传。
四,谷歌说过不做百度的竞价排名,不过这样就需要有更多没有办法优化的网站上线,而且这个工作量不比百度的竞价排名来的小。五,谷歌说过卖百度关键词,但感觉百度的词太多了,这个自家排名的意义不大,特别是百度起家的地方谷歌已经做到了和百度持平,相信谷歌自己也不需要这种关键词,同样,谷歌自己产品栏目上的词也非常多,人家是做搜索,百度是做社区的。
谷歌三条到五条自家站内的流量就可以覆盖掉整个平台,百度三条到五条自家站内广告和谷歌三条到五条站内的流量在关键词覆盖上一定比拼不过的。感觉已经丧失先机了。六,谷歌提供的搜索与百度存在一定差异,谷歌的搜索可以得到更细分和更细分的网站。根据特征搜索,一些小网站收录的机会也许比百度高,那么就能够吸引更多人流量。
七,其实百度真正的劣势在于百度app的内容流量偏少,完全靠在线广告来占领百度桌面,而谷歌强大的搜索索引和后台技术,也许不仅仅靠搜索就能占领市场。八,更简单的需求如视频流量来说,似乎还是视频站传统门道高?九,还是进入百度自家的产品和服务转化,口水仗本就不可能长久,大量用户的习惯培养完全是要靠产品介绍和使用培养的,就像上面说的,能否构成用户粘性是个问题。
最后,app广告是要花钱的。三年左右发布一次,一两年就换一次,应该成本是非常高的。百度即便人家搜一下,输入完之后,马上给你推荐baidu,是不是还有点冤?o(∩_∩)o。 查看全部
网站调用新浪微博内容(网站调用新浪微博显示搜狐的内容是一个页面)
网站调用新浪微博内容然后显示搜狐的内容,新浪转给搜狐之后搜狐和转给搜狐的内容是一个页面。百度收录排名靠前就能给你这个站带来用户和流量,从而使得用户、站长、新浪微博、新浪微博读者找到对应的内容。反之,如果你本身没有用户,或者没有搜索结果,就没有用户,就没有内容提供。
第一次参加百度开发者大会
内容为王,百度是站长生态的维护者,
百度或者谷歌属于工具类平台,百度的体系就是以流量换取数据和名声。谷歌则是搜索引擎,两者之间还是有不同。不好衡量谁占优势谁占劣势。
我猜:一,谷歌不是百度的子公司。而百度不再买百度作为优势,而百度也没必要买谷歌的优势。二,谷歌收购百度的路演很足,招揽人才,拉团队,百度的发展状况对整个上市并没有太大影响。三,谷歌虽说自己也没做内容,但人家也说了,客户如果有需求的话会第一时间联系谷歌的,百度需要的是做搜索的,单就这点百度缺乏对重点客户的宣传。
四,谷歌说过不做百度的竞价排名,不过这样就需要有更多没有办法优化的网站上线,而且这个工作量不比百度的竞价排名来的小。五,谷歌说过卖百度关键词,但感觉百度的词太多了,这个自家排名的意义不大,特别是百度起家的地方谷歌已经做到了和百度持平,相信谷歌自己也不需要这种关键词,同样,谷歌自己产品栏目上的词也非常多,人家是做搜索,百度是做社区的。
谷歌三条到五条自家站内的流量就可以覆盖掉整个平台,百度三条到五条自家站内广告和谷歌三条到五条站内的流量在关键词覆盖上一定比拼不过的。感觉已经丧失先机了。六,谷歌提供的搜索与百度存在一定差异,谷歌的搜索可以得到更细分和更细分的网站。根据特征搜索,一些小网站收录的机会也许比百度高,那么就能够吸引更多人流量。
七,其实百度真正的劣势在于百度app的内容流量偏少,完全靠在线广告来占领百度桌面,而谷歌强大的搜索索引和后台技术,也许不仅仅靠搜索就能占领市场。八,更简单的需求如视频流量来说,似乎还是视频站传统门道高?九,还是进入百度自家的产品和服务转化,口水仗本就不可能长久,大量用户的习惯培养完全是要靠产品介绍和使用培养的,就像上面说的,能否构成用户粘性是个问题。
最后,app广告是要花钱的。三年左右发布一次,一两年就换一次,应该成本是非常高的。百度即便人家搜一下,输入完之后,马上给你推荐baidu,是不是还有点冤?o(∩_∩)o。
网站调用新浪微博内容(新浪新闻的采集方法,以及为什么要去采集新浪?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 126 次浏览 • 2022-01-22 18:05
现在无论你是一个采集站的站长,还是一个普通的采集站长,采集都有一个来源,就是新闻来源。今天小编就和大家聊一聊新浪新闻的采集方法,以及为什么要去采集新浪新闻。
首先我们来看看新浪新闻的介绍:新浪新闻可以及时获取全球新闻资讯、国内外新闻、精彩体育赛事报道、财经财经动态、影视娱乐赛事、独家微博“微” ” 新闻,精彩如你所见,新闻、星座、笑话很多。从这个信息我们可以知道,它基本上覆盖了各行各业,所以也适应了各种采集的需求,不管你在哪个站,新浪采集都可以联系到你需要 文章 资源。新浪作为互联网内容的领头羊,在传播、解读、把握新闻特别是专题方面做得很好。正因为新浪最擅长做新闻,所以它的时效性、时效性、权威性、
分析了这么多优势之后,采集新浪新闻的内容怎么办?可能对于大部分新手或者不懂编码技术的站长来说,只能一一复制粘贴。但是这种情况下效率很低,不能同时满足这么多网站的内容更新。那么如何解决这个问题呢?事实上,这很简单。只需要一个技巧就可以完美解决这个问题。我们完全可以用工具代替劳动力。
小编经常使用的一款免费采集工具,功能强大,不仅可以采集新闻来源,还可以微信公众号、知乎、相关咨询等采集 . 对于我们作为一个站来说,它非常实用,不仅功能多,而且好用,而且关键是免费的。提高效率,降低成本,可以说是站长们的福音。
完成采集,步骤很简单,就几个步骤。首先,我们新建一个采集任务,设置任务名称(例如:新闻采集),然后选择我们要采集的数据源,选择新浪新闻。接下来,我们需要为采集到文章找到一个住的地方,选择一个新的空白文件夹,并设置文章的数量关键词采集文章,这取决于你自己的情况。一般小编会选择多导入关键词,一篇关键词采集10篇,最后把关键词或者长尾关键词导入进去没关系。是不是很简单?整个操作过程可以在1分钟内完成。只需简单的点击两下,输入几个字即可完成,与以往复制粘贴的效率形成鲜明对比。
在今天的效率时代,我们必须提高我们的效率,这样我们才能在众多同行和对手中脱颖而出。今天小编的分享就到这里,希望对大家有帮助,天下站长都是一家人。喜欢小编的可以点赞关注。您的喜欢和关注将是我不断的动力。谢谢收看! 查看全部
网站调用新浪微博内容(新浪新闻的采集方法,以及为什么要去采集新浪?)
现在无论你是一个采集站的站长,还是一个普通的采集站长,采集都有一个来源,就是新闻来源。今天小编就和大家聊一聊新浪新闻的采集方法,以及为什么要去采集新浪新闻。
首先我们来看看新浪新闻的介绍:新浪新闻可以及时获取全球新闻资讯、国内外新闻、精彩体育赛事报道、财经财经动态、影视娱乐赛事、独家微博“微” ” 新闻,精彩如你所见,新闻、星座、笑话很多。从这个信息我们可以知道,它基本上覆盖了各行各业,所以也适应了各种采集的需求,不管你在哪个站,新浪采集都可以联系到你需要 文章 资源。新浪作为互联网内容的领头羊,在传播、解读、把握新闻特别是专题方面做得很好。正因为新浪最擅长做新闻,所以它的时效性、时效性、权威性、
分析了这么多优势之后,采集新浪新闻的内容怎么办?可能对于大部分新手或者不懂编码技术的站长来说,只能一一复制粘贴。但是这种情况下效率很低,不能同时满足这么多网站的内容更新。那么如何解决这个问题呢?事实上,这很简单。只需要一个技巧就可以完美解决这个问题。我们完全可以用工具代替劳动力。

小编经常使用的一款免费采集工具,功能强大,不仅可以采集新闻来源,还可以微信公众号、知乎、相关咨询等采集 . 对于我们作为一个站来说,它非常实用,不仅功能多,而且好用,而且关键是免费的。提高效率,降低成本,可以说是站长们的福音。
完成采集,步骤很简单,就几个步骤。首先,我们新建一个采集任务,设置任务名称(例如:新闻采集),然后选择我们要采集的数据源,选择新浪新闻。接下来,我们需要为采集到文章找到一个住的地方,选择一个新的空白文件夹,并设置文章的数量关键词采集文章,这取决于你自己的情况。一般小编会选择多导入关键词,一篇关键词采集10篇,最后把关键词或者长尾关键词导入进去没关系。是不是很简单?整个操作过程可以在1分钟内完成。只需简单的点击两下,输入几个字即可完成,与以往复制粘贴的效率形成鲜明对比。

在今天的效率时代,我们必须提高我们的效率,这样我们才能在众多同行和对手中脱颖而出。今天小编的分享就到这里,希望对大家有帮助,天下站长都是一家人。喜欢小编的可以点赞关注。您的喜欢和关注将是我不断的动力。谢谢收看!
网站调用新浪微博内容([python爬虫]Selenium爬取新浪微博内容及用户信息pyhton微博爬虫 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 57 次浏览 • 2022-01-22 14:09
)
老师交给的任务是对一批批的微博文本进行舆情分析。第一步是捕获数据。我在网上搜索了主要基于移动网页(wap/cn)的爬虫,但是我的电脑上打不开这些网站。
由于我也是网络新手,所以参考别人的代码,硬着头皮直接抓取内容。他们使用非常傻瓜式方法,适合入门。
参考链接:
[python爬虫] Selenium爬取新浪微博内容和用户信息
pyhton微博爬虫(2) - 获取微博用户关注列表
首先是参考第一个文档,通过指定的ID获取微博信息,主要工作是根据网页的电脑版本修改网页元素。
由于需要自己输入用户ID,所以能抓到的信息其实是很有限的,所以我在考虑是用用户的关注度还是粉丝列表来用他们的ID作为这个程序的输入,然后从关注度在这些用户中,粉丝名单的扩大有点类似于病毒的传播,从而可以捕捉到客观数量的用户ID。这涉及到json数据的识别和常规文本的提取。参考第二条。
具体代码放在下面,分成两个py. 还有一个问题我想优化,但是我觉得有点难,就是想把大V、僵尸号、海军去掉,只提取普通用户的信息。希望有兄弟姐妹指导思路。
代码
<p># coding=utf-8
# sinascr.py 输入指定用户ID,爬取这些用户的微博信息和内容
"""
Created on 2018-3-29 @author: goaza123
功能: 爬取新浪微博用户的信息
信息:用户ID 用户名 粉丝数 关注数 微博数 微博内容
网址:http://weibo.com/, http://weibo.cn/无法访问
"""
import time
import re
import os
import sys
import codecs
import shutil
import urllib
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# 先调用无界面浏览器PhantomJS或Firefox
# driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")
driver = webdriver.Firefox()
wait = ui.WebDriverWait(driver, 10)
# 全局变量 文件操作读写信息
inforead = codecs.open("SinaWeibo_List.txt", 'r', 'utf-8')
infofile = codecs.open("SinaWeibo_Info.txt", 'a', 'utf-8')
# ********************************************************************************
# 第一步: 登陆weibo.cn 获取新浪微博的cookie
# 该方法针对weibo.cn有效(明文形式传输数据) weibo.com见学弟设置POST和Header方法
# LoginWeibo(username, password) 参数用户名 密码
# 验证码暂停时间手动输入
# ********************************************************************************
def LoginWeibo(username, password):
try:
# **********************************************************************
# 直接访问driver.get("http://weibo.cn/5824697471")会跳转到登陆页面 用户id
#
# 用户名
# 密码 "password_4903" 中数字会变动,故采用绝对路径方法,否则不能定位到元素
#
# 勾选记住登录状态check默认是保留 故注释掉该代码 不保留Cookie 则'expiry'=None
# **********************************************************************
# 输入用户名/密码登录
print u'准备登陆Weibo.cn网站...'
driver.get("https://weibo.com/")
time.sleep(10) #等待页面载入
elem_user = driver.find_element_by_id('loginname')
elem_user.clear()
elem_user.send_keys(username) # 用户名
elem_pwd = driver.find_element_by_class_name('password').find_element_by_name('password')
elem_pwd.clear()
elem_pwd.send_keys(password) # 密码
# elem_rem = driver.find_element_by_id("login_form_savestate")
# elem_rem.click() #记住登录状态
elem_sub = driver.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[6]/a/span')
elem_sub.click() # 点击登陆
time.sleep(10) # 重点: 暂停时间输入验证码
elem_sub.click() # 点击登陆
# 获取Coockie 推荐 http://www.cnblogs.com/fnng/p/3269450.html
#print driver.current_url
#print driver.get_cookies() # 获得cookie信息 dict存储
#print u'输出Cookie键值对信息:'
for cookie in driver.get_cookies():
# print cookie
for key in cookie:
print key, cookie[key]
# driver.get_cookies()类型list 仅包含一个元素cookie类型dict
print u'登陆成功...'
time.sleep(5)
except Exception, e:
print "Error: ", e
# ********************************************************************************
# 第二步: 访问个人页面http://weibo.cn/302579176并获取信息
# VisitPersonPage()
# 编码常见错误 UnicodeEncodeError: 'ascii' codec can't encode characters
# ********************************************************************************
def VisitPersonPage(user_id):
try:
global infofile
print u'准备访问个人网站.....'
# 原创内容 http://weibo.cn/guangxianliuya ... e%3D2
driver.get("http://weibo.com/" + user_id +"?profile_ftype=1&is_all=1#_0")
# **************************************************************************
# No.1 直接获取 用户昵称 微博数 关注数 粉丝数
# str_name.text是unicode编码类型
# **************************************************************************
# 用户id
print u'个人详细信息'
print '**********************************************'
print u'用户id: ' + user_id
# 昵称
str_name = driver.find_element_by_xpath("//div[@class='pf_username']")
str_t = str_name.text.split(" ")
num_name = str_t[0] # 空格分隔 获取第一个值 "Eastmount 详细资料 设置 新手区"
print u'昵称: ' + num_name
str_intro = driver.find_element_by_xpath("//div[@class='pf_intro']")
str_t = str_intro.text.split(" ")
num_intro = str_t[0] # 空格分隔 获取第一个值 "Eastmount 详细资料 设置 新手区"
print u'简介: ' + num_intro
# Error: 'unicode' object is not callable
# 一般是把字符串当做函数使用了 str定义成字符串 而str()函数再次使用时报错
try:
str_wb = driver.find_element_by_xpath("//td[1]/a[@class='t_link S_txt1']/strong")
except:
str_wb = driver.find_element_by_xpath("//td[@class='S_line1'][1]/strong")
pattern = r"\d+\.?\d*" # 正则提取"微博[0]" 但r"(\[.*?\])"总含[]
guid = re.findall(pattern, str_wb.text, re.S | re.M)
for value in guid:
num_wb = int(value)
break
print u'关注数: ' + str(num_wb)
# 关注数
try:
str_gz = driver.find_element_by_xpath("//td[2]/a[@class='t_link S_txt1']/strong")
except:
str_gz = driver.find_element_by_xpath("//td[@class='S_line1'][2]/strong")
guid = re.findall(pattern, str_gz.text, re.M)
num_gz = int(guid[0])
print u'粉丝数: ' + str(num_gz)
# 粉丝数
try:
str_fs = driver.find_element_by_xpath("//td[3]/a[@class='t_link S_txt1']/strong")
except:
str_fs = driver.find_element_by_xpath("//td[@class='S_line1'][3]/strong")
guid = re.findall(pattern, str_fs.text, re.M)
num_fs = int(guid[0])
print u'微博数: ' + str(num_fs)
# ***************************************************************************
# No.2 文件操作写入信息
# ***************************************************************************
infofile.write('=====================================================================\r\n')
infofile.write(u'用户: ' + user_id + '\r\n')
infofile.write(u'昵称: ' + num_name + '\r\n')
infofile.write(u'简介: ' + num_intro + '\r\n')
infofile.write(u'微博数: ' + str(num_wb) + '\r\n')
infofile.write(u'关注数: ' + str(num_gz) + '\r\n')
infofile.write(u'粉丝数: ' + str(num_fs) + '\r\n')
infofile.write(u'微博内容: ' + '\r\n')
# ***************************************************************************
# No.3 获取微博内容
# http://weibo.cn/guangxianliuya ... e%3D1
# 其中filter=0表示全部 =1表示原创
# ***************************************************************************
print '\n'
print u'获取微博内容信息'
num = 1
while num 查看全部
网站调用新浪微博内容([python爬虫]Selenium爬取新浪微博内容及用户信息pyhton微博爬虫
)
老师交给的任务是对一批批的微博文本进行舆情分析。第一步是捕获数据。我在网上搜索了主要基于移动网页(wap/cn)的爬虫,但是我的电脑上打不开这些网站。
由于我也是网络新手,所以参考别人的代码,硬着头皮直接抓取内容。他们使用非常傻瓜式方法,适合入门。
参考链接:
[python爬虫] Selenium爬取新浪微博内容和用户信息
pyhton微博爬虫(2) - 获取微博用户关注列表
首先是参考第一个文档,通过指定的ID获取微博信息,主要工作是根据网页的电脑版本修改网页元素。
由于需要自己输入用户ID,所以能抓到的信息其实是很有限的,所以我在考虑是用用户的关注度还是粉丝列表来用他们的ID作为这个程序的输入,然后从关注度在这些用户中,粉丝名单的扩大有点类似于病毒的传播,从而可以捕捉到客观数量的用户ID。这涉及到json数据的识别和常规文本的提取。参考第二条。
具体代码放在下面,分成两个py. 还有一个问题我想优化,但是我觉得有点难,就是想把大V、僵尸号、海军去掉,只提取普通用户的信息。希望有兄弟姐妹指导思路。
代码
<p># coding=utf-8
# sinascr.py 输入指定用户ID,爬取这些用户的微博信息和内容
"""
Created on 2018-3-29 @author: goaza123
功能: 爬取新浪微博用户的信息
信息:用户ID 用户名 粉丝数 关注数 微博数 微博内容
网址:http://weibo.com/, http://weibo.cn/无法访问
"""
import time
import re
import os
import sys
import codecs
import shutil
import urllib
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# 先调用无界面浏览器PhantomJS或Firefox
# driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")
driver = webdriver.Firefox()
wait = ui.WebDriverWait(driver, 10)
# 全局变量 文件操作读写信息
inforead = codecs.open("SinaWeibo_List.txt", 'r', 'utf-8')
infofile = codecs.open("SinaWeibo_Info.txt", 'a', 'utf-8')
# ********************************************************************************
# 第一步: 登陆weibo.cn 获取新浪微博的cookie
# 该方法针对weibo.cn有效(明文形式传输数据) weibo.com见学弟设置POST和Header方法
# LoginWeibo(username, password) 参数用户名 密码
# 验证码暂停时间手动输入
# ********************************************************************************
def LoginWeibo(username, password):
try:
# **********************************************************************
# 直接访问driver.get("http://weibo.cn/5824697471")会跳转到登陆页面 用户id
#
# 用户名
# 密码 "password_4903" 中数字会变动,故采用绝对路径方法,否则不能定位到元素
#
# 勾选记住登录状态check默认是保留 故注释掉该代码 不保留Cookie 则'expiry'=None
# **********************************************************************
# 输入用户名/密码登录
print u'准备登陆Weibo.cn网站...'
driver.get("https://weibo.com/")
time.sleep(10) #等待页面载入
elem_user = driver.find_element_by_id('loginname')
elem_user.clear()
elem_user.send_keys(username) # 用户名
elem_pwd = driver.find_element_by_class_name('password').find_element_by_name('password')
elem_pwd.clear()
elem_pwd.send_keys(password) # 密码
# elem_rem = driver.find_element_by_id("login_form_savestate")
# elem_rem.click() #记住登录状态
elem_sub = driver.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[6]/a/span')
elem_sub.click() # 点击登陆
time.sleep(10) # 重点: 暂停时间输入验证码
elem_sub.click() # 点击登陆
# 获取Coockie 推荐 http://www.cnblogs.com/fnng/p/3269450.html
#print driver.current_url
#print driver.get_cookies() # 获得cookie信息 dict存储
#print u'输出Cookie键值对信息:'
for cookie in driver.get_cookies():
# print cookie
for key in cookie:
print key, cookie[key]
# driver.get_cookies()类型list 仅包含一个元素cookie类型dict
print u'登陆成功...'
time.sleep(5)
except Exception, e:
print "Error: ", e
# ********************************************************************************
# 第二步: 访问个人页面http://weibo.cn/302579176并获取信息
# VisitPersonPage()
# 编码常见错误 UnicodeEncodeError: 'ascii' codec can't encode characters
# ********************************************************************************
def VisitPersonPage(user_id):
try:
global infofile
print u'准备访问个人网站.....'
# 原创内容 http://weibo.cn/guangxianliuya ... e%3D2
driver.get("http://weibo.com/" + user_id +"?profile_ftype=1&is_all=1#_0")
# **************************************************************************
# No.1 直接获取 用户昵称 微博数 关注数 粉丝数
# str_name.text是unicode编码类型
# **************************************************************************
# 用户id
print u'个人详细信息'
print '**********************************************'
print u'用户id: ' + user_id
# 昵称
str_name = driver.find_element_by_xpath("//div[@class='pf_username']")
str_t = str_name.text.split(" ")
num_name = str_t[0] # 空格分隔 获取第一个值 "Eastmount 详细资料 设置 新手区"
print u'昵称: ' + num_name
str_intro = driver.find_element_by_xpath("//div[@class='pf_intro']")
str_t = str_intro.text.split(" ")
num_intro = str_t[0] # 空格分隔 获取第一个值 "Eastmount 详细资料 设置 新手区"
print u'简介: ' + num_intro
# Error: 'unicode' object is not callable
# 一般是把字符串当做函数使用了 str定义成字符串 而str()函数再次使用时报错
try:
str_wb = driver.find_element_by_xpath("//td[1]/a[@class='t_link S_txt1']/strong")
except:
str_wb = driver.find_element_by_xpath("//td[@class='S_line1'][1]/strong")
pattern = r"\d+\.?\d*" # 正则提取"微博[0]" 但r"(\[.*?\])"总含[]
guid = re.findall(pattern, str_wb.text, re.S | re.M)
for value in guid:
num_wb = int(value)
break
print u'关注数: ' + str(num_wb)
# 关注数
try:
str_gz = driver.find_element_by_xpath("//td[2]/a[@class='t_link S_txt1']/strong")
except:
str_gz = driver.find_element_by_xpath("//td[@class='S_line1'][2]/strong")
guid = re.findall(pattern, str_gz.text, re.M)
num_gz = int(guid[0])
print u'粉丝数: ' + str(num_gz)
# 粉丝数
try:
str_fs = driver.find_element_by_xpath("//td[3]/a[@class='t_link S_txt1']/strong")
except:
str_fs = driver.find_element_by_xpath("//td[@class='S_line1'][3]/strong")
guid = re.findall(pattern, str_fs.text, re.M)
num_fs = int(guid[0])
print u'微博数: ' + str(num_fs)
# ***************************************************************************
# No.2 文件操作写入信息
# ***************************************************************************
infofile.write('=====================================================================\r\n')
infofile.write(u'用户: ' + user_id + '\r\n')
infofile.write(u'昵称: ' + num_name + '\r\n')
infofile.write(u'简介: ' + num_intro + '\r\n')
infofile.write(u'微博数: ' + str(num_wb) + '\r\n')
infofile.write(u'关注数: ' + str(num_gz) + '\r\n')
infofile.write(u'粉丝数: ' + str(num_fs) + '\r\n')
infofile.write(u'微博内容: ' + '\r\n')
# ***************************************************************************
# No.3 获取微博内容
# http://weibo.cn/guangxianliuya ... e%3D1
# 其中filter=0表示全部 =1表示原创
# ***************************************************************************
print '\n'
print u'获取微博内容信息'
num = 1
while num
网站调用新浪微博内容(新浪微博是利用feed找到更新文章的地址可以成功关联)
网站优化 • 优采云 发表了文章 • 0 个评论 • 70 次浏览 • 2022-01-22 14:08
新浪微博使用提要查找更新文章。只要给他指定提要地址,就可以成功关联。
现在开始简单地修改织梦的模板。由于织梦无法生成整个站点的xml文件,所以需要先创建一个php程序来生成整个站点的xml。
1.创建feed.php
上面要注意的是修改模板的路径,保证模板和目录下都能找到feed.htm
2. 创建 feed.htm 模板文件
{dede:global.cfg_webname/}
{dede:global.cfg_basehost/}
{dede:global.cfg_description/}
zh-cn
{dede:global.cfg_webname/}
{dede:global.cfg_adminemail/}
{dede:arclist row=’60′ col=’1′ titlelen=’100′ orderby=’pubdate’}
[field:arcurl/]
[field:writer/]
[field:typename/]
[field:pubdate function='strftime("%a, %d %b %Y %H:%M:%S +0800",@me)'/]
[field:arcurl/]
{/dede:arclist}
请务必注意,不要忘记将我的 URL 更改为您需要的。
3.修改index.htm首页模板
由于新浪微博只能验证网址,不能写完整路径,比如我写了:. 结果表明关联失败。解决方法是在中间添加如下代码
通过以上方法,就可以成功关联新浪微博了。 查看全部
网站调用新浪微博内容(新浪微博是利用feed找到更新文章的地址可以成功关联)
新浪微博使用提要查找更新文章。只要给他指定提要地址,就可以成功关联。
现在开始简单地修改织梦的模板。由于织梦无法生成整个站点的xml文件,所以需要先创建一个php程序来生成整个站点的xml。
1.创建feed.php
上面要注意的是修改模板的路径,保证模板和目录下都能找到feed.htm
2. 创建 feed.htm 模板文件
{dede:global.cfg_webname/}
{dede:global.cfg_basehost/}
{dede:global.cfg_description/}
zh-cn
{dede:global.cfg_webname/}
{dede:global.cfg_adminemail/}
{dede:arclist row=’60′ col=’1′ titlelen=’100′ orderby=’pubdate’}
[field:arcurl/]
[field:writer/]
[field:typename/]
[field:pubdate function='strftime("%a, %d %b %Y %H:%M:%S +0800",@me)'/]
[field:arcurl/]
{/dede:arclist}
请务必注意,不要忘记将我的 URL 更改为您需要的。
3.修改index.htm首页模板
由于新浪微博只能验证网址,不能写完整路径,比如我写了:. 结果表明关联失败。解决方法是在中间添加如下代码
通过以上方法,就可以成功关联新浪微博了。
网站调用新浪微博内容(一条前置工作去微博开放平台上()申请网站接入审核)
网站优化 • 优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2022-01-22 14:06
一般流程如下
前期工作
去微博开放平台()申请网站访问
审核通过后,App Key 和 App Secret 会分配给你的应用(后面会根据授权码获取 access_token)
填写用户授权成功后的回调地址
1、点击社交登录按钮
社交按钮链接是第三方授权页面
2、跳转到微博授权页面
3、扫码登录后跳转回调页面并携带授权码
:20000/oauth2.0/weibo/success?code =xxxxxxxx
4、在回调接口中,通过授权码,获取access_token,再通过access_token,即可访问微博开启的相关接口
Map map = new HashMap();
map.put("client_id", "2362606657");
map.put("client_secret", "78533622143269d1728d3ae6fdbd8c67");
map.put("grant_type", "authorization_code");
map.put("redirect_uri", "http://auth.gulimall.com:20000 ... 6quot;);
map.put("code", code);
HttpResponse response = HttpUtils.doPost("https://api.weibo.com", "/oauth2/access_token", "post", new HashMap(), null, map);
5、微博授权第三方应用登录时,使用access_token获取微博用户相关信息,进行集成登录,相关代码随意实现
【注意】如果微博社交用户未注册,请先注册并登录;如果已注册,请直接登录
从下图中可以看出,确实是以微博用户登录的。
而在数据库中,确实生成了一条用户记录
相关代码可以参考:gulimall-auth-server下的gulimall-auth-server 查看全部
网站调用新浪微博内容(一条前置工作去微博开放平台上()申请网站接入审核)
一般流程如下

前期工作
去微博开放平台()申请网站访问

审核通过后,App Key 和 App Secret 会分配给你的应用(后面会根据授权码获取 access_token)

填写用户授权成功后的回调地址

1、点击社交登录按钮

社交按钮链接是第三方授权页面

2、跳转到微博授权页面

3、扫码登录后跳转回调页面并携带授权码
:20000/oauth2.0/weibo/success?code =xxxxxxxx
4、在回调接口中,通过授权码,获取access_token,再通过access_token,即可访问微博开启的相关接口
Map map = new HashMap();
map.put("client_id", "2362606657");
map.put("client_secret", "78533622143269d1728d3ae6fdbd8c67");
map.put("grant_type", "authorization_code");
map.put("redirect_uri", "http://auth.gulimall.com:20000 ... 6quot;);
map.put("code", code);
HttpResponse response = HttpUtils.doPost("https://api.weibo.com", "/oauth2/access_token", "post", new HashMap(), null, map);
5、微博授权第三方应用登录时,使用access_token获取微博用户相关信息,进行集成登录,相关代码随意实现
【注意】如果微博社交用户未注册,请先注册并登录;如果已注册,请直接登录
从下图中可以看出,确实是以微博用户登录的。

而在数据库中,确实生成了一条用户记录

相关代码可以参考:gulimall-auth-server下的gulimall-auth-server
网站调用新浪微博内容(【魔兽世界】新浪微博登录常用接口:对应主界面)
网站优化 • 优采云 发表了文章 • 0 个评论 • 65 次浏览 • 2022-01-20 20:11
日志条目
新浪微博登录常用界面:
对应主界面:
不过,我个人推荐使用移动端的微博入口:
对应主界面:
原因是手机上的数据比较轻量级,基础数据齐全,可能会缺少一些基本的个人信息,比如“个人资料完成度”、“个人等级”等。粉丝ID和关注ID只能显示20页,但可以作为大部分验证的语料库。
通过对比下面两张图,分别是PC端和手机端,可以发现内容基本一致:
如下图在手机上,图片比较小,内容也比较简洁。
完整的源代码
下面的代码主要分为三部分:
1.登录微博(用户名、密码) 登录微博
2.VisitPersonPage(user_id) 访问follower网站获取个人信息
3.获取微博内容同时翻页
<p># coding=utf-8
"""
Created on 2016-02-22 @author: Eastmount
功能: 爬取新浪微博用户的信息
信息:用户ID 用户名 粉丝数 关注数 微博数 微博内容
网址:http://weibo.cn/ 数据量更小 相对http://weibo.com/
"""
import time
import re
import os
import sys
import codecs
import shutil
import urllib
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.action_chains import ActionChains
#先调用无界面浏览器PhantomJS或Firefox
#driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")
driver = webdriver.Firefox()
wait = ui.WebDriverWait(driver,10)
#全局变量 文件操作读写信息
inforead = codecs.open("SinaWeibo_List.txt", 'r', 'utf-8')
infofile = codecs.open("SinaWeibo_Info.txt", 'a', 'utf-8')
#********************************************************************************
# 第一步: 登陆weibo.cn 获取新浪微博的cookie
# 该方法针对weibo.cn有效(明文形式传输数据) weibo.com见学弟设置POST和Header方法
# LoginWeibo(username, password) 参数用户名 密码
# 验证码暂停时间手动输入
#********************************************************************************
def LoginWeibo(username, password):
try:
#**********************************************************************
# 直接访问driver.get("http://weibo.cn/5824697471")会跳转到登陆页面 用户id
#
# 用户名
# 密码 "password_4903" 中数字会变动,故采用绝对路径方法,否则不能定位到元素
#
# 勾选记住登录状态check默认是保留 故注释掉该代码 不保留Cookie 则'expiry'=None
#**********************************************************************
#输入用户名/密码登录
print u'准备登陆Weibo.cn网站...'
driver.get("http://login.weibo.cn/login/")
elem_user = driver.find_element_by_name("mobile")
elem_user.send_keys(username) #用户名
elem_pwd = driver.find_element_by_xpath("/html/body/div[2]/form/div/input[2]")
elem_pwd.send_keys(password) #密码
#elem_rem = driver.find_element_by_name("remember")
#elem_rem.click() #记住登录状态
#重点: 暂停时间输入验证码
#pause(millisenconds)
time.sleep(20)
elem_sub = driver.find_element_by_name("submit")
elem_sub.click() #点击登陆
time.sleep(2)
#获取Coockie 推荐 http://www.cnblogs.com/fnng/p/3269450.html
print driver.current_url
print driver.get_cookies() #获得cookie信息 dict存储
print u'输出Cookie键值对信息:'
for cookie in driver.get_cookies():
#print cookie
for key in cookie:
print key, cookie[key]
#driver.get_cookies()类型list 仅包含一个元素cookie类型dict
print u'登陆成功...'
except Exception,e:
print "Error: ",e
finally:
print u'End LoginWeibo!\n\n'
#********************************************************************************
# 第二步: 访问个人页面http://weibo.cn/5824697471并获取信息
# VisitPersonPage()
# 编码常见错误 UnicodeEncodeError: 'ascii' codec can't encode characters
#********************************************************************************
def VisitPersonPage(user_id):
try:
global infofile
print u'准备访问个人网站.....'
#原创内容 http://weibo.cn/guangxianliuya ... e%3D2
driver.get("http://weibo.cn/" + user_id)
#**************************************************************************
# No.1 直接获取 用户昵称 微博数 关注数 粉丝数
# str_name.text是unicode编码类型
#**************************************************************************
#用户id
print u'个人详细信息'
print '**********************************************'
print u'用户id: ' + user_id
#昵称
str_name = driver.find_element_by_xpath("//div[@class='ut']")
str_t = str_name.text.split(" ")
num_name = str_t[0] #空格分隔 获取第一个值 "Eastmount 详细资料 设置 新手区"
print u'昵称: ' + num_name
#微博数 除个人主页 它默认直接显示微博数 无超链接
#Error: 'unicode' object is not callable
#一般是把字符串当做函数使用了 str定义成字符串 而str()函数再次使用时报错
str_wb = driver.find_element_by_xpath("//div[@class='tip2']")
pattern = r"\d+\.?\d*" #正则提取"微博[0]" 但r"(\[.*?\])"总含[]
guid = re.findall(pattern, str_wb.text, re.S|re.M)
print str_wb.text #微博[294] 关注[351] 粉丝[294] 分组[1] @他的
for value in guid:
num_wb = int(value)
break
print u'微博数: ' + str(num_wb)
#关注数
str_gz = driver.find_element_by_xpath("//div[@class='tip2']/a[1]")
guid = re.findall(pattern, str_gz.text, re.M)
num_gz = int(guid[0])
print u'关注数: ' + str(num_gz)
#粉丝数
str_fs = driver.find_element_by_xpath("//div[@class='tip2']/a[2]")
guid = re.findall(pattern, str_fs.text, re.M)
num_fs = int(guid[0])
print u'粉丝数: ' + str(num_fs)
#***************************************************************************
# No.2 文件操作写入信息
#***************************************************************************
infofile.write('=====================================================================\r\n')
infofile.write(u'用户: ' + user_id + '\r\n')
infofile.write(u'昵称: ' + num_name + '\r\n')
infofile.write(u'微博数: ' + str(num_wb) + '\r\n')
infofile.write(u'关注数: ' + str(num_gz) + '\r\n')
infofile.write(u'粉丝数: ' + str(num_fs) + '\r\n')
infofile.write(u'微博内容: ' + '\r\n\r\n')
#***************************************************************************
# No.3 获取微博内容
# http://weibo.cn/guangxianliuya ... e%3D1
# 其中filter=0表示全部 =1表示原创
#***************************************************************************
print '\n'
print u'获取微博内容信息'
num = 1
while num 查看全部
网站调用新浪微博内容(【魔兽世界】新浪微博登录常用接口:对应主界面)
日志条目
新浪微博登录常用界面:
对应主界面:
不过,我个人推荐使用移动端的微博入口:
对应主界面:
原因是手机上的数据比较轻量级,基础数据齐全,可能会缺少一些基本的个人信息,比如“个人资料完成度”、“个人等级”等。粉丝ID和关注ID只能显示20页,但可以作为大部分验证的语料库。
通过对比下面两张图,分别是PC端和手机端,可以发现内容基本一致:
如下图在手机上,图片比较小,内容也比较简洁。
完整的源代码
下面的代码主要分为三部分:
1.登录微博(用户名、密码) 登录微博
2.VisitPersonPage(user_id) 访问follower网站获取个人信息
3.获取微博内容同时翻页
<p># coding=utf-8
"""
Created on 2016-02-22 @author: Eastmount
功能: 爬取新浪微博用户的信息
信息:用户ID 用户名 粉丝数 关注数 微博数 微博内容
网址:http://weibo.cn/ 数据量更小 相对http://weibo.com/
"""
import time
import re
import os
import sys
import codecs
import shutil
import urllib
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.action_chains import ActionChains
#先调用无界面浏览器PhantomJS或Firefox
#driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")
driver = webdriver.Firefox()
wait = ui.WebDriverWait(driver,10)
#全局变量 文件操作读写信息
inforead = codecs.open("SinaWeibo_List.txt", 'r', 'utf-8')
infofile = codecs.open("SinaWeibo_Info.txt", 'a', 'utf-8')
#********************************************************************************
# 第一步: 登陆weibo.cn 获取新浪微博的cookie
# 该方法针对weibo.cn有效(明文形式传输数据) weibo.com见学弟设置POST和Header方法
# LoginWeibo(username, password) 参数用户名 密码
# 验证码暂停时间手动输入
#********************************************************************************
def LoginWeibo(username, password):
try:
#**********************************************************************
# 直接访问driver.get("http://weibo.cn/5824697471")会跳转到登陆页面 用户id
#
# 用户名
# 密码 "password_4903" 中数字会变动,故采用绝对路径方法,否则不能定位到元素
#
# 勾选记住登录状态check默认是保留 故注释掉该代码 不保留Cookie 则'expiry'=None
#**********************************************************************
#输入用户名/密码登录
print u'准备登陆Weibo.cn网站...'
driver.get("http://login.weibo.cn/login/")
elem_user = driver.find_element_by_name("mobile")
elem_user.send_keys(username) #用户名
elem_pwd = driver.find_element_by_xpath("/html/body/div[2]/form/div/input[2]")
elem_pwd.send_keys(password) #密码
#elem_rem = driver.find_element_by_name("remember")
#elem_rem.click() #记住登录状态
#重点: 暂停时间输入验证码
#pause(millisenconds)
time.sleep(20)
elem_sub = driver.find_element_by_name("submit")
elem_sub.click() #点击登陆
time.sleep(2)
#获取Coockie 推荐 http://www.cnblogs.com/fnng/p/3269450.html
print driver.current_url
print driver.get_cookies() #获得cookie信息 dict存储
print u'输出Cookie键值对信息:'
for cookie in driver.get_cookies():
#print cookie
for key in cookie:
print key, cookie[key]
#driver.get_cookies()类型list 仅包含一个元素cookie类型dict
print u'登陆成功...'
except Exception,e:
print "Error: ",e
finally:
print u'End LoginWeibo!\n\n'
#********************************************************************************
# 第二步: 访问个人页面http://weibo.cn/5824697471并获取信息
# VisitPersonPage()
# 编码常见错误 UnicodeEncodeError: 'ascii' codec can't encode characters
#********************************************************************************
def VisitPersonPage(user_id):
try:
global infofile
print u'准备访问个人网站.....'
#原创内容 http://weibo.cn/guangxianliuya ... e%3D2
driver.get("http://weibo.cn/" + user_id)
#**************************************************************************
# No.1 直接获取 用户昵称 微博数 关注数 粉丝数
# str_name.text是unicode编码类型
#**************************************************************************
#用户id
print u'个人详细信息'
print '**********************************************'
print u'用户id: ' + user_id
#昵称
str_name = driver.find_element_by_xpath("//div[@class='ut']")
str_t = str_name.text.split(" ")
num_name = str_t[0] #空格分隔 获取第一个值 "Eastmount 详细资料 设置 新手区"
print u'昵称: ' + num_name
#微博数 除个人主页 它默认直接显示微博数 无超链接
#Error: 'unicode' object is not callable
#一般是把字符串当做函数使用了 str定义成字符串 而str()函数再次使用时报错
str_wb = driver.find_element_by_xpath("//div[@class='tip2']")
pattern = r"\d+\.?\d*" #正则提取"微博[0]" 但r"(\[.*?\])"总含[]
guid = re.findall(pattern, str_wb.text, re.S|re.M)
print str_wb.text #微博[294] 关注[351] 粉丝[294] 分组[1] @他的
for value in guid:
num_wb = int(value)
break
print u'微博数: ' + str(num_wb)
#关注数
str_gz = driver.find_element_by_xpath("//div[@class='tip2']/a[1]")
guid = re.findall(pattern, str_gz.text, re.M)
num_gz = int(guid[0])
print u'关注数: ' + str(num_gz)
#粉丝数
str_fs = driver.find_element_by_xpath("//div[@class='tip2']/a[2]")
guid = re.findall(pattern, str_fs.text, re.M)
num_fs = int(guid[0])
print u'粉丝数: ' + str(num_fs)
#***************************************************************************
# No.2 文件操作写入信息
#***************************************************************************
infofile.write('=====================================================================\r\n')
infofile.write(u'用户: ' + user_id + '\r\n')
infofile.write(u'昵称: ' + num_name + '\r\n')
infofile.write(u'微博数: ' + str(num_wb) + '\r\n')
infofile.write(u'关注数: ' + str(num_gz) + '\r\n')
infofile.write(u'粉丝数: ' + str(num_fs) + '\r\n')
infofile.write(u'微博内容: ' + '\r\n\r\n')
#***************************************************************************
# No.3 获取微博内容
# http://weibo.cn/guangxianliuya ... e%3D1
# 其中filter=0表示全部 =1表示原创
#***************************************************************************
print '\n'
print u'获取微博内容信息'
num = 1
while num
网站调用新浪微博内容(新浪新闻的采集方法,以及为什么要去采集新浪?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 394 次浏览 • 2022-02-12 01:13
现在,无论你是采集站的站长,还是采集的普通站长,采集的来源只有一个,就是新闻来源。今天小编就和大家聊一聊新浪新闻的采集方法,以及为什么要去采集新浪新闻。
首先我们来看看新浪新闻的介绍:新浪新闻可以及时获取全球新闻资讯、国内外新闻、精彩体育赛事报道、财经财经动态、影视娱乐赛事、独家微博“微” ” 新闻,精彩如你所见,新闻、星座、笑话很多。从这个信息我们可以知道,它基本上覆盖了各行各业,所以也适应了各种采集的需求,不管你在哪个站,新浪采集都可以联系到你需要 文章 资源。新浪作为互联网内容的领头羊,在传播、解读、把握新闻特别是专题方面做得很好。正因为新浪最擅长做新闻,所以它的时效性、时效性、权威性、
分析了这么多优势之后,采集新浪新闻的内容怎么办?可能对于大部分新手或者不懂编码技术的站长来说,只能一一复制粘贴。但是这种情况下效率很低,不能同时满足这么多网站的内容更新。那么如何解决这个问题呢?事实上,这很简单。只需要一个技巧就可以完美解决这个问题。我们完全可以用工具代替劳动力。
小编经常使用的一款免费采集工具,功能强大,不仅可以采集新闻来源,还可以微信公众号、知乎、相关咨询等采集 . 对于我们作为一个站来说,它非常实用,不仅功能多,而且好用,而且关键是免费的。提高效率,降低成本,可以说是站长们的福音。
完成采集,步骤很简单,就几个步骤。首先,我们新建一个采集任务,设置任务名称(例如:新闻采集),然后选择我们要采集的数据源,选择新浪新闻。接下来,我们需要为采集到文章找到一个住的地方,选择一个新的空白文件夹,并设置文章的数量关键词采集文章,这取决于你自己的情况。一般小编会选择多导入关键词,一篇关键词采集10篇,最后把关键词或者长尾关键词导入进去没关系。是不是很简单?整个操作过程可以在1分钟内完成。只需点击两次,输入几个字即可完成,与以往复制粘贴的效率形成鲜明对比。
在今天的效率时代,我们必须提高工作效率,才能在众多同行和对手中脱颖而出。今天小编的分享就到这里了。我希望它可以帮助大家。喜欢小编的可以点赞关注。您的喜欢和关注将是我不断的动力。谢谢收看! 查看全部
网站调用新浪微博内容(新浪新闻的采集方法,以及为什么要去采集新浪?)
现在,无论你是采集站的站长,还是采集的普通站长,采集的来源只有一个,就是新闻来源。今天小编就和大家聊一聊新浪新闻的采集方法,以及为什么要去采集新浪新闻。
首先我们来看看新浪新闻的介绍:新浪新闻可以及时获取全球新闻资讯、国内外新闻、精彩体育赛事报道、财经财经动态、影视娱乐赛事、独家微博“微” ” 新闻,精彩如你所见,新闻、星座、笑话很多。从这个信息我们可以知道,它基本上覆盖了各行各业,所以也适应了各种采集的需求,不管你在哪个站,新浪采集都可以联系到你需要 文章 资源。新浪作为互联网内容的领头羊,在传播、解读、把握新闻特别是专题方面做得很好。正因为新浪最擅长做新闻,所以它的时效性、时效性、权威性、
分析了这么多优势之后,采集新浪新闻的内容怎么办?可能对于大部分新手或者不懂编码技术的站长来说,只能一一复制粘贴。但是这种情况下效率很低,不能同时满足这么多网站的内容更新。那么如何解决这个问题呢?事实上,这很简单。只需要一个技巧就可以完美解决这个问题。我们完全可以用工具代替劳动力。

小编经常使用的一款免费采集工具,功能强大,不仅可以采集新闻来源,还可以微信公众号、知乎、相关咨询等采集 . 对于我们作为一个站来说,它非常实用,不仅功能多,而且好用,而且关键是免费的。提高效率,降低成本,可以说是站长们的福音。
完成采集,步骤很简单,就几个步骤。首先,我们新建一个采集任务,设置任务名称(例如:新闻采集),然后选择我们要采集的数据源,选择新浪新闻。接下来,我们需要为采集到文章找到一个住的地方,选择一个新的空白文件夹,并设置文章的数量关键词采集文章,这取决于你自己的情况。一般小编会选择多导入关键词,一篇关键词采集10篇,最后把关键词或者长尾关键词导入进去没关系。是不是很简单?整个操作过程可以在1分钟内完成。只需点击两次,输入几个字即可完成,与以往复制粘贴的效率形成鲜明对比。

在今天的效率时代,我们必须提高工作效率,才能在众多同行和对手中脱颖而出。今天小编的分享就到这里了。我希望它可以帮助大家。喜欢小编的可以点赞关注。您的喜欢和关注将是我不断的动力。谢谢收看!
网站调用新浪微博内容(参看开发文档首页连接微博的规范目录及指导说明书)
网站优化 • 优采云 发表了文章 • 0 个评论 • 72 次浏览 • 2022-02-10 14:08
<p>@1、网站推荐下线:121.2 网站已经被推荐,如果发现以下情况,将下线处理:122、数据分析与支持:13
网站调用新浪微博内容(参看开发文档首页连接微博的规范目录及指导说明书)
<p>@1、网站推荐下线:121.2 网站已经被推荐,如果发现以下情况,将下线处理:122、数据分析与支持:13
网站调用新浪微博内容(单从学习的角度,无论是微博模拟登陆还是抓取并且解析微博数据)
网站优化 • 优采云 发表了文章 • 0 个评论 • 183 次浏览 • 2022-02-10 00:21
单从学习的角度来看,无论是模拟登录微博,还是抓取解析微博数据,难度都远高于一般爬虫。模拟登录的困难已经体验过了。如果登录成功后抓取微博,解析返回的数据,会遇到很多问题。最明显的问题是,你在浏览器中看到的数据可以从网页的源代码中搜索到,但是找不到,因为它的真实数据是经过传递的。
FM.view\((.*)\)
这个正则表达式将它包装起来。
模拟登录,这对一些学生来说应该是困难的。更复杂的是如何全面获取数据。比如微博用户包括很多类别,比如普通用户100505域,作家100305域,企业账号100206域。很多爬虫粗略处理为100505。比如在微博上查看更多评论时,有时你可以下拉获取更多评论数据,有时还可以通过点击“查看更多”来获取更多评论,这也需要非常详细的研究才能获取完整的数据。而it之类的,还有用户首页所有微博的爬取等等,都会有一些坑,需要做很多测试。当然,我说的都是PC端的东西。移动端的登录和解析难度要小得多。当然,它的缺点也很明显,就是信息不全。
所以,重点来了:我开源了一个分布式微博爬虫,目前用户不多,反馈不错。无论你是学习爬虫还是需要微博数据,我想都能帮到你。项目没有使用scrapy-redis,而是使用celery作为任务调度。而且我看到网上分享的几乎所有分布式爬虫都没用过celery!因为他们的爬取任务可能比较简单,所以这个项目的爬取任务比较复杂,几乎涵盖了你能想到的所有微博相关数据的抓取,所以从任务优先级和耗时来看,任务路由是几乎是必须的。这也是我选择celery作为分布式任务调度的一个非常重要的因素。
以下为项目地址:ResolveWang/WeiboSpider
欢迎来到拍砖,小白就项目提出一些问题 查看全部
网站调用新浪微博内容(单从学习的角度,无论是微博模拟登陆还是抓取并且解析微博数据)
单从学习的角度来看,无论是模拟登录微博,还是抓取解析微博数据,难度都远高于一般爬虫。模拟登录的困难已经体验过了。如果登录成功后抓取微博,解析返回的数据,会遇到很多问题。最明显的问题是,你在浏览器中看到的数据可以从网页的源代码中搜索到,但是找不到,因为它的真实数据是经过传递的。
FM.view\((.*)\)
这个正则表达式将它包装起来。
模拟登录,这对一些学生来说应该是困难的。更复杂的是如何全面获取数据。比如微博用户包括很多类别,比如普通用户100505域,作家100305域,企业账号100206域。很多爬虫粗略处理为100505。比如在微博上查看更多评论时,有时你可以下拉获取更多评论数据,有时还可以通过点击“查看更多”来获取更多评论,这也需要非常详细的研究才能获取完整的数据。而it之类的,还有用户首页所有微博的爬取等等,都会有一些坑,需要做很多测试。当然,我说的都是PC端的东西。移动端的登录和解析难度要小得多。当然,它的缺点也很明显,就是信息不全。
所以,重点来了:我开源了一个分布式微博爬虫,目前用户不多,反馈不错。无论你是学习爬虫还是需要微博数据,我想都能帮到你。项目没有使用scrapy-redis,而是使用celery作为任务调度。而且我看到网上分享的几乎所有分布式爬虫都没用过celery!因为他们的爬取任务可能比较简单,所以这个项目的爬取任务比较复杂,几乎涵盖了你能想到的所有微博相关数据的抓取,所以从任务优先级和耗时来看,任务路由是几乎是必须的。这也是我选择celery作为分布式任务调度的一个非常重要的因素。
以下为项目地址:ResolveWang/WeiboSpider
欢迎来到拍砖,小白就项目提出一些问题
网站调用新浪微博内容(新浪微博注册应用的一些注意事项及注意的事项)
网站优化 • 优采云 发表了文章 • 0 个评论 • 67 次浏览 • 2022-02-06 20:08
首先需要下载新浪微博的SDK,地址如下:
下载后解压,然后打开myeclipse,新建一个项目,然后将刚刚解压的文件导入到项目中。如图所示:
接下来,转到此 URL 以注册应用程序。共有三种应用程序,选择站点应用程序,然后创建应用程序。填写所有必填项。确定确认。有两点需要注意:
1.注册应用后会有App Key和App Secret,接下来会用到。
2.进入“我的应用”,选择:应用信息,
点击“编辑”,注意有两个地址:其中,“应用实际地址”要认真填写,我的是,注意地址后面不要有“/”。现在,记住这个地址,你以后会用到它。
现在,进入myeclipse,在src下,有config.properties文件,编辑一下
client_ID 是 App 密钥。
client_SERCRET 是 App Secret
redirect_URI 是前面突出显示的地址:
保存。
接下来,我们发送一条推文:
在examples下,weibo4j.examples.oauth2包下:OAuth4Code类,直接运行:会出现应用授权页面。输入用户名和密码后,会跳转到之前填写的redirect_URI页面。如果微博信息保存在浏览器中,会直接跳转到redirect_URI页面,不经过这个页面。
跳转到redirect_URI页面后,看到URL地址栏,格式是redirect_URI?代码=xxxxxx。接下来复制代码的值,然后到myeclipse的控制台输出看看:
code=https://api.weibo.com/oauth2/a ... Dcode
Hit enter when it's done.[Enter]:
接下来,将代码粘贴到 [Enter]: 之后。进入。你会看到很多输出信息。
直接跳到最后,看access_token,这是我们需要的,记录一下。
接下来发微博:
在weibo4j.examples.timeline包下,UpdateStatus类下/
我需要传入两个参数,所以我直接写了。代码显示如下:
packageweibo4j.examples.timeline;
importweibo4j.Timeline;
importweibo4j.Weibo;
importweibo4j.examples.oauth2.Log;
importweibo4j.model.Status;
importweibo4j.model.WeiboException;
publicclassUpdateStatus {
publicstaticvoidmain(String[] args) {
String access_token = "2.00lBvA1CxikhaBfbc0d2a0c10FWttI";
String statuses = "此条微博来自星光发布系统发布";
Weibo weibo = newWeibo();
weibo.setToken(access_token);
Timeline tm = newTimeline();
try{
Status status = tm.UpdateStatus(statuses);
Log.logInfo(status.toString());
} catch(WeiboException e) {
e.printStackTrace();
} }
}
package weibo4j.examples.timeline;
import weibo4j.Timeline;
import weibo4j.Weibo;
import weibo4j.examples.oauth2.Log;
import weibo4j.model.Status;
import weibo4j.model.WeiboException;
public class UpdateStatus {
public static void main(String[] args) {
String access_token = "2.00lBvA1CxikhaBfbc0d2a0c10FWttI";
String statuses = "此条微博来自星光发布系统发布";
Weibo weibo = new Weibo();
weibo.setToken(access_token);
Timeline tm = new Timeline();
try {
Status status = tm.UpdateStatus(statuses);
Log.logInfo(status.toString());
} catch (WeiboException e) {
e.printStackTrace();
} }
}
statuses 是您要发布的内容。
这时候就可以发微博了。
有问题的留言。!
随附的:
有时,比如在使用另一个微博账号(即与注册应用不同的账号)时,会出现一些错误。错误信息:
{"error":"applications over the unaudited use restrictions!","error_code":21321,"request":"/2/statuses/update.json"}
eibo4j.model.WeiboException: 403:The request is understood, but it has been refused. An accompanying error message will explain why.
error:applications over the unaudited use restrictions! error_code:21321/2/statuses/update.json
at weibo4j.http.HttpClient.httpRequest(HttpClient.java:414)
at weibo4j.http.HttpClient.httpRequest(HttpClient.java:372)
at weibo4j.http.HttpClient.post(HttpClient.java:301)
at weibo4j.http.HttpClient.post(HttpClient.java:286)
at weibo4j.Timeline.UpdateStatus(Timeline.java:708)
at weibo4j.examples.timeline.UpdateStatus.main(UpdateStatus.java:18)
{"error":"applications over the unaudited use restrictions!","error_code":21321,"request":"/2/statuses/update.json"}
weibo4j.model.WeiboException: 403:The request is understood, but it has been refused. An accompanying error message will explain why.
error:applications over the unaudited use restrictions! error_code:21321/2/statuses/update.json
at weibo4j.http.HttpClient.httpRequest(HttpClient.java:414)
at weibo4j.http.HttpClient.httpRequest(HttpClient.java:372)
at weibo4j.http.HttpClient.post(HttpClient.java:301)
at weibo4j.http.HttpClient.post(HttpClient.java:286)
at weibo4j.Timeline.UpdateStatus(Timeline.java:708)
at weibo4j.examples.timeline.UpdateStatus.main(UpdateStatus.java:18)
解决方法:还是在我的app里,点击“应用信息”,“测试账号”,看到有添加了一个测试账号。这时候可以添加你想发微博的账号的用户昵称,就OK了。 查看全部
网站调用新浪微博内容(新浪微博注册应用的一些注意事项及注意的事项)
首先需要下载新浪微博的SDK,地址如下:
下载后解压,然后打开myeclipse,新建一个项目,然后将刚刚解压的文件导入到项目中。如图所示:

接下来,转到此 URL 以注册应用程序。共有三种应用程序,选择站点应用程序,然后创建应用程序。填写所有必填项。确定确认。有两点需要注意:
1.注册应用后会有App Key和App Secret,接下来会用到。
2.进入“我的应用”,选择:应用信息,
点击“编辑”,注意有两个地址:其中,“应用实际地址”要认真填写,我的是,注意地址后面不要有“/”。现在,记住这个地址,你以后会用到它。
现在,进入myeclipse,在src下,有config.properties文件,编辑一下
client_ID 是 App 密钥。
client_SERCRET 是 App Secret
redirect_URI 是前面突出显示的地址:
保存。
接下来,我们发送一条推文:
在examples下,weibo4j.examples.oauth2包下:OAuth4Code类,直接运行:会出现应用授权页面。输入用户名和密码后,会跳转到之前填写的redirect_URI页面。如果微博信息保存在浏览器中,会直接跳转到redirect_URI页面,不经过这个页面。
跳转到redirect_URI页面后,看到URL地址栏,格式是redirect_URI?代码=xxxxxx。接下来复制代码的值,然后到myeclipse的控制台输出看看:
code=https://api.weibo.com/oauth2/a ... Dcode
Hit enter when it's done.[Enter]:
接下来,将代码粘贴到 [Enter]: 之后。进入。你会看到很多输出信息。
直接跳到最后,看access_token,这是我们需要的,记录一下。
接下来发微博:
在weibo4j.examples.timeline包下,UpdateStatus类下/
我需要传入两个参数,所以我直接写了。代码显示如下:
packageweibo4j.examples.timeline;
importweibo4j.Timeline;
importweibo4j.Weibo;
importweibo4j.examples.oauth2.Log;
importweibo4j.model.Status;
importweibo4j.model.WeiboException;
publicclassUpdateStatus {
publicstaticvoidmain(String[] args) {
String access_token = "2.00lBvA1CxikhaBfbc0d2a0c10FWttI";
String statuses = "此条微博来自星光发布系统发布";
Weibo weibo = newWeibo();
weibo.setToken(access_token);
Timeline tm = newTimeline();
try{
Status status = tm.UpdateStatus(statuses);
Log.logInfo(status.toString());
} catch(WeiboException e) {
e.printStackTrace();
} }
}
package weibo4j.examples.timeline;
import weibo4j.Timeline;
import weibo4j.Weibo;
import weibo4j.examples.oauth2.Log;
import weibo4j.model.Status;
import weibo4j.model.WeiboException;
public class UpdateStatus {
public static void main(String[] args) {
String access_token = "2.00lBvA1CxikhaBfbc0d2a0c10FWttI";
String statuses = "此条微博来自星光发布系统发布";
Weibo weibo = new Weibo();
weibo.setToken(access_token);
Timeline tm = new Timeline();
try {
Status status = tm.UpdateStatus(statuses);
Log.logInfo(status.toString());
} catch (WeiboException e) {
e.printStackTrace();
} }
}
statuses 是您要发布的内容。
这时候就可以发微博了。
有问题的留言。!
随附的:
有时,比如在使用另一个微博账号(即与注册应用不同的账号)时,会出现一些错误。错误信息:
{"error":"applications over the unaudited use restrictions!","error_code":21321,"request":"/2/statuses/update.json"}
eibo4j.model.WeiboException: 403:The request is understood, but it has been refused. An accompanying error message will explain why.
error:applications over the unaudited use restrictions! error_code:21321/2/statuses/update.json
at weibo4j.http.HttpClient.httpRequest(HttpClient.java:414)
at weibo4j.http.HttpClient.httpRequest(HttpClient.java:372)
at weibo4j.http.HttpClient.post(HttpClient.java:301)
at weibo4j.http.HttpClient.post(HttpClient.java:286)
at weibo4j.Timeline.UpdateStatus(Timeline.java:708)
at weibo4j.examples.timeline.UpdateStatus.main(UpdateStatus.java:18)
{"error":"applications over the unaudited use restrictions!","error_code":21321,"request":"/2/statuses/update.json"}
weibo4j.model.WeiboException: 403:The request is understood, but it has been refused. An accompanying error message will explain why.
error:applications over the unaudited use restrictions! error_code:21321/2/statuses/update.json
at weibo4j.http.HttpClient.httpRequest(HttpClient.java:414)
at weibo4j.http.HttpClient.httpRequest(HttpClient.java:372)
at weibo4j.http.HttpClient.post(HttpClient.java:301)
at weibo4j.http.HttpClient.post(HttpClient.java:286)
at weibo4j.Timeline.UpdateStatus(Timeline.java:708)
at weibo4j.examples.timeline.UpdateStatus.main(UpdateStatus.java:18)
解决方法:还是在我的app里,点击“应用信息”,“测试账号”,看到有添加了一个测试账号。这时候可以添加你想发微博的账号的用户昵称,就OK了。
网站调用新浪微博内容(第二篇:新浪微博PC客户端(DotNetWinForm版)——功能实现分解介绍)
网站优化 • 优采云 发表了文章 • 0 个评论 • 43 次浏览 • 2022-02-06 20:06
第二部分:新浪微博PC客户端(DotNet WinForm版)——功能实现介绍
C#源代码下载
最近有兴趣尝试用DotNet技术实现新浪微博PC客户端。几天时间,实现了登录、微博列表、发布纯文本微博的功能。新浪API调用基本不难。以微博列表处理的形式,着实让我烦了一阵子。Windows Form 用的不多,这个开发感觉有些捉襟见肘。
环境:
操作系统:Windows 7 Ultimate
集成开发环境:Visual Studio 2010 Ultimate
.NET 框架:3.5
先看一下截图:
1、登录界面
2、 登录
3、第一次加载主界面
4、主页
5、翻页
6、如果博文中有图,点击小图查看大图
新浪微博API返回的数据有两种:XML和JSON。登录时,我直接将DataSet读取的XML数据存储在一个静态的用户信息类中;对于博客列表数据,我读取 JSON 格式的数据,并将 JSON 格式的数据反序列化为通用对象(类)集合,其中类是嵌套类。
然后画一个列表,显示数据的控件都是动态添加的。这里最烦人的是位置,这可能是每页20条数据加载慢的原因(界面默认每页返回20条),最快2秒。,经常需要4-6秒,后面提供下载,大家可以试试。此外,影响速度的原因可能包括:1)网速;2)输出图片,有的直接输出大图。如果回复源微博中有图片,则无法始终获取缩略图。,我们要依次判断小图、中图和大图,先到先输出。Label显示的文字的行距是不能调整的,所以我要做一个自定义控件,
界面虽然使用了skin(ssk),比Window Form原来的界面好看很多,但是和Adobe的AIR相比还是有差距的。也许您可以尝试使用WPF。
未来要实现的功能(没有看到所有的API,有些功能可能不一定提供API): 查看全部
网站调用新浪微博内容(第二篇:新浪微博PC客户端(DotNetWinForm版)——功能实现分解介绍)
第二部分:新浪微博PC客户端(DotNet WinForm版)——功能实现介绍
C#源代码下载
最近有兴趣尝试用DotNet技术实现新浪微博PC客户端。几天时间,实现了登录、微博列表、发布纯文本微博的功能。新浪API调用基本不难。以微博列表处理的形式,着实让我烦了一阵子。Windows Form 用的不多,这个开发感觉有些捉襟见肘。
环境:
操作系统:Windows 7 Ultimate
集成开发环境:Visual Studio 2010 Ultimate
.NET 框架:3.5
先看一下截图:
1、登录界面

2、 登录
3、第一次加载主界面

4、主页

5、翻页

6、如果博文中有图,点击小图查看大图
新浪微博API返回的数据有两种:XML和JSON。登录时,我直接将DataSet读取的XML数据存储在一个静态的用户信息类中;对于博客列表数据,我读取 JSON 格式的数据,并将 JSON 格式的数据反序列化为通用对象(类)集合,其中类是嵌套类。
然后画一个列表,显示数据的控件都是动态添加的。这里最烦人的是位置,这可能是每页20条数据加载慢的原因(界面默认每页返回20条),最快2秒。,经常需要4-6秒,后面提供下载,大家可以试试。此外,影响速度的原因可能包括:1)网速;2)输出图片,有的直接输出大图。如果回复源微博中有图片,则无法始终获取缩略图。,我们要依次判断小图、中图和大图,先到先输出。Label显示的文字的行距是不能调整的,所以我要做一个自定义控件,
界面虽然使用了skin(ssk),比Window Form原来的界面好看很多,但是和Adobe的AIR相比还是有差距的。也许您可以尝试使用WPF。
未来要实现的功能(没有看到所有的API,有些功能可能不一定提供API):
网站调用新浪微博内容(CSDN李毅的博客《给CSDN博客加上height腾讯微博》)
网站优化 • 优采云 发表了文章 • 0 个评论 • 69 次浏览 • 2022-02-05 12:21
CSDN的博客确实乏善可陈,音视频,Flash不能放,HTML不能加,博客布局模块不能自定义。我想同步更新我的新浪博客的内容并显示在博客上。花了很长时间才找到满意的解决方案。方法。最后参考Iijse李毅的博客《将腾讯微博加入CSDN博客》,通过自定义CSS,将新浪微博最新的微博以图片的形式显示在博客页面的顶部。
实现如下:
1、在新浪微博页面,点击右上角“工具”,然后选择“签名文件”,目的选择“图片”,复制“获取代码”中的图片地址。
2、 打开“配置”进入CSDN博客的“显示设置”页面,在“自定义CSS样式”栏中复制如下代码:
/* 添加新浪微博 */
/* 基本原理:将微博图片绑定到博客页面的搜索栏显示 */
#csdnblog_header ul#personalnav { top:0; }
/* 格式化搜索栏 */
#csdnblog_header ul#blogsearchsty {
边距顶部:-102px;/* 这里可以调整搜索栏和微博图片的垂直位置*/
位置:相对;
文本缩进:-9999px;
z 指数:9999
}
#csdnblog_header ul#blogsearchsty li.selectsty+li {
/* 替换下面url中你的微博签名文件图片,支持新浪、腾讯、搜狐等微博*/
背景:url() 不重复中心底部;
显示:块;
高度:100px;
位置:绝对;
右:0px;/* 这里调整微博图片的水平位置*/
文本对齐:右;
宽度:380 像素;
}
#csdnblog_header ul#blogsearchsty li.selectsty+li input { display:none; }
OK,有兴趣的朋友不妨试试,如果有更好的方法,请告诉我O(∩_∩)O~ 查看全部
网站调用新浪微博内容(CSDN李毅的博客《给CSDN博客加上height腾讯微博》)
CSDN的博客确实乏善可陈,音视频,Flash不能放,HTML不能加,博客布局模块不能自定义。我想同步更新我的新浪博客的内容并显示在博客上。花了很长时间才找到满意的解决方案。方法。最后参考Iijse李毅的博客《将腾讯微博加入CSDN博客》,通过自定义CSS,将新浪微博最新的微博以图片的形式显示在博客页面的顶部。

实现如下:
1、在新浪微博页面,点击右上角“工具”,然后选择“签名文件”,目的选择“图片”,复制“获取代码”中的图片地址。

2、 打开“配置”进入CSDN博客的“显示设置”页面,在“自定义CSS样式”栏中复制如下代码:
/* 添加新浪微博 */
/* 基本原理:将微博图片绑定到博客页面的搜索栏显示 */
#csdnblog_header ul#personalnav { top:0; }
/* 格式化搜索栏 */
#csdnblog_header ul#blogsearchsty {
边距顶部:-102px;/* 这里可以调整搜索栏和微博图片的垂直位置*/
位置:相对;
文本缩进:-9999px;
z 指数:9999
}
#csdnblog_header ul#blogsearchsty li.selectsty+li {
/* 替换下面url中你的微博签名文件图片,支持新浪、腾讯、搜狐等微博*/
背景:url() 不重复中心底部;
显示:块;
高度:100px;
位置:绝对;
右:0px;/* 这里调整微博图片的水平位置*/
文本对齐:右;
宽度:380 像素;
}
#csdnblog_header ul#blogsearchsty li.selectsty+li input { display:none; }

OK,有兴趣的朋友不妨试试,如果有更好的方法,请告诉我O(∩_∩)O~
网站调用新浪微博内容(新浪微博的用户接口和话题接口实现了(组图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 82 次浏览 • 2022-02-04 19:19
如标题,调用新浪微博用户界面和话题界面,搜索新浪微博用户及关键词相关内容:
选择一个搜索昵称:
返回搜索昵称结果:
选择搜索微博内容:
返回微博搜索结果:
但内容超过屏幕长度,向下滚动条显示剩余内容:
使用的插件有:kendoUI.js 来操作UI和添加特效幻灯片到界面切换。 jscex.js实习生异步加载数据,绑定搜索id和搜索微博按钮2个响应函数。还是用jQuery的ajax调用新浪微博加载相应的api数据。
在这次练习中遇到的问题并不罕见。一开始是因为对kendoUI的不熟悉而带来的麻烦。在 kendoUI 中,所有页面内容都放在同一个页面上,但每个页面都通过 data-role="view" 进行区分。默认主页显示第一个收录属性 data- div with role="view";
接下来是api调用的跨域问题,本来打算用jsonp数据格式解决的,但是据说jscex可以解决这个问题。回头看,发现jecex.js好像也有jsonp格式的。
看完jscex的样例,感觉好强大。但是这一次它只是用来定义异步方法,$await(), $start() 来使用异步方法。以下是点击搜索昵称按钮的一系列动作的代码:
其实还有一个问题没有解决:在遍历返回的数据时,如果去掉if(index)判断语句,结果总会返回一个“undefined”。调试后发现underfined对应的index其实是code,没错。结果对应的索引是data。实在没有办法,只能用这个判断。希望以后能找到原因。 查看全部
网站调用新浪微博内容(新浪微博的用户接口和话题接口实现了(组图))
如标题,调用新浪微博用户界面和话题界面,搜索新浪微博用户及关键词相关内容:

选择一个搜索昵称:

返回搜索昵称结果:

选择搜索微博内容:

返回微博搜索结果:

但内容超过屏幕长度,向下滚动条显示剩余内容:

使用的插件有:kendoUI.js 来操作UI和添加特效幻灯片到界面切换。 jscex.js实习生异步加载数据,绑定搜索id和搜索微博按钮2个响应函数。还是用jQuery的ajax调用新浪微博加载相应的api数据。
在这次练习中遇到的问题并不罕见。一开始是因为对kendoUI的不熟悉而带来的麻烦。在 kendoUI 中,所有页面内容都放在同一个页面上,但每个页面都通过 data-role="view" 进行区分。默认主页显示第一个收录属性 data- div with role="view";
接下来是api调用的跨域问题,本来打算用jsonp数据格式解决的,但是据说jscex可以解决这个问题。回头看,发现jecex.js好像也有jsonp格式的。
看完jscex的样例,感觉好强大。但是这一次它只是用来定义异步方法,$await(), $start() 来使用异步方法。以下是点击搜索昵称按钮的一系列动作的代码:

其实还有一个问题没有解决:在遍历返回的数据时,如果去掉if(index)判断语句,结果总会返回一个“undefined”。调试后发现underfined对应的index其实是code,没错。结果对应的索引是data。实在没有办法,只能用这个判断。希望以后能找到原因。
网站调用新浪微博内容(Python初学Python必备官方教程(1)(附PythonTutorial))
网站优化 • 优采云 发表了文章 • 0 个评论 • 48 次浏览 • 2022-02-04 18:15
阿里云 > 云栖社区 > 主题图 > P > Python调用新浪微博API实践
推荐活动:
更多优惠>
当前话题: Python调用新浪微博api实践 加入采集
相关话题:
Python调用新浪微博api实践相关博客看更多博文
Python应用与实践【转】
作者:sky-heaven1726 人浏览评论:05年前
来自:目录 1.什么是 Python?1.1.Python 语言1.2.Python 哲学2.
阅读全文
Python 资源
作者:方北工作室 4477 浏览评论:05年前
Python教程(Python中文翻译版2.7.11)。Python教程是初学者学习Python必备的官方教程。本教程适用于Python2.< @k33@ > Series X. 在线阅读 » Fork Me » Python
阅读全文
Python爬虫框架-PySpider
作者:shadowcat7965 浏览人数评论:04年前
From: From: PySpider PySpider github地址PySpider官方文档PySpi
阅读全文
大公司都有哪些开源项目~~~阿里、百度、腾讯、360、新浪、网易、小米等
作者:xumaojun3896人浏览评论:03年前
红色字体现阶段比较流行------------------------------------------ --- ------------------------------------------------------------ -----------奇虎36
阅读全文
程序员的技术练级策略
作者:马哥 Linux2163 浏览评论:02年前
月光博客 6 月 12 日发表《给新手程序员的一封信》,翻译自《一封给那些想开始编程的人的公开信》,我的朋友(他在这个网站上的 id 是 Mailper)告诉我,他想看更多Cool Shell 上可操作的 文章
阅读全文
开发者干货合集!阿里巴巴开源、移动开发、机器学习等海量资源限时开放!
作者:阿里云活动秘书6535查看评论:22年前
2019阿里云Hi购物季已于2月25日正式开启。从公开活动页面来看,活动分为三个阶段:活动报名阶段2月25日至3月04日,3月04日3月16日至3月16日,新购返利+抢购阶段50%,以及3月16日至3月31日期间,续费抽奖+50%的抢购阶段。活动核心亮点:作为
阅读全文
开发者必看!探索阿里云大购季开发者分支:0元起海量学习资源!
作者:阿里云活动秘书 13543 浏览评论:42年前
2019阿里云Hi购物季已于2月25日正式开启。从公开活动页面来看,活动分为三个阶段:活动报名阶段2月25日至3月04日,3月04日3月16日至3月16日,新购返利+抢购阶段50%,以及3月16日至3月31日期间,续费抽奖+50%的抢购阶段。活动核心亮点:作为
阅读全文
DockOne微信分享(一四三):FreeWheel基于Kubernetes容器云建设与实践:应用编排与服务质量保障
作者:猫范先生 2161 浏览评论:04年前
本文为DockOne微信分享(14三):FreeWheel基于Kubernetes容器云的构建与实践:应用编排与服务质量保障【编者的话】随着公司业务的不断发展,逐步向微服务转型,我们借助 Kubernetes 容器化解决方案标准化和简化应用发布的整个过程,
阅读全文 查看全部
网站调用新浪微博内容(Python初学Python必备官方教程(1)(附PythonTutorial))
阿里云 > 云栖社区 > 主题图 > P > Python调用新浪微博API实践

推荐活动:
更多优惠>
当前话题: Python调用新浪微博api实践 加入采集
相关话题:
Python调用新浪微博api实践相关博客看更多博文
Python应用与实践【转】


作者:sky-heaven1726 人浏览评论:05年前
来自:目录 1.什么是 Python?1.1.Python 语言1.2.Python 哲学2.
阅读全文
Python 资源


作者:方北工作室 4477 浏览评论:05年前
Python教程(Python中文翻译版2.7.11)。Python教程是初学者学习Python必备的官方教程。本教程适用于Python2.< @k33@ > Series X. 在线阅读 » Fork Me » Python
阅读全文
Python爬虫框架-PySpider


作者:shadowcat7965 浏览人数评论:04年前
From: From: PySpider PySpider github地址PySpider官方文档PySpi
阅读全文
大公司都有哪些开源项目~~~阿里、百度、腾讯、360、新浪、网易、小米等


作者:xumaojun3896人浏览评论:03年前
红色字体现阶段比较流行------------------------------------------ --- ------------------------------------------------------------ -----------奇虎36
阅读全文
程序员的技术练级策略


作者:马哥 Linux2163 浏览评论:02年前
月光博客 6 月 12 日发表《给新手程序员的一封信》,翻译自《一封给那些想开始编程的人的公开信》,我的朋友(他在这个网站上的 id 是 Mailper)告诉我,他想看更多Cool Shell 上可操作的 文章
阅读全文
开发者干货合集!阿里巴巴开源、移动开发、机器学习等海量资源限时开放!


作者:阿里云活动秘书6535查看评论:22年前
2019阿里云Hi购物季已于2月25日正式开启。从公开活动页面来看,活动分为三个阶段:活动报名阶段2月25日至3月04日,3月04日3月16日至3月16日,新购返利+抢购阶段50%,以及3月16日至3月31日期间,续费抽奖+50%的抢购阶段。活动核心亮点:作为
阅读全文
开发者必看!探索阿里云大购季开发者分支:0元起海量学习资源!


作者:阿里云活动秘书 13543 浏览评论:42年前
2019阿里云Hi购物季已于2月25日正式开启。从公开活动页面来看,活动分为三个阶段:活动报名阶段2月25日至3月04日,3月04日3月16日至3月16日,新购返利+抢购阶段50%,以及3月16日至3月31日期间,续费抽奖+50%的抢购阶段。活动核心亮点:作为
阅读全文
DockOne微信分享(一四三):FreeWheel基于Kubernetes容器云建设与实践:应用编排与服务质量保障


作者:猫范先生 2161 浏览评论:04年前
本文为DockOne微信分享(14三):FreeWheel基于Kubernetes容器云的构建与实践:应用编排与服务质量保障【编者的话】随着公司业务的不断发展,逐步向微服务转型,我们借助 Kubernetes 容器化解决方案标准化和简化应用发布的整个过程,
阅读全文
网站调用新浪微博内容(试试用python调用微博API的方法微博 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 62 次浏览 • 2022-02-03 06:18
)
因为最近碰到一个调用新浪微博开放接口的项目,想试试用python调用微博API。
SDK下载地址:代码不超过十几K,完全可以理解。
如果你有微博账号,可以新建一个APP,然后获取APP获取OAuth2.0授权所需要的app key和app secret。
要了解 OAuth2,您可以查看链接到新浪微博的说明。OAuth2授权参数除了app key和app secret外,还需要网站回调地址redirect_uri,并且这个回调地址不允许在局域网内(神马localhost,127.0.0.@ >1 好像不行),这真的让我焦急了很久。我没有使用 API 调用 网站,所以我检查了很多。我看到有人写我可以用这个地址代替,我试过了,它奏效了。对潘克的无礼深表歉意。
这里有一个简单的程序来体验:
设置以下参数
import sys
import weibo
import webbrowser
APP_KEY = ''
MY_APP_SECRET = ''
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html'
获取微博授权网址,如第2行,用默认浏览器打开后,会提示登录微博,使用需要授权的账号登录,如下图
api = weibo.APIClient(app_key=APP_KEY,app_secret=MY_APP_SECRET,redirect_uri=REDIRECT_URL)
authorize_url = api.get_authorize_url()
print(authorize_url)
webbrowser.open_new(authorize_url)
登录后,您将被重定向到一个连接
关键是码值,是认证的关键。手动输入码值模拟认证
request = api.request_access_token(code, REDIRECT_URL)
access_token = request.access_token
expires_in = request.expires_in
api.set_access_token(access_token, expires_in)
api.statuses.update.post(status=u'Test OAuth 2.0 Send a Weibo!')
access_token为获取到的token,expires_in为授权过期时间(UNIX时间)
使用 set_access_token 保存授权。往下走,就可以调用微博界面了。测试发了一条推文
但是,这种手动输入代码的方式并不适合调用程序。是否可以在不打开链接的情况下请求登录并获得授权?经过多方搜索参考,程序改进如下,可以自动获取代码并保存,方便程序服务调用。
accessWeibo
# -*- coding: utf-8 -*-
#/usr/bin/env python
#access to SinaWeibo By sinaweibopy
#实现微博自动登录,token自动生成,保存及更新
#适合于后端服务调用
from weibo import APIClient
import pymongo
import sys, os, urllib, urllib2
from http_helper import *
from retry import *
try:
import json
except ImportError:
import simplejson as json
# setting sys encoding to utf-8
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
# weibo api访问配置
APP_KEY = '' # app key
APP_SECRET = '' # app secret
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html' # callback url 授权回调页,与OAuth2.0 授权设置的一致
USERID = '' # 登陆的微博用户名,必须是OAuth2.0 设置的测试账号
USERPASSWD = '' # 用户密码
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=REDIRECT_URL)
def make_access_token():
#请求access token
params = urllib.urlencode({
'action':'submit',
'withOfficalFlag':'0',
'ticket':'',
'isLoginSina':'',
'response_type':'code',
'regCallback':'',
'redirect_uri':REDIRECT_URL,
'client_id':APP_KEY,
'state':'',
'from':'',
'userId':USERID,
'passwd':USERPASSWD,
})
login_url = 'https://api.weibo.com/oauth2/authorize'
url = client.get_authorize_url()
content = urllib2.urlopen(url)
if content:
headers = { 'Referer' : url }
request = urllib2.Request(login_url, params, headers)
opener = get_opener(False)
urllib2.install_opener(opener)
try:
f = opener.open(request)
return_redirect_uri = f.url
except urllib2.HTTPError, e:
return_redirect_uri = e.geturl()
# 取到返回的code
code = return_redirect_uri.split('=')[1]
#得到token
token = client.request_access_token(code,REDIRECT_URL)
save_access_token(token)
def save_access_token(token):
#将access token保存到MongoDB数据库
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
t={
"access_token":token['access_token'],
"expires_in":str(token['expires_in']),
"date":time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
}
db.token.insert(t,safe=True)
#Decorator 目的是当调用make_access_token()后再执行一次apply_access_token()
@retry(1)
def apply_access_token():
#从MongoDB读取及设置access token
try:
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
if db.token.count()>0:
tokenInfos=db.token.find().sort([("_id",pymongo.DESCENDING)]).limit(1)
else:
make_access_token()
return False
for tokenInfo in tokenInfos:
access_token=tokenInfo["access_token"]
expires_in=tokenInfo["expires_in"]
try:
client.set_access_token(access_token, expires_in)
except StandardError, e:
if hasattr(e, 'error'):
if e.error == 'expired_token':
# token过期重新生成
make_access_token()
return False
else:
pass
except:
make_access_token()
return False
return True
if __name__ == "__main__":
apply_access_token()
# 以下为访问微博api的应用逻辑
# 以发布文字微博接口为例
client.statuses.update.post(status='Test OAuth 2.0 Send a Weibo!')
retry.py
import math
import time
# Retry decorator with exponential backoff
def retry(tries, delay=1, backoff=2):
"""Retries a function or method until it returns True.
delay sets the initial delay, and backoff sets how much the delay should
lengthen after each failure. backoff must be greater than 1, or else it
isn't really a backoff. tries must be at least 0, and delay greater than
0."""
if backoff decorated function
return deco_retry # @retry(arg[, ...]) -> true decorator
http_helper.py
# -*- coding: utf-8 -*-
#/usr/bin/env python
import urllib2,cookielib
class SmartRedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_301(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_301(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def http_error_302(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_302(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def get_cookie():
cookies = cookielib.CookieJar()
return urllib2.HTTPCookieProcessor(cookies)
def get_opener(proxy=False):
rv=urllib2.build_opener(get_cookie(), SmartRedirectHandler())
rv.addheaders = [('User-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)')]
return rv 查看全部
网站调用新浪微博内容(试试用python调用微博API的方法微博
)
因为最近碰到一个调用新浪微博开放接口的项目,想试试用python调用微博API。
SDK下载地址:代码不超过十几K,完全可以理解。
如果你有微博账号,可以新建一个APP,然后获取APP获取OAuth2.0授权所需要的app key和app secret。
要了解 OAuth2,您可以查看链接到新浪微博的说明。OAuth2授权参数除了app key和app secret外,还需要网站回调地址redirect_uri,并且这个回调地址不允许在局域网内(神马localhost,127.0.0.@ >1 好像不行),这真的让我焦急了很久。我没有使用 API 调用 网站,所以我检查了很多。我看到有人写我可以用这个地址代替,我试过了,它奏效了。对潘克的无礼深表歉意。
这里有一个简单的程序来体验:
设置以下参数
import sys
import weibo
import webbrowser
APP_KEY = ''
MY_APP_SECRET = ''
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html'
获取微博授权网址,如第2行,用默认浏览器打开后,会提示登录微博,使用需要授权的账号登录,如下图
api = weibo.APIClient(app_key=APP_KEY,app_secret=MY_APP_SECRET,redirect_uri=REDIRECT_URL)
authorize_url = api.get_authorize_url()
print(authorize_url)
webbrowser.open_new(authorize_url)

登录后,您将被重定向到一个连接
关键是码值,是认证的关键。手动输入码值模拟认证
request = api.request_access_token(code, REDIRECT_URL)
access_token = request.access_token
expires_in = request.expires_in
api.set_access_token(access_token, expires_in)
api.statuses.update.post(status=u'Test OAuth 2.0 Send a Weibo!')
access_token为获取到的token,expires_in为授权过期时间(UNIX时间)
使用 set_access_token 保存授权。往下走,就可以调用微博界面了。测试发了一条推文

但是,这种手动输入代码的方式并不适合调用程序。是否可以在不打开链接的情况下请求登录并获得授权?经过多方搜索参考,程序改进如下,可以自动获取代码并保存,方便程序服务调用。
accessWeibo
# -*- coding: utf-8 -*-
#/usr/bin/env python
#access to SinaWeibo By sinaweibopy
#实现微博自动登录,token自动生成,保存及更新
#适合于后端服务调用
from weibo import APIClient
import pymongo
import sys, os, urllib, urllib2
from http_helper import *
from retry import *
try:
import json
except ImportError:
import simplejson as json
# setting sys encoding to utf-8
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
# weibo api访问配置
APP_KEY = '' # app key
APP_SECRET = '' # app secret
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html' # callback url 授权回调页,与OAuth2.0 授权设置的一致
USERID = '' # 登陆的微博用户名,必须是OAuth2.0 设置的测试账号
USERPASSWD = '' # 用户密码
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=REDIRECT_URL)
def make_access_token():
#请求access token
params = urllib.urlencode({
'action':'submit',
'withOfficalFlag':'0',
'ticket':'',
'isLoginSina':'',
'response_type':'code',
'regCallback':'',
'redirect_uri':REDIRECT_URL,
'client_id':APP_KEY,
'state':'',
'from':'',
'userId':USERID,
'passwd':USERPASSWD,
})
login_url = 'https://api.weibo.com/oauth2/authorize'
url = client.get_authorize_url()
content = urllib2.urlopen(url)
if content:
headers = { 'Referer' : url }
request = urllib2.Request(login_url, params, headers)
opener = get_opener(False)
urllib2.install_opener(opener)
try:
f = opener.open(request)
return_redirect_uri = f.url
except urllib2.HTTPError, e:
return_redirect_uri = e.geturl()
# 取到返回的code
code = return_redirect_uri.split('=')[1]
#得到token
token = client.request_access_token(code,REDIRECT_URL)
save_access_token(token)
def save_access_token(token):
#将access token保存到MongoDB数据库
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
t={
"access_token":token['access_token'],
"expires_in":str(token['expires_in']),
"date":time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
}
db.token.insert(t,safe=True)
#Decorator 目的是当调用make_access_token()后再执行一次apply_access_token()
@retry(1)
def apply_access_token():
#从MongoDB读取及设置access token
try:
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
if db.token.count()>0:
tokenInfos=db.token.find().sort([("_id",pymongo.DESCENDING)]).limit(1)
else:
make_access_token()
return False
for tokenInfo in tokenInfos:
access_token=tokenInfo["access_token"]
expires_in=tokenInfo["expires_in"]
try:
client.set_access_token(access_token, expires_in)
except StandardError, e:
if hasattr(e, 'error'):
if e.error == 'expired_token':
# token过期重新生成
make_access_token()
return False
else:
pass
except:
make_access_token()
return False
return True
if __name__ == "__main__":
apply_access_token()
# 以下为访问微博api的应用逻辑
# 以发布文字微博接口为例
client.statuses.update.post(status='Test OAuth 2.0 Send a Weibo!')
retry.py
import math
import time
# Retry decorator with exponential backoff
def retry(tries, delay=1, backoff=2):
"""Retries a function or method until it returns True.
delay sets the initial delay, and backoff sets how much the delay should
lengthen after each failure. backoff must be greater than 1, or else it
isn't really a backoff. tries must be at least 0, and delay greater than
0."""
if backoff decorated function
return deco_retry # @retry(arg[, ...]) -> true decorator
http_helper.py
# -*- coding: utf-8 -*-
#/usr/bin/env python
import urllib2,cookielib
class SmartRedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_301(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_301(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def http_error_302(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_302(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def get_cookie():
cookies = cookielib.CookieJar()
return urllib2.HTTPCookieProcessor(cookies)
def get_opener(proxy=False):
rv=urllib2.build_opener(get_cookie(), SmartRedirectHandler())
rv.addheaders = [('User-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)')]
return rv
网站调用新浪微博内容(通过Python爬虫来爬取新浪微博用户数据的文章教程)
网站优化 • 优采云 发表了文章 • 0 个评论 • 54 次浏览 • 2022-02-01 03:13
新浪微博作为新时代流行的新媒体社交平台,拥有大量的用户行为和商业数据。因此,研究人员需要获取新浪微博数据。但新浪微博数据量巨大,最好的获取方式无疑是使用Python爬虫获取。网上有一些使用Python爬虫爬取新浪微博数据的教程,但是完整的介绍和爬取用户的所有数据信息都比较少,所以这里主要用selenium包爬取新浪微博用户数据的文章文章.
目标
抓取新浪微博用户数据,包括以下字段:id、昵称、关注数、关注数、微博数、每条微博内容、转发数、评论数、点赞数、发布时间、来源、是 原创 还是转推。(本文以GUCCI(古驰)为例)
方法
+ 用 selenium 模拟爬虫
+ 使用 BeautifulSoup 解析 HTML
结果显示
步骤分解
1.选择抓取目标网址
首先,在你准备好开始爬取之前,你必须想好要爬取哪个 URL。新浪微博网站分为网页和手机两部分。大部分爬取微博数据都会选择爬手机,因为相比之下,手机基本收录了你想要的所有数据,而且手机相对PC端来说是轻量级的。
下面是GUCCI的移动端和PC端的网页展示。
2.模拟登录
决定爬取微博手机数据后,就该模拟登录了。
模拟登录网址
登录页面如下所示
模拟登录代码
3.获取用户微博的页码
登录后可以输入要抓取的商户信息。因为每个商家的微博数量不同,对应的微博页码也不同。在这里,先爬下商家的微博页码。同时,抓取那些公开的信息,如用户uid、用户名、微博数、关注者数、粉丝数。
图像.png
4.根据爬取的最大页码,循环爬取所有数据
得到最大页码后,直接通过循环爬取每一页数据。抓取的数据包括微博内容、转发数、评论数、点赞数、发微博时间、微博来源、是原创还是转发。
4.获取所有数据后,可以写入csv文件,或者excel,最终结果如上图所示
文章完整的微博爬虫就在这里解决! 查看全部
网站调用新浪微博内容(通过Python爬虫来爬取新浪微博用户数据的文章教程)
新浪微博作为新时代流行的新媒体社交平台,拥有大量的用户行为和商业数据。因此,研究人员需要获取新浪微博数据。但新浪微博数据量巨大,最好的获取方式无疑是使用Python爬虫获取。网上有一些使用Python爬虫爬取新浪微博数据的教程,但是完整的介绍和爬取用户的所有数据信息都比较少,所以这里主要用selenium包爬取新浪微博用户数据的文章文章.
目标
抓取新浪微博用户数据,包括以下字段:id、昵称、关注数、关注数、微博数、每条微博内容、转发数、评论数、点赞数、发布时间、来源、是 原创 还是转推。(本文以GUCCI(古驰)为例)
方法
+ 用 selenium 模拟爬虫
+ 使用 BeautifulSoup 解析 HTML
结果显示
步骤分解
1.选择抓取目标网址
首先,在你准备好开始爬取之前,你必须想好要爬取哪个 URL。新浪微博网站分为网页和手机两部分。大部分爬取微博数据都会选择爬手机,因为相比之下,手机基本收录了你想要的所有数据,而且手机相对PC端来说是轻量级的。
下面是GUCCI的移动端和PC端的网页展示。
2.模拟登录
决定爬取微博手机数据后,就该模拟登录了。
模拟登录网址
登录页面如下所示
模拟登录代码
3.获取用户微博的页码
登录后可以输入要抓取的商户信息。因为每个商家的微博数量不同,对应的微博页码也不同。在这里,先爬下商家的微博页码。同时,抓取那些公开的信息,如用户uid、用户名、微博数、关注者数、粉丝数。
图像.png
4.根据爬取的最大页码,循环爬取所有数据
得到最大页码后,直接通过循环爬取每一页数据。抓取的数据包括微博内容、转发数、评论数、点赞数、发微博时间、微博来源、是原创还是转发。
4.获取所有数据后,可以写入csv文件,或者excel,最终结果如上图所示
文章完整的微博爬虫就在这里解决!
网站调用新浪微博内容(3.修改参数拼接请求链接——解析网页数据解析)
网站优化 • 优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2022-02-01 01:15
使用java自动爬取新浪微博历史列表——免登录目录准备工作原理
找到微博内容页面的请求链接-》修改参数拼接请求链接-》解析网页数据-》存入数据库
工作流程1.找出微博内容页面请求链接
网页端微博在加载内容页面时,会请求如下箭头所示的链接。点击后可以发现整个网页的数据都在框内,也就是说我们只需要拿到这个链接就可以解析网页数据了。
2.修改参数拼出请求链接
接下来,我们需要拼出这个链接。需要更改的参数有domain、domain_op、pre_page和_rnd。
图中我们可以发现id是由domain和一个10位数字拼接而成,domain和domain_op是一样的,pre_page指的是当前内容页数,_rnd是时间戳,我们需要用到的cookie运行程序时。接下来我们谈谈如何获取它们:
ID:
,
其中,2399108715为普通用户id;
其中,1191044977是大V的id;
领域:
下图中的红框就是我们需要的域。可以直接在用户微博首页右键查看源码查看:
域操作:
同一个域;
前页:
我们可以直接在代码中循环累加pre_page,但是我们需要知道用户发送的总页数才能终止循环:
如上图,仍然可以在用户首页的源码中获取countPage
_rnd:
一个时间戳,可以在程序中设置为系统的当前时间,以保证能抓取到最新的微博。
3.解析网页数据
解析网页数据使用jsoup和正则表达式。如何使用可以下载文末代码查看。
4.存入数据库
在程序中实现,使用mysql。
程序部分 程序结构
service层:
build:构建链接
content:解析网页内容
dao层:
common:持久化数据,存入数据库
model层:
SinaModel:实体类
process:
Main:程序组装
运行程序部分
修改进程目录下Main方法中的参数。上面已经获取了id和cookie,可以免费获取高密代理的ip和端口。
然后运行 MainTest 程序
./test
./java
./com
./yk
./process
MainTest
数据库字段解释
sina.sql:
id-表id
userId-用户Id
content-微博正文
contentlink-微博正文中的链接
imglink-微博中的图片链接
transmitnum-转发数
commentnum-评论数
likenum-喜欢数
username-用户名
pulishTime-发布时间
equipment-设备
updateTime-数据存入时间
最后一个想法 查看全部
网站调用新浪微博内容(3.修改参数拼接请求链接——解析网页数据解析)
使用java自动爬取新浪微博历史列表——免登录目录准备工作原理
找到微博内容页面的请求链接-》修改参数拼接请求链接-》解析网页数据-》存入数据库
工作流程1.找出微博内容页面请求链接
网页端微博在加载内容页面时,会请求如下箭头所示的链接。点击后可以发现整个网页的数据都在框内,也就是说我们只需要拿到这个链接就可以解析网页数据了。
2.修改参数拼出请求链接
接下来,我们需要拼出这个链接。需要更改的参数有domain、domain_op、pre_page和_rnd。
图中我们可以发现id是由domain和一个10位数字拼接而成,domain和domain_op是一样的,pre_page指的是当前内容页数,_rnd是时间戳,我们需要用到的cookie运行程序时。接下来我们谈谈如何获取它们:
ID:
,
其中,2399108715为普通用户id;
其中,1191044977是大V的id;
领域:
下图中的红框就是我们需要的域。可以直接在用户微博首页右键查看源码查看:
域操作:
同一个域;
前页:
我们可以直接在代码中循环累加pre_page,但是我们需要知道用户发送的总页数才能终止循环:
如上图,仍然可以在用户首页的源码中获取countPage
_rnd:
一个时间戳,可以在程序中设置为系统的当前时间,以保证能抓取到最新的微博。
3.解析网页数据
解析网页数据使用jsoup和正则表达式。如何使用可以下载文末代码查看。
4.存入数据库
在程序中实现,使用mysql。
程序部分 程序结构
service层:
build:构建链接
content:解析网页内容
dao层:
common:持久化数据,存入数据库
model层:
SinaModel:实体类
process:
Main:程序组装
运行程序部分
修改进程目录下Main方法中的参数。上面已经获取了id和cookie,可以免费获取高密代理的ip和端口。
然后运行 MainTest 程序
./test
./java
./com
./yk
./process
MainTest
数据库字段解释
sina.sql:
id-表id
userId-用户Id
content-微博正文
contentlink-微博正文中的链接
imglink-微博中的图片链接
transmitnum-转发数
commentnum-评论数
likenum-喜欢数
username-用户名
pulishTime-发布时间
equipment-设备
updateTime-数据存入时间
最后一个想法
网站调用新浪微博内容(介绍常用爬虫开源项目和腾讯微博爬虫的问题总结)
网站优化 • 优采云 发表了文章 • 0 个评论 • 66 次浏览 • 2022-01-26 18:11
介绍
常用爬虫开源项目
新浪微博爬虫和腾讯微博爬虫
新浪爬虫问题
总结
介绍
相关介绍
即网络爬虫是一种自动获取网页内容的程序。它是搜索引擎的重要组成部分,因此搜索引擎优化主要针对爬虫进行优化。
主要分类
网络爬虫从万维网上为搜索引擎下载网页。一般分为传统爬虫和专注爬虫。
传统爬虫从一个或多个初始网页的URL开始,获取初始网页上的URL。在爬取网页的过程中,不断地从当前页面中提取新的 URL 并放入队列中,直到满足系统的某个停止条件。通俗的讲,就是通过源码分析得到想要的内容。
焦点爬虫的工作流程比较复杂。它需要按照一定的网页分析算法过滤掉与主题无关的链接,保留有用的链接,并放入等待抓取的URL队列中。然后,它会根据一定的搜索策略从队列中选择下一个要爬取的网页URL,并重复上述过程,直到达到系统的一定条件并停止。此外,爬虫爬取的所有网页都会被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。
反爬虫:KS-WAF将爬虫行为分为搜索引擎爬虫和扫描爬虫,可以屏蔽特定搜索引擎爬虫以节省带宽和性能,也可以屏蔽扫描爬虫防止网站被恶意爬取。
常用爬虫开源项目
Nutch 标志 搜索引擎 Nutch
Nutch 是一个搜索引擎的开源 Java 实现。它提供了我们运行自己的搜索引擎所需的所有工具。包括全文搜索和网络爬虫。
尽管网络搜索是漫游 Internet 的基本要求,但现有网络搜索引擎的数量正在下降。而这很可能会演变成一家为其商业利益垄断几乎所有网络搜索的公司。这显然对绝大多数网民不利。
现在所有主要的搜索引擎都使用专有的排名算法,这些算法不能解释为什么一个页面被排在一个特定的位置。另外,有些搜索引擎按网站付费,而不是按自己的值排序。
Apache Nutch 项目(一个网络搜索引擎)。当 Nutch 发展到一定程度时,遇到了可扩展性的问题,即当存储的网页数量达到 1 亿的水平时,Nutch 原有的结构很难达到高效率。就在整个团队不知所措的时候,救星谷歌出现了。谷歌在2003年发布了谷歌使用的分布式文件存储系统文章(The Google File System),Nutch的开发者意识到可以将Nutch放在GFS上实现,所以经过一年的发展,NDFS(Nutch Distributed文件系统)出现。在解决了瓶颈问题之后,Nutch 得到了很大的发展,而就在 2004 年,Google 发布了 MapReduce 的想法,因此尝到甜头的 Nutch 开发者毫不犹豫地将 MapReduce 模型应用到了 Nutch 系统中。
但是在 Nutch 加入 GFS 和 MapReduce 之后,Nutch 变得太大了,超出了网络搜索引擎的范围,所以在 2006 年分别移植了 NDFS 和 MapReduce,形成了一个新的项目,叫做 Hadoop。
Java 多线程网络爬虫 Crawler4j
Crawler4j 是一个开源的 Java 类库,它提供了一个简单的网页爬取接口。它可以用来构建一个多线程的网络爬虫。
crawler4j的使用主要分为两步:
1. 实现一个继承自WebCrawler的爬虫类;
2.调用CrawlController实现的爬虫类。
WebCrawler 是一个抽象类,继承它必须实现两个方法:shouldVisit 和 visit。在:
shouldVisit 是判断当前URL是否应该被爬取(visited);
visit 是抓取URL指向的页面的数据,传入的参数是网页所有数据的封装对象Page。
Crawler.CrawController 控制爬虫,先添加seed,然后开启多个爬虫,不断监控每个爬虫的生存状态。
Crawler.WebCrawler 爬虫
1. Run():不断循环,每次从Frontier取50个url,对每个url进行processPage(curUrl)。
2. processPage(curURL):使用 PageFetcher.fetch 抓取网页。如果 curURL 有重定向,则将重定向后的 url 的 url 添加到 Frontier 并稍后调度;如果爬取正常,则先解析,生成Page,然后将新的url下降到Frontier(此时确定新增url的深度),调用visit(Page){用户自定义操作} .
Crawler.Configurations 读取 crawler4j.properties 中的信息
Crawler.PageFetcher 启动 IdleConnectionMonitorThread 并使用 fetch(Page, ignoreIfBinary) 抓取单个 Page 页面。是一个静态类。
Crawler.Page 一个页面
Crawler.PageFetchStatus 单页爬取的配置,如返回的爬取状态号的含义等。
Crawler.HTMLParser 解析 HTML 源代码并将其存储在 Page 中。
Crawler.LinkExtractor 提取 HTML 页面中收录的所有链接。
Crawler.IdleConnectionMonitorThread 用于监控连接(用于发送get请求,获取页面),其connMgr负责发送HTML请求。
HTML单元
HtmlUnitHtmlUnit 是“Java 程序的无 GUI 浏览器”。它对 HTML 文档进行建模并提供一个 API,允许您调用页面、填写表单、单击链接等……就像您在“普通”浏览器中所做的一样。
HtmlUnit的使用: 简介:HtmlUnit是一个浏览器,用Java编写,没有界面。因为它没有接口,所以执行速度仍然可以下降。HtmlUnit提供了一系列的API,这些API可以做很多功能,比如表单填写、表单提交、模拟点击链接,并且由于内置了Rhinojs引擎,可以执行Javascript
1、模拟特定浏览器,也可以指定浏览器对应版本(HtmlUnit最新版本2.13现在可以模拟Chrome/FireFox/IE)
WebClient webClient=new WebClient(BrowserVersion.FIREFOX_24);
2、查找特定元素,可以通过get或者XPath从HtmlPage中获取特定的Html元素。例如;
DomElement plc_main=page.getElementById("plc_main");
DomElement code_box=(DomElement) pl_common_sassfilter.getByXPath("//div[@class='code_box clearfix']").get(0);
3. 模拟表单的提交显示在用于登录的代码中;
HtmlForm loginform = logonPage.getFormByName("loginform");
HtmlTextInput uid = loginform.getInputByName("u");
uid.click();//点击获取焦点
uid.type(Config.getAccount());
HtmlPasswordInput pwd = loginform.getInputByName("p");
pwd.click();
pwd.type(Config.getPassword());
4、获取新浪微博等微博内容等信息。
DomNodeList dls = pl_weibo_direct.getElementsByTagName("dl");
DomElement dl= dls.get(0);
整数索引 = 0;
而(DL!=空){
DomElement em=feed_list_content.getElementsByTagName("em").get(0);
字符串内容 = em.getTextContent();
newlist.add(内容);
索引++;
dl = dls.get(索引);}
2.模拟登录,找到微博内容的位置。
3.获取微博数据并存入数据库,数据库使用MYSQL
逻辑其实很简单。需要熟悉HTMLunit提供的一些类,然后是XPath语法,再熟悉一些基础的数据库知识,就可以完成微博的爬取。
腾讯微博也有同样的想法。一些区别是
1.页面解析不同。
2.URL 的某些特征是不同的。
新浪爬虫问题总结
新浪微博爬虫的一些问题:
首先是微博数量的限制,从搜索页关键词开始,只能搜索到50页的微博数据。那么每页有20条,只能搜到1000条,这肯定跟实时微博的数量不匹配。
所以你可以使用高级搜索从2009年开始搜索,这需要不断的实验,看看时间可以弥补50页的微博。因为无论我搜索什么,新浪微博都只能显示50页的数据。
以本田雅阁为例,可以分为5次搜索,第一次是2009年到2010年,这个时间段只有33页数据,然后是2010年1.1到2011.1.1有50页数据,然后往下推。在某些时期,建立50页数据只需要五六个月。简而言之,这不是常规模式。大概,时间越长,微博越多。. 所以当这个编程达到50页时,url链接的下一页就没有了。这是一个限制。
第二个问题是微博内容重复。如果连接是
%25E6%259C%25AC%25E7%2594%25B0%25E9%259B%2585%25E9%2598%2581&xsort=time&scope=ori×cope=custom:2013-01-01-0:2014-04-23-0&page=8
以本田雅阁为例,这个页面上的微博基本上都是一样的内容。据我观察,这个品牌的微博更像是一个营销和广告的微博。当然,你可以用微博来验证这个方法来刷选。但真正有意义的是,原创的微博,是一个少得可怜的数字。只有几百个大小。
还是有一些方法可以删除同一个微博。最近在数据库下操作比较有效,使用select distinct content from weibo where program='Honda Accord' into outfile 'D:/Honda Accord.txt';仍然可以删除其中大部分重复推文。
或者对于几乎相同的情况,只有 URL 不同。您可以使用删除微博内容 LIKE '%铃木“大型车”将与本田雅阁同级%';或其他一些具有特别明显特征的词或短语。
第三个问题是,虽然新浪只提供了这么多数据,但还是处处受限。当程序运行到20页时,会出现需要手动输入验证码以防止爬虫影响其服务器的问题。这个方案是通过模仿登录验证码的方法来解决的。就是拿到需要输入的验证码,把imageReader拿出来变成一个JFrame,手动输入,点一下,基本上就可以解决问题了。
第四个问题是微博内容在页面中体现不规则。例如,所有微博内容合二为一,只需 em.getTextContent()。因为不规则,有的em像点赞、空格等,解决方法是通过判断发现em只要不是真实的内容就没有任何属性。否则会有一个类属性。使用判断 hasAttribute() 踢掉点赞和空格。
第五个问题是不同id定位的问题。使用通用搜索时,定位ID为pl_weibo_direct,使用高级搜索时,微博内容定位ID为pl_wb_feedlist。
,当然是一些细节。
总结:
虽然还有很多问题,但是爬取数据的效果不是很好。不过可以肯定的是,新浪微博上的大部分数据还是可以通过网址找到的,新浪不可能大规模删除。假设像我这样的用户很久以前在2009年发了一条支持本田雅阁的微博,我可以通过我的微博链接看到与本田雅阁相关的微博内容。因此,与关键字相关的微博仍然存在于页面上,但新浪微博本身提供的搜索功能并不强大且有限。 查看全部
网站调用新浪微博内容(介绍常用爬虫开源项目和腾讯微博爬虫的问题总结)
介绍
常用爬虫开源项目
新浪微博爬虫和腾讯微博爬虫
新浪爬虫问题
总结
介绍
相关介绍
即网络爬虫是一种自动获取网页内容的程序。它是搜索引擎的重要组成部分,因此搜索引擎优化主要针对爬虫进行优化。
主要分类
网络爬虫从万维网上为搜索引擎下载网页。一般分为传统爬虫和专注爬虫。
传统爬虫从一个或多个初始网页的URL开始,获取初始网页上的URL。在爬取网页的过程中,不断地从当前页面中提取新的 URL 并放入队列中,直到满足系统的某个停止条件。通俗的讲,就是通过源码分析得到想要的内容。
焦点爬虫的工作流程比较复杂。它需要按照一定的网页分析算法过滤掉与主题无关的链接,保留有用的链接,并放入等待抓取的URL队列中。然后,它会根据一定的搜索策略从队列中选择下一个要爬取的网页URL,并重复上述过程,直到达到系统的一定条件并停止。此外,爬虫爬取的所有网页都会被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;对于重点爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程给出反馈和指导。
反爬虫:KS-WAF将爬虫行为分为搜索引擎爬虫和扫描爬虫,可以屏蔽特定搜索引擎爬虫以节省带宽和性能,也可以屏蔽扫描爬虫防止网站被恶意爬取。
常用爬虫开源项目
Nutch 标志 搜索引擎 Nutch
Nutch 是一个搜索引擎的开源 Java 实现。它提供了我们运行自己的搜索引擎所需的所有工具。包括全文搜索和网络爬虫。
尽管网络搜索是漫游 Internet 的基本要求,但现有网络搜索引擎的数量正在下降。而这很可能会演变成一家为其商业利益垄断几乎所有网络搜索的公司。这显然对绝大多数网民不利。
现在所有主要的搜索引擎都使用专有的排名算法,这些算法不能解释为什么一个页面被排在一个特定的位置。另外,有些搜索引擎按网站付费,而不是按自己的值排序。
Apache Nutch 项目(一个网络搜索引擎)。当 Nutch 发展到一定程度时,遇到了可扩展性的问题,即当存储的网页数量达到 1 亿的水平时,Nutch 原有的结构很难达到高效率。就在整个团队不知所措的时候,救星谷歌出现了。谷歌在2003年发布了谷歌使用的分布式文件存储系统文章(The Google File System),Nutch的开发者意识到可以将Nutch放在GFS上实现,所以经过一年的发展,NDFS(Nutch Distributed文件系统)出现。在解决了瓶颈问题之后,Nutch 得到了很大的发展,而就在 2004 年,Google 发布了 MapReduce 的想法,因此尝到甜头的 Nutch 开发者毫不犹豫地将 MapReduce 模型应用到了 Nutch 系统中。
但是在 Nutch 加入 GFS 和 MapReduce 之后,Nutch 变得太大了,超出了网络搜索引擎的范围,所以在 2006 年分别移植了 NDFS 和 MapReduce,形成了一个新的项目,叫做 Hadoop。
Java 多线程网络爬虫 Crawler4j
Crawler4j 是一个开源的 Java 类库,它提供了一个简单的网页爬取接口。它可以用来构建一个多线程的网络爬虫。
crawler4j的使用主要分为两步:
1. 实现一个继承自WebCrawler的爬虫类;
2.调用CrawlController实现的爬虫类。
WebCrawler 是一个抽象类,继承它必须实现两个方法:shouldVisit 和 visit。在:
shouldVisit 是判断当前URL是否应该被爬取(visited);
visit 是抓取URL指向的页面的数据,传入的参数是网页所有数据的封装对象Page。
Crawler.CrawController 控制爬虫,先添加seed,然后开启多个爬虫,不断监控每个爬虫的生存状态。
Crawler.WebCrawler 爬虫
1. Run():不断循环,每次从Frontier取50个url,对每个url进行processPage(curUrl)。
2. processPage(curURL):使用 PageFetcher.fetch 抓取网页。如果 curURL 有重定向,则将重定向后的 url 的 url 添加到 Frontier 并稍后调度;如果爬取正常,则先解析,生成Page,然后将新的url下降到Frontier(此时确定新增url的深度),调用visit(Page){用户自定义操作} .
Crawler.Configurations 读取 crawler4j.properties 中的信息
Crawler.PageFetcher 启动 IdleConnectionMonitorThread 并使用 fetch(Page, ignoreIfBinary) 抓取单个 Page 页面。是一个静态类。
Crawler.Page 一个页面
Crawler.PageFetchStatus 单页爬取的配置,如返回的爬取状态号的含义等。
Crawler.HTMLParser 解析 HTML 源代码并将其存储在 Page 中。
Crawler.LinkExtractor 提取 HTML 页面中收录的所有链接。
Crawler.IdleConnectionMonitorThread 用于监控连接(用于发送get请求,获取页面),其connMgr负责发送HTML请求。
HTML单元
HtmlUnitHtmlUnit 是“Java 程序的无 GUI 浏览器”。它对 HTML 文档进行建模并提供一个 API,允许您调用页面、填写表单、单击链接等……就像您在“普通”浏览器中所做的一样。
HtmlUnit的使用: 简介:HtmlUnit是一个浏览器,用Java编写,没有界面。因为它没有接口,所以执行速度仍然可以下降。HtmlUnit提供了一系列的API,这些API可以做很多功能,比如表单填写、表单提交、模拟点击链接,并且由于内置了Rhinojs引擎,可以执行Javascript
1、模拟特定浏览器,也可以指定浏览器对应版本(HtmlUnit最新版本2.13现在可以模拟Chrome/FireFox/IE)
WebClient webClient=new WebClient(BrowserVersion.FIREFOX_24);
2、查找特定元素,可以通过get或者XPath从HtmlPage中获取特定的Html元素。例如;
DomElement plc_main=page.getElementById("plc_main");
DomElement code_box=(DomElement) pl_common_sassfilter.getByXPath("//div[@class='code_box clearfix']").get(0);
3. 模拟表单的提交显示在用于登录的代码中;
HtmlForm loginform = logonPage.getFormByName("loginform");
HtmlTextInput uid = loginform.getInputByName("u");
uid.click();//点击获取焦点
uid.type(Config.getAccount());
HtmlPasswordInput pwd = loginform.getInputByName("p");
pwd.click();
pwd.type(Config.getPassword());
4、获取新浪微博等微博内容等信息。
DomNodeList dls = pl_weibo_direct.getElementsByTagName("dl");
DomElement dl= dls.get(0);
整数索引 = 0;
而(DL!=空){
DomElement em=feed_list_content.getElementsByTagName("em").get(0);
字符串内容 = em.getTextContent();
newlist.add(内容);
索引++;
dl = dls.get(索引);}
2.模拟登录,找到微博内容的位置。
3.获取微博数据并存入数据库,数据库使用MYSQL
逻辑其实很简单。需要熟悉HTMLunit提供的一些类,然后是XPath语法,再熟悉一些基础的数据库知识,就可以完成微博的爬取。
腾讯微博也有同样的想法。一些区别是
1.页面解析不同。
2.URL 的某些特征是不同的。
新浪爬虫问题总结
新浪微博爬虫的一些问题:
首先是微博数量的限制,从搜索页关键词开始,只能搜索到50页的微博数据。那么每页有20条,只能搜到1000条,这肯定跟实时微博的数量不匹配。
所以你可以使用高级搜索从2009年开始搜索,这需要不断的实验,看看时间可以弥补50页的微博。因为无论我搜索什么,新浪微博都只能显示50页的数据。
以本田雅阁为例,可以分为5次搜索,第一次是2009年到2010年,这个时间段只有33页数据,然后是2010年1.1到2011.1.1有50页数据,然后往下推。在某些时期,建立50页数据只需要五六个月。简而言之,这不是常规模式。大概,时间越长,微博越多。. 所以当这个编程达到50页时,url链接的下一页就没有了。这是一个限制。
第二个问题是微博内容重复。如果连接是
%25E6%259C%25AC%25E7%2594%25B0%25E9%259B%2585%25E9%2598%2581&xsort=time&scope=ori×cope=custom:2013-01-01-0:2014-04-23-0&page=8
以本田雅阁为例,这个页面上的微博基本上都是一样的内容。据我观察,这个品牌的微博更像是一个营销和广告的微博。当然,你可以用微博来验证这个方法来刷选。但真正有意义的是,原创的微博,是一个少得可怜的数字。只有几百个大小。
还是有一些方法可以删除同一个微博。最近在数据库下操作比较有效,使用select distinct content from weibo where program='Honda Accord' into outfile 'D:/Honda Accord.txt';仍然可以删除其中大部分重复推文。
或者对于几乎相同的情况,只有 URL 不同。您可以使用删除微博内容 LIKE '%铃木“大型车”将与本田雅阁同级%';或其他一些具有特别明显特征的词或短语。
第三个问题是,虽然新浪只提供了这么多数据,但还是处处受限。当程序运行到20页时,会出现需要手动输入验证码以防止爬虫影响其服务器的问题。这个方案是通过模仿登录验证码的方法来解决的。就是拿到需要输入的验证码,把imageReader拿出来变成一个JFrame,手动输入,点一下,基本上就可以解决问题了。
第四个问题是微博内容在页面中体现不规则。例如,所有微博内容合二为一,只需 em.getTextContent()。因为不规则,有的em像点赞、空格等,解决方法是通过判断发现em只要不是真实的内容就没有任何属性。否则会有一个类属性。使用判断 hasAttribute() 踢掉点赞和空格。
第五个问题是不同id定位的问题。使用通用搜索时,定位ID为pl_weibo_direct,使用高级搜索时,微博内容定位ID为pl_wb_feedlist。
,当然是一些细节。
总结:
虽然还有很多问题,但是爬取数据的效果不是很好。不过可以肯定的是,新浪微博上的大部分数据还是可以通过网址找到的,新浪不可能大规模删除。假设像我这样的用户很久以前在2009年发了一条支持本田雅阁的微博,我可以通过我的微博链接看到与本田雅阁相关的微博内容。因此,与关键字相关的微博仍然存在于页面上,但新浪微博本身提供的搜索功能并不强大且有限。
网站调用新浪微博内容(【魔兽世界】新浪微博登录常用接口:对应主界面)
网站优化 • 优采云 发表了文章 • 0 个评论 • 68 次浏览 • 2022-01-25 12:24
日志条目
新浪微博登录常用界面:
对应主界面:
不过,我个人推荐使用移动端的微博入口:
对应主界面:
原因是手机上的数据比较轻量级,基础数据齐全,可能会缺少一些基本的个人信息,比如“个人资料完成度”、“个人等级”等。粉丝ID和关注ID只能显示20页,但可以作为大部分验证的语料库。
通过对比下面两张图,分别是PC端和手机端,可以发现内容基本一致:
如下图在手机上,图片比较小,内容也比较简洁。
完整的源代码
下面的代码主要分为三部分:
1.登录微博(用户名、密码) 登录微博
2.VisitPersonPage(user_id) 访问follower网站获取个人信息
3.获取微博内容同时翻页
<p># coding=utf-8
"""
Created on 2016-02-22 @author: Eastmount
功能: 爬取新浪微博用户的信息
信息:用户ID 用户名 粉丝数 关注数 微博数 微博内容
网址:http://weibo.cn/ 数据量更小 相对http://weibo.com/
"""
import time
import re
import os
import sys
import codecs
import shutil
import urllib
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.action_chains import ActionChains
#先调用无界面浏览器PhantomJS或Firefox
#driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")
driver = webdriver.Firefox()
wait = ui.WebDriverWait(driver,10)
#全局变量 文件操作读写信息
inforead = codecs.open("SinaWeibo_List.txt", 'r', 'utf-8')
infofile = codecs.open("SinaWeibo_Info.txt", 'a', 'utf-8')
#********************************************************************************
# 第一步: 登陆weibo.cn 获取新浪微博的cookie
# 该方法针对weibo.cn有效(明文形式传输数据) weibo.com见学弟设置POST和Header方法
# LoginWeibo(username, password) 参数用户名 密码
# 验证码暂停时间手动输入
#********************************************************************************
def LoginWeibo(username, password):
try:
#**********************************************************************
# 直接访问driver.get("http://weibo.cn/5824697471")会跳转到登陆页面 用户id
#
# 用户名
# 密码 "password_4903" 中数字会变动,故采用绝对路径方法,否则不能定位到元素
#
# 勾选记住登录状态check默认是保留 故注释掉该代码 不保留Cookie 则'expiry'=None
#**********************************************************************
#输入用户名/密码登录
print u'准备登陆Weibo.cn网站...'
driver.get("http://login.weibo.cn/login/")
elem_user = driver.find_element_by_name("mobile")
elem_user.send_keys(username) #用户名
elem_pwd = driver.find_element_by_xpath("/html/body/div[2]/form/div/input[2]")
elem_pwd.send_keys(password) #密码
#elem_rem = driver.find_element_by_name("remember")
#elem_rem.click() #记住登录状态
#重点: 暂停时间输入验证码
#pause(millisenconds)
time.sleep(20)
elem_sub = driver.find_element_by_name("submit")
elem_sub.click() #点击登陆
time.sleep(2)
#获取Coockie 推荐 http://www.cnblogs.com/fnng/p/3269450.html
print driver.current_url
print driver.get_cookies() #获得cookie信息 dict存储
print u'输出Cookie键值对信息:'
for cookie in driver.get_cookies():
#print cookie
for key in cookie:
print key, cookie[key]
#driver.get_cookies()类型list 仅包含一个元素cookie类型dict
print u'登陆成功...'
except Exception,e:
print "Error: ",e
finally:
print u'End LoginWeibo!\n\n'
#********************************************************************************
# 第二步: 访问个人页面http://weibo.cn/5824697471并获取信息
# VisitPersonPage()
# 编码常见错误 UnicodeEncodeError: 'ascii' codec can't encode characters
#********************************************************************************
def VisitPersonPage(user_id):
try:
global infofile
print u'准备访问个人网站.....'
#原创内容 http://weibo.cn/guangxianliuya ... e%3D2
driver.get("http://weibo.cn/" + user_id)
#**************************************************************************
# No.1 直接获取 用户昵称 微博数 关注数 粉丝数
# str_name.text是unicode编码类型
#**************************************************************************
#用户id
print u'个人详细信息'
print '**********************************************'
print u'用户id: ' + user_id
#昵称
str_name = driver.find_element_by_xpath("//div[@class='ut']")
str_t = str_name.text.split(" ")
num_name = str_t[0] #空格分隔 获取第一个值 "Eastmount 详细资料 设置 新手区"
print u'昵称: ' + num_name
#微博数 除个人主页 它默认直接显示微博数 无超链接
#Error: 'unicode' object is not callable
#一般是把字符串当做函数使用了 str定义成字符串 而str()函数再次使用时报错
str_wb = driver.find_element_by_xpath("//div[@class='tip2']")
pattern = r"\d+\.?\d*" #正则提取"微博[0]" 但r"(\[.*?\])"总含[]
guid = re.findall(pattern, str_wb.text, re.S|re.M)
print str_wb.text #微博[294] 关注[351] 粉丝[294] 分组[1] @他的
for value in guid:
num_wb = int(value)
break
print u'微博数: ' + str(num_wb)
#关注数
str_gz = driver.find_element_by_xpath("//div[@class='tip2']/a[1]")
guid = re.findall(pattern, str_gz.text, re.M)
num_gz = int(guid[0])
print u'关注数: ' + str(num_gz)
#粉丝数
str_fs = driver.find_element_by_xpath("//div[@class='tip2']/a[2]")
guid = re.findall(pattern, str_fs.text, re.M)
num_fs = int(guid[0])
print u'粉丝数: ' + str(num_fs)
#***************************************************************************
# No.2 文件操作写入信息
#***************************************************************************
infofile.write('=====================================================================\r\n')
infofile.write(u'用户: ' + user_id + '\r\n')
infofile.write(u'昵称: ' + num_name + '\r\n')
infofile.write(u'微博数: ' + str(num_wb) + '\r\n')
infofile.write(u'关注数: ' + str(num_gz) + '\r\n')
infofile.write(u'粉丝数: ' + str(num_fs) + '\r\n')
infofile.write(u'微博内容: ' + '\r\n\r\n')
#***************************************************************************
# No.3 获取微博内容
# http://weibo.cn/guangxianliuya ... e%3D1
# 其中filter=0表示全部 =1表示原创
#***************************************************************************
print '\n'
print u'获取微博内容信息'
num = 1
while num 查看全部
网站调用新浪微博内容(【魔兽世界】新浪微博登录常用接口:对应主界面)
日志条目
新浪微博登录常用界面:
对应主界面:
不过,我个人推荐使用移动端的微博入口:
对应主界面:
原因是手机上的数据比较轻量级,基础数据齐全,可能会缺少一些基本的个人信息,比如“个人资料完成度”、“个人等级”等。粉丝ID和关注ID只能显示20页,但可以作为大部分验证的语料库。
通过对比下面两张图,分别是PC端和手机端,可以发现内容基本一致:
如下图在手机上,图片比较小,内容也比较简洁。
完整的源代码
下面的代码主要分为三部分:
1.登录微博(用户名、密码) 登录微博
2.VisitPersonPage(user_id) 访问follower网站获取个人信息
3.获取微博内容同时翻页
<p># coding=utf-8
"""
Created on 2016-02-22 @author: Eastmount
功能: 爬取新浪微博用户的信息
信息:用户ID 用户名 粉丝数 关注数 微博数 微博内容
网址:http://weibo.cn/ 数据量更小 相对http://weibo.com/
"""
import time
import re
import os
import sys
import codecs
import shutil
import urllib
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.action_chains import ActionChains
#先调用无界面浏览器PhantomJS或Firefox
#driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")
driver = webdriver.Firefox()
wait = ui.WebDriverWait(driver,10)
#全局变量 文件操作读写信息
inforead = codecs.open("SinaWeibo_List.txt", 'r', 'utf-8')
infofile = codecs.open("SinaWeibo_Info.txt", 'a', 'utf-8')
#********************************************************************************
# 第一步: 登陆weibo.cn 获取新浪微博的cookie
# 该方法针对weibo.cn有效(明文形式传输数据) weibo.com见学弟设置POST和Header方法
# LoginWeibo(username, password) 参数用户名 密码
# 验证码暂停时间手动输入
#********************************************************************************
def LoginWeibo(username, password):
try:
#**********************************************************************
# 直接访问driver.get("http://weibo.cn/5824697471")会跳转到登陆页面 用户id
#
# 用户名
# 密码 "password_4903" 中数字会变动,故采用绝对路径方法,否则不能定位到元素
#
# 勾选记住登录状态check默认是保留 故注释掉该代码 不保留Cookie 则'expiry'=None
#**********************************************************************
#输入用户名/密码登录
print u'准备登陆Weibo.cn网站...'
driver.get("http://login.weibo.cn/login/")
elem_user = driver.find_element_by_name("mobile")
elem_user.send_keys(username) #用户名
elem_pwd = driver.find_element_by_xpath("/html/body/div[2]/form/div/input[2]")
elem_pwd.send_keys(password) #密码
#elem_rem = driver.find_element_by_name("remember")
#elem_rem.click() #记住登录状态
#重点: 暂停时间输入验证码
#pause(millisenconds)
time.sleep(20)
elem_sub = driver.find_element_by_name("submit")
elem_sub.click() #点击登陆
time.sleep(2)
#获取Coockie 推荐 http://www.cnblogs.com/fnng/p/3269450.html
print driver.current_url
print driver.get_cookies() #获得cookie信息 dict存储
print u'输出Cookie键值对信息:'
for cookie in driver.get_cookies():
#print cookie
for key in cookie:
print key, cookie[key]
#driver.get_cookies()类型list 仅包含一个元素cookie类型dict
print u'登陆成功...'
except Exception,e:
print "Error: ",e
finally:
print u'End LoginWeibo!\n\n'
#********************************************************************************
# 第二步: 访问个人页面http://weibo.cn/5824697471并获取信息
# VisitPersonPage()
# 编码常见错误 UnicodeEncodeError: 'ascii' codec can't encode characters
#********************************************************************************
def VisitPersonPage(user_id):
try:
global infofile
print u'准备访问个人网站.....'
#原创内容 http://weibo.cn/guangxianliuya ... e%3D2
driver.get("http://weibo.cn/" + user_id)
#**************************************************************************
# No.1 直接获取 用户昵称 微博数 关注数 粉丝数
# str_name.text是unicode编码类型
#**************************************************************************
#用户id
print u'个人详细信息'
print '**********************************************'
print u'用户id: ' + user_id
#昵称
str_name = driver.find_element_by_xpath("//div[@class='ut']")
str_t = str_name.text.split(" ")
num_name = str_t[0] #空格分隔 获取第一个值 "Eastmount 详细资料 设置 新手区"
print u'昵称: ' + num_name
#微博数 除个人主页 它默认直接显示微博数 无超链接
#Error: 'unicode' object is not callable
#一般是把字符串当做函数使用了 str定义成字符串 而str()函数再次使用时报错
str_wb = driver.find_element_by_xpath("//div[@class='tip2']")
pattern = r"\d+\.?\d*" #正则提取"微博[0]" 但r"(\[.*?\])"总含[]
guid = re.findall(pattern, str_wb.text, re.S|re.M)
print str_wb.text #微博[294] 关注[351] 粉丝[294] 分组[1] @他的
for value in guid:
num_wb = int(value)
break
print u'微博数: ' + str(num_wb)
#关注数
str_gz = driver.find_element_by_xpath("//div[@class='tip2']/a[1]")
guid = re.findall(pattern, str_gz.text, re.M)
num_gz = int(guid[0])
print u'关注数: ' + str(num_gz)
#粉丝数
str_fs = driver.find_element_by_xpath("//div[@class='tip2']/a[2]")
guid = re.findall(pattern, str_fs.text, re.M)
num_fs = int(guid[0])
print u'粉丝数: ' + str(num_fs)
#***************************************************************************
# No.2 文件操作写入信息
#***************************************************************************
infofile.write('=====================================================================\r\n')
infofile.write(u'用户: ' + user_id + '\r\n')
infofile.write(u'昵称: ' + num_name + '\r\n')
infofile.write(u'微博数: ' + str(num_wb) + '\r\n')
infofile.write(u'关注数: ' + str(num_gz) + '\r\n')
infofile.write(u'粉丝数: ' + str(num_fs) + '\r\n')
infofile.write(u'微博内容: ' + '\r\n\r\n')
#***************************************************************************
# No.3 获取微博内容
# http://weibo.cn/guangxianliuya ... e%3D1
# 其中filter=0表示全部 =1表示原创
#***************************************************************************
print '\n'
print u'获取微博内容信息'
num = 1
while num
网站调用新浪微博内容(微博爬虫,单机每日千万级的数据ampamp总结(图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 95 次浏览 • 2022-01-25 12:22
微博爬虫,单机每天千万级数据&&吐血整理微博爬虫总结
前言
早前我发表了一篇博客微博爬虫,每天上百万条数据,并在Github上开源了代码,后来很多人联系我,还有一些公众号转载了这个文章。
但是,对于微博爬虫,我还是很内疚的,因为账号池的问题还没有解决,所以每天百万数据里都有水。仅仅爬取好友关系,这个简单的数据就可以达到数百万。如果你抓取关键词搜索过的微博,或者一个人的所有微博,都达不到百万级数据量。
但既然坑已经埋了,就必须要填上!所以自从写了那篇文章之后,我就一直想打造一个稳定的单机千万级每日微博抓取系统。
值得庆祝的是,这个问题现在已经完全解决了!对微博爬虫也有了更深的了解!
微博网站分析
目前共有三个微博网站:
可以看出,这三个站点的复杂度在逐渐增加。很显然,如果你能爬到最简单的完成,你肯定不会爬复杂的,但实际上,有些只能爬复杂的。!
什么任务不能完成?可以说,抢一个人的所有微博,抢朋友,抢个人信息,这一切都可以在这个网站上完成。
但是,有一个任务是无法完成的,那就是高级搜索
微博高级搜索
也许你经常有这样的需求。比如最近疫苗事件的兴起,你需要抓住7月10日到7月20日这个时间段,提一下疫苗的关键词微博。
这其实是一个非常刚性的要求,需要使用微博的高级搜索来完成。
对于高级搜索界面,三个微博网站的情况是:
高级搜索条目:
可以看到这里可以过滤的条件有,类型,用户,时间,注意这里的时间是以天为单位的。
以下是对 关键词 疫苗的特定搜索
可以看到一页有10条搜索结果,最多显示100页,也就是1000条结果。
因此,搜索结果最多会返回1000条微博,
本站的时间单位是天,比如搜索时间段是10天,那么最多可以抓取10*1000=10000条数据。
不幸的是,这个网站没有高级搜索界面
高级搜索条目:
可以看到这里可以过滤的条件有类型、用户、时间、地区。请注意,这里的时间以小时为单位。
本站一页有20条微博,最多50页,所以一次搜索最多也能返回1000条微博数据
但是这个网站的时间单位是小时,
所以比如搜索时间段是10天,那么最多可以抓取10*24*1000=240000条数据。
总结
所以可能只需要高级搜索,而且你需要的搜索结果数据非常大,而且过滤条件非常精细,比如地区,其他爬虫需求都可以通过本站抓取,包括比较粗略的高级搜索
微博爬取经验总结
还是传统的验证码,5位数字和字母的组合
这个验证码可以通过扫码平台来解决。具体登录代码请参考这里
但是,由于您购买的小号可能会因为操作频繁而被微博盯上,所以登录时账号异常,会生成一个非常恶心的验证码,如下图。
遇到这种情况,建议你放弃治疗,不要想着破解这个验证码,所以你平时买的小号也不是100%可用的,还有一些是异常账号!
打造千万级爬虫系统
基于以上分析,如果要搭建千万级爬虫系统,只需要做一件事,搭建一个账户池。
建立账户池的步骤也很简单:
1. 购买批量帐户
2. 登录微博并保存cookie
在这两个步骤中,对于每个后续请求,只需从帐户池中随机选择一个帐户即可。
这两个站点的cookies是不同的,所以我们需要建立两个账户池,一个给cn站点,一个给com站点。
这时候,结合我之前写的项目WeiboSpider,就可以轻松实现每日百万级数据抓取!
注意这里的实际爬取速度与你的账户池大小和电脑带宽有很大关系。如果账户池不大,请求间隔延迟会稍微长一些。如果带宽小,每个请求的耗时也会长一点
我的数据是
账户池中有 230 个账户,每个请求的延迟为 0.1 秒,每天可以实现 2-300 万个获取结果。
冲刺到千万
一直以为我上面搭建的爬虫占用了带宽!
有一次,我启动了另一个爬虫,发现另一个爬虫也可以达到每天2到300万的爬行速度。同时,之前的爬虫也在以每天2到300万的爬行速度运行。
所以,只是CPU在限制爬虫的爬取量,而不是网络IO!
所以你只需要使用多进程优化。这里推荐使用 Redis-Scrapy。所有爬虫共享一个 Redis 队列,通过 Redis 将 URL 统一分配给爬虫,Redis 是一个分布式爬虫系统。
它可以部署在不同的机器上(如果一台机器的带宽/CPU已满),或者只是在一台机器上打开多个进程。
就这样,开了5个进程,不敢再开多了,毕竟账户池还是200多。
那么结果是:
一分钟可抓8000条数据,一天可抓1100万+
抓取系统目前运行稳定
因此,最初的目标已经实现,一个千万级的微博爬虫系统
总结
至此,可以说微博爬虫的所有问题都彻底解决了!!!
开源代码在这里,你需要添加自己的帐户池。 查看全部
网站调用新浪微博内容(微博爬虫,单机每日千万级的数据ampamp总结(图))
微博爬虫,单机每天千万级数据&&吐血整理微博爬虫总结
前言
早前我发表了一篇博客微博爬虫,每天上百万条数据,并在Github上开源了代码,后来很多人联系我,还有一些公众号转载了这个文章。
但是,对于微博爬虫,我还是很内疚的,因为账号池的问题还没有解决,所以每天百万数据里都有水。仅仅爬取好友关系,这个简单的数据就可以达到数百万。如果你抓取关键词搜索过的微博,或者一个人的所有微博,都达不到百万级数据量。
但既然坑已经埋了,就必须要填上!所以自从写了那篇文章之后,我就一直想打造一个稳定的单机千万级每日微博抓取系统。
值得庆祝的是,这个问题现在已经完全解决了!对微博爬虫也有了更深的了解!
微博网站分析
目前共有三个微博网站:
可以看出,这三个站点的复杂度在逐渐增加。很显然,如果你能爬到最简单的完成,你肯定不会爬复杂的,但实际上,有些只能爬复杂的。!
什么任务不能完成?可以说,抢一个人的所有微博,抢朋友,抢个人信息,这一切都可以在这个网站上完成。
但是,有一个任务是无法完成的,那就是高级搜索
微博高级搜索
也许你经常有这样的需求。比如最近疫苗事件的兴起,你需要抓住7月10日到7月20日这个时间段,提一下疫苗的关键词微博。
这其实是一个非常刚性的要求,需要使用微博的高级搜索来完成。
对于高级搜索界面,三个微博网站的情况是:
高级搜索条目:
可以看到这里可以过滤的条件有,类型,用户,时间,注意这里的时间是以天为单位的。
以下是对 关键词 疫苗的特定搜索
可以看到一页有10条搜索结果,最多显示100页,也就是1000条结果。
因此,搜索结果最多会返回1000条微博,
本站的时间单位是天,比如搜索时间段是10天,那么最多可以抓取10*1000=10000条数据。
不幸的是,这个网站没有高级搜索界面
高级搜索条目:
可以看到这里可以过滤的条件有类型、用户、时间、地区。请注意,这里的时间以小时为单位。
本站一页有20条微博,最多50页,所以一次搜索最多也能返回1000条微博数据
但是这个网站的时间单位是小时,
所以比如搜索时间段是10天,那么最多可以抓取10*24*1000=240000条数据。
总结
所以可能只需要高级搜索,而且你需要的搜索结果数据非常大,而且过滤条件非常精细,比如地区,其他爬虫需求都可以通过本站抓取,包括比较粗略的高级搜索
微博爬取经验总结
还是传统的验证码,5位数字和字母的组合
这个验证码可以通过扫码平台来解决。具体登录代码请参考这里
但是,由于您购买的小号可能会因为操作频繁而被微博盯上,所以登录时账号异常,会生成一个非常恶心的验证码,如下图。
遇到这种情况,建议你放弃治疗,不要想着破解这个验证码,所以你平时买的小号也不是100%可用的,还有一些是异常账号!
打造千万级爬虫系统
基于以上分析,如果要搭建千万级爬虫系统,只需要做一件事,搭建一个账户池。
建立账户池的步骤也很简单:
1. 购买批量帐户
2. 登录微博并保存cookie
在这两个步骤中,对于每个后续请求,只需从帐户池中随机选择一个帐户即可。
这两个站点的cookies是不同的,所以我们需要建立两个账户池,一个给cn站点,一个给com站点。
这时候,结合我之前写的项目WeiboSpider,就可以轻松实现每日百万级数据抓取!
注意这里的实际爬取速度与你的账户池大小和电脑带宽有很大关系。如果账户池不大,请求间隔延迟会稍微长一些。如果带宽小,每个请求的耗时也会长一点
我的数据是
账户池中有 230 个账户,每个请求的延迟为 0.1 秒,每天可以实现 2-300 万个获取结果。
冲刺到千万
一直以为我上面搭建的爬虫占用了带宽!
有一次,我启动了另一个爬虫,发现另一个爬虫也可以达到每天2到300万的爬行速度。同时,之前的爬虫也在以每天2到300万的爬行速度运行。
所以,只是CPU在限制爬虫的爬取量,而不是网络IO!
所以你只需要使用多进程优化。这里推荐使用 Redis-Scrapy。所有爬虫共享一个 Redis 队列,通过 Redis 将 URL 统一分配给爬虫,Redis 是一个分布式爬虫系统。
它可以部署在不同的机器上(如果一台机器的带宽/CPU已满),或者只是在一台机器上打开多个进程。
就这样,开了5个进程,不敢再开多了,毕竟账户池还是200多。
那么结果是:
一分钟可抓8000条数据,一天可抓1100万+
抓取系统目前运行稳定
因此,最初的目标已经实现,一个千万级的微博爬虫系统
总结
至此,可以说微博爬虫的所有问题都彻底解决了!!!
开源代码在这里,你需要添加自己的帐户池。
网站调用新浪微博内容(网站调用新浪微博显示搜狐的内容是一个页面)
网站优化 • 优采云 发表了文章 • 0 个评论 • 70 次浏览 • 2022-01-23 04:03
网站调用新浪微博内容然后显示搜狐的内容,新浪转给搜狐之后搜狐和转给搜狐的内容是一个页面。百度收录排名靠前就能给你这个站带来用户和流量,从而使得用户、站长、新浪微博、新浪微博读者找到对应的内容。反之,如果你本身没有用户,或者没有搜索结果,就没有用户,就没有内容提供。
第一次参加百度开发者大会
内容为王,百度是站长生态的维护者,
百度或者谷歌属于工具类平台,百度的体系就是以流量换取数据和名声。谷歌则是搜索引擎,两者之间还是有不同。不好衡量谁占优势谁占劣势。
我猜:一,谷歌不是百度的子公司。而百度不再买百度作为优势,而百度也没必要买谷歌的优势。二,谷歌收购百度的路演很足,招揽人才,拉团队,百度的发展状况对整个上市并没有太大影响。三,谷歌虽说自己也没做内容,但人家也说了,客户如果有需求的话会第一时间联系谷歌的,百度需要的是做搜索的,单就这点百度缺乏对重点客户的宣传。
四,谷歌说过不做百度的竞价排名,不过这样就需要有更多没有办法优化的网站上线,而且这个工作量不比百度的竞价排名来的小。五,谷歌说过卖百度关键词,但感觉百度的词太多了,这个自家排名的意义不大,特别是百度起家的地方谷歌已经做到了和百度持平,相信谷歌自己也不需要这种关键词,同样,谷歌自己产品栏目上的词也非常多,人家是做搜索,百度是做社区的。
谷歌三条到五条自家站内的流量就可以覆盖掉整个平台,百度三条到五条自家站内广告和谷歌三条到五条站内的流量在关键词覆盖上一定比拼不过的。感觉已经丧失先机了。六,谷歌提供的搜索与百度存在一定差异,谷歌的搜索可以得到更细分和更细分的网站。根据特征搜索,一些小网站收录的机会也许比百度高,那么就能够吸引更多人流量。
七,其实百度真正的劣势在于百度app的内容流量偏少,完全靠在线广告来占领百度桌面,而谷歌强大的搜索索引和后台技术,也许不仅仅靠搜索就能占领市场。八,更简单的需求如视频流量来说,似乎还是视频站传统门道高?九,还是进入百度自家的产品和服务转化,口水仗本就不可能长久,大量用户的习惯培养完全是要靠产品介绍和使用培养的,就像上面说的,能否构成用户粘性是个问题。
最后,app广告是要花钱的。三年左右发布一次,一两年就换一次,应该成本是非常高的。百度即便人家搜一下,输入完之后,马上给你推荐baidu,是不是还有点冤?o(∩_∩)o。 查看全部
网站调用新浪微博内容(网站调用新浪微博显示搜狐的内容是一个页面)
网站调用新浪微博内容然后显示搜狐的内容,新浪转给搜狐之后搜狐和转给搜狐的内容是一个页面。百度收录排名靠前就能给你这个站带来用户和流量,从而使得用户、站长、新浪微博、新浪微博读者找到对应的内容。反之,如果你本身没有用户,或者没有搜索结果,就没有用户,就没有内容提供。
第一次参加百度开发者大会
内容为王,百度是站长生态的维护者,
百度或者谷歌属于工具类平台,百度的体系就是以流量换取数据和名声。谷歌则是搜索引擎,两者之间还是有不同。不好衡量谁占优势谁占劣势。
我猜:一,谷歌不是百度的子公司。而百度不再买百度作为优势,而百度也没必要买谷歌的优势。二,谷歌收购百度的路演很足,招揽人才,拉团队,百度的发展状况对整个上市并没有太大影响。三,谷歌虽说自己也没做内容,但人家也说了,客户如果有需求的话会第一时间联系谷歌的,百度需要的是做搜索的,单就这点百度缺乏对重点客户的宣传。
四,谷歌说过不做百度的竞价排名,不过这样就需要有更多没有办法优化的网站上线,而且这个工作量不比百度的竞价排名来的小。五,谷歌说过卖百度关键词,但感觉百度的词太多了,这个自家排名的意义不大,特别是百度起家的地方谷歌已经做到了和百度持平,相信谷歌自己也不需要这种关键词,同样,谷歌自己产品栏目上的词也非常多,人家是做搜索,百度是做社区的。
谷歌三条到五条自家站内的流量就可以覆盖掉整个平台,百度三条到五条自家站内广告和谷歌三条到五条站内的流量在关键词覆盖上一定比拼不过的。感觉已经丧失先机了。六,谷歌提供的搜索与百度存在一定差异,谷歌的搜索可以得到更细分和更细分的网站。根据特征搜索,一些小网站收录的机会也许比百度高,那么就能够吸引更多人流量。
七,其实百度真正的劣势在于百度app的内容流量偏少,完全靠在线广告来占领百度桌面,而谷歌强大的搜索索引和后台技术,也许不仅仅靠搜索就能占领市场。八,更简单的需求如视频流量来说,似乎还是视频站传统门道高?九,还是进入百度自家的产品和服务转化,口水仗本就不可能长久,大量用户的习惯培养完全是要靠产品介绍和使用培养的,就像上面说的,能否构成用户粘性是个问题。
最后,app广告是要花钱的。三年左右发布一次,一两年就换一次,应该成本是非常高的。百度即便人家搜一下,输入完之后,马上给你推荐baidu,是不是还有点冤?o(∩_∩)o。
网站调用新浪微博内容(新浪新闻的采集方法,以及为什么要去采集新浪?)
网站优化 • 优采云 发表了文章 • 0 个评论 • 126 次浏览 • 2022-01-22 18:05
现在无论你是一个采集站的站长,还是一个普通的采集站长,采集都有一个来源,就是新闻来源。今天小编就和大家聊一聊新浪新闻的采集方法,以及为什么要去采集新浪新闻。
首先我们来看看新浪新闻的介绍:新浪新闻可以及时获取全球新闻资讯、国内外新闻、精彩体育赛事报道、财经财经动态、影视娱乐赛事、独家微博“微” ” 新闻,精彩如你所见,新闻、星座、笑话很多。从这个信息我们可以知道,它基本上覆盖了各行各业,所以也适应了各种采集的需求,不管你在哪个站,新浪采集都可以联系到你需要 文章 资源。新浪作为互联网内容的领头羊,在传播、解读、把握新闻特别是专题方面做得很好。正因为新浪最擅长做新闻,所以它的时效性、时效性、权威性、
分析了这么多优势之后,采集新浪新闻的内容怎么办?可能对于大部分新手或者不懂编码技术的站长来说,只能一一复制粘贴。但是这种情况下效率很低,不能同时满足这么多网站的内容更新。那么如何解决这个问题呢?事实上,这很简单。只需要一个技巧就可以完美解决这个问题。我们完全可以用工具代替劳动力。
小编经常使用的一款免费采集工具,功能强大,不仅可以采集新闻来源,还可以微信公众号、知乎、相关咨询等采集 . 对于我们作为一个站来说,它非常实用,不仅功能多,而且好用,而且关键是免费的。提高效率,降低成本,可以说是站长们的福音。
完成采集,步骤很简单,就几个步骤。首先,我们新建一个采集任务,设置任务名称(例如:新闻采集),然后选择我们要采集的数据源,选择新浪新闻。接下来,我们需要为采集到文章找到一个住的地方,选择一个新的空白文件夹,并设置文章的数量关键词采集文章,这取决于你自己的情况。一般小编会选择多导入关键词,一篇关键词采集10篇,最后把关键词或者长尾关键词导入进去没关系。是不是很简单?整个操作过程可以在1分钟内完成。只需简单的点击两下,输入几个字即可完成,与以往复制粘贴的效率形成鲜明对比。
在今天的效率时代,我们必须提高我们的效率,这样我们才能在众多同行和对手中脱颖而出。今天小编的分享就到这里,希望对大家有帮助,天下站长都是一家人。喜欢小编的可以点赞关注。您的喜欢和关注将是我不断的动力。谢谢收看! 查看全部
网站调用新浪微博内容(新浪新闻的采集方法,以及为什么要去采集新浪?)
现在无论你是一个采集站的站长,还是一个普通的采集站长,采集都有一个来源,就是新闻来源。今天小编就和大家聊一聊新浪新闻的采集方法,以及为什么要去采集新浪新闻。
首先我们来看看新浪新闻的介绍:新浪新闻可以及时获取全球新闻资讯、国内外新闻、精彩体育赛事报道、财经财经动态、影视娱乐赛事、独家微博“微” ” 新闻,精彩如你所见,新闻、星座、笑话很多。从这个信息我们可以知道,它基本上覆盖了各行各业,所以也适应了各种采集的需求,不管你在哪个站,新浪采集都可以联系到你需要 文章 资源。新浪作为互联网内容的领头羊,在传播、解读、把握新闻特别是专题方面做得很好。正因为新浪最擅长做新闻,所以它的时效性、时效性、权威性、
分析了这么多优势之后,采集新浪新闻的内容怎么办?可能对于大部分新手或者不懂编码技术的站长来说,只能一一复制粘贴。但是这种情况下效率很低,不能同时满足这么多网站的内容更新。那么如何解决这个问题呢?事实上,这很简单。只需要一个技巧就可以完美解决这个问题。我们完全可以用工具代替劳动力。

小编经常使用的一款免费采集工具,功能强大,不仅可以采集新闻来源,还可以微信公众号、知乎、相关咨询等采集 . 对于我们作为一个站来说,它非常实用,不仅功能多,而且好用,而且关键是免费的。提高效率,降低成本,可以说是站长们的福音。
完成采集,步骤很简单,就几个步骤。首先,我们新建一个采集任务,设置任务名称(例如:新闻采集),然后选择我们要采集的数据源,选择新浪新闻。接下来,我们需要为采集到文章找到一个住的地方,选择一个新的空白文件夹,并设置文章的数量关键词采集文章,这取决于你自己的情况。一般小编会选择多导入关键词,一篇关键词采集10篇,最后把关键词或者长尾关键词导入进去没关系。是不是很简单?整个操作过程可以在1分钟内完成。只需简单的点击两下,输入几个字即可完成,与以往复制粘贴的效率形成鲜明对比。

在今天的效率时代,我们必须提高我们的效率,这样我们才能在众多同行和对手中脱颖而出。今天小编的分享就到这里,希望对大家有帮助,天下站长都是一家人。喜欢小编的可以点赞关注。您的喜欢和关注将是我不断的动力。谢谢收看!
网站调用新浪微博内容([python爬虫]Selenium爬取新浪微博内容及用户信息pyhton微博爬虫 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 57 次浏览 • 2022-01-22 14:09
)
老师交给的任务是对一批批的微博文本进行舆情分析。第一步是捕获数据。我在网上搜索了主要基于移动网页(wap/cn)的爬虫,但是我的电脑上打不开这些网站。
由于我也是网络新手,所以参考别人的代码,硬着头皮直接抓取内容。他们使用非常傻瓜式方法,适合入门。
参考链接:
[python爬虫] Selenium爬取新浪微博内容和用户信息
pyhton微博爬虫(2) - 获取微博用户关注列表
首先是参考第一个文档,通过指定的ID获取微博信息,主要工作是根据网页的电脑版本修改网页元素。
由于需要自己输入用户ID,所以能抓到的信息其实是很有限的,所以我在考虑是用用户的关注度还是粉丝列表来用他们的ID作为这个程序的输入,然后从关注度在这些用户中,粉丝名单的扩大有点类似于病毒的传播,从而可以捕捉到客观数量的用户ID。这涉及到json数据的识别和常规文本的提取。参考第二条。
具体代码放在下面,分成两个py. 还有一个问题我想优化,但是我觉得有点难,就是想把大V、僵尸号、海军去掉,只提取普通用户的信息。希望有兄弟姐妹指导思路。
代码
<p># coding=utf-8
# sinascr.py 输入指定用户ID,爬取这些用户的微博信息和内容
"""
Created on 2018-3-29 @author: goaza123
功能: 爬取新浪微博用户的信息
信息:用户ID 用户名 粉丝数 关注数 微博数 微博内容
网址:http://weibo.com/, http://weibo.cn/无法访问
"""
import time
import re
import os
import sys
import codecs
import shutil
import urllib
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# 先调用无界面浏览器PhantomJS或Firefox
# driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")
driver = webdriver.Firefox()
wait = ui.WebDriverWait(driver, 10)
# 全局变量 文件操作读写信息
inforead = codecs.open("SinaWeibo_List.txt", 'r', 'utf-8')
infofile = codecs.open("SinaWeibo_Info.txt", 'a', 'utf-8')
# ********************************************************************************
# 第一步: 登陆weibo.cn 获取新浪微博的cookie
# 该方法针对weibo.cn有效(明文形式传输数据) weibo.com见学弟设置POST和Header方法
# LoginWeibo(username, password) 参数用户名 密码
# 验证码暂停时间手动输入
# ********************************************************************************
def LoginWeibo(username, password):
try:
# **********************************************************************
# 直接访问driver.get("http://weibo.cn/5824697471")会跳转到登陆页面 用户id
#
# 用户名
# 密码 "password_4903" 中数字会变动,故采用绝对路径方法,否则不能定位到元素
#
# 勾选记住登录状态check默认是保留 故注释掉该代码 不保留Cookie 则'expiry'=None
# **********************************************************************
# 输入用户名/密码登录
print u'准备登陆Weibo.cn网站...'
driver.get("https://weibo.com/")
time.sleep(10) #等待页面载入
elem_user = driver.find_element_by_id('loginname')
elem_user.clear()
elem_user.send_keys(username) # 用户名
elem_pwd = driver.find_element_by_class_name('password').find_element_by_name('password')
elem_pwd.clear()
elem_pwd.send_keys(password) # 密码
# elem_rem = driver.find_element_by_id("login_form_savestate")
# elem_rem.click() #记住登录状态
elem_sub = driver.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[6]/a/span')
elem_sub.click() # 点击登陆
time.sleep(10) # 重点: 暂停时间输入验证码
elem_sub.click() # 点击登陆
# 获取Coockie 推荐 http://www.cnblogs.com/fnng/p/3269450.html
#print driver.current_url
#print driver.get_cookies() # 获得cookie信息 dict存储
#print u'输出Cookie键值对信息:'
for cookie in driver.get_cookies():
# print cookie
for key in cookie:
print key, cookie[key]
# driver.get_cookies()类型list 仅包含一个元素cookie类型dict
print u'登陆成功...'
time.sleep(5)
except Exception, e:
print "Error: ", e
# ********************************************************************************
# 第二步: 访问个人页面http://weibo.cn/302579176并获取信息
# VisitPersonPage()
# 编码常见错误 UnicodeEncodeError: 'ascii' codec can't encode characters
# ********************************************************************************
def VisitPersonPage(user_id):
try:
global infofile
print u'准备访问个人网站.....'
# 原创内容 http://weibo.cn/guangxianliuya ... e%3D2
driver.get("http://weibo.com/" + user_id +"?profile_ftype=1&is_all=1#_0")
# **************************************************************************
# No.1 直接获取 用户昵称 微博数 关注数 粉丝数
# str_name.text是unicode编码类型
# **************************************************************************
# 用户id
print u'个人详细信息'
print '**********************************************'
print u'用户id: ' + user_id
# 昵称
str_name = driver.find_element_by_xpath("//div[@class='pf_username']")
str_t = str_name.text.split(" ")
num_name = str_t[0] # 空格分隔 获取第一个值 "Eastmount 详细资料 设置 新手区"
print u'昵称: ' + num_name
str_intro = driver.find_element_by_xpath("//div[@class='pf_intro']")
str_t = str_intro.text.split(" ")
num_intro = str_t[0] # 空格分隔 获取第一个值 "Eastmount 详细资料 设置 新手区"
print u'简介: ' + num_intro
# Error: 'unicode' object is not callable
# 一般是把字符串当做函数使用了 str定义成字符串 而str()函数再次使用时报错
try:
str_wb = driver.find_element_by_xpath("//td[1]/a[@class='t_link S_txt1']/strong")
except:
str_wb = driver.find_element_by_xpath("//td[@class='S_line1'][1]/strong")
pattern = r"\d+\.?\d*" # 正则提取"微博[0]" 但r"(\[.*?\])"总含[]
guid = re.findall(pattern, str_wb.text, re.S | re.M)
for value in guid:
num_wb = int(value)
break
print u'关注数: ' + str(num_wb)
# 关注数
try:
str_gz = driver.find_element_by_xpath("//td[2]/a[@class='t_link S_txt1']/strong")
except:
str_gz = driver.find_element_by_xpath("//td[@class='S_line1'][2]/strong")
guid = re.findall(pattern, str_gz.text, re.M)
num_gz = int(guid[0])
print u'粉丝数: ' + str(num_gz)
# 粉丝数
try:
str_fs = driver.find_element_by_xpath("//td[3]/a[@class='t_link S_txt1']/strong")
except:
str_fs = driver.find_element_by_xpath("//td[@class='S_line1'][3]/strong")
guid = re.findall(pattern, str_fs.text, re.M)
num_fs = int(guid[0])
print u'微博数: ' + str(num_fs)
# ***************************************************************************
# No.2 文件操作写入信息
# ***************************************************************************
infofile.write('=====================================================================\r\n')
infofile.write(u'用户: ' + user_id + '\r\n')
infofile.write(u'昵称: ' + num_name + '\r\n')
infofile.write(u'简介: ' + num_intro + '\r\n')
infofile.write(u'微博数: ' + str(num_wb) + '\r\n')
infofile.write(u'关注数: ' + str(num_gz) + '\r\n')
infofile.write(u'粉丝数: ' + str(num_fs) + '\r\n')
infofile.write(u'微博内容: ' + '\r\n')
# ***************************************************************************
# No.3 获取微博内容
# http://weibo.cn/guangxianliuya ... e%3D1
# 其中filter=0表示全部 =1表示原创
# ***************************************************************************
print '\n'
print u'获取微博内容信息'
num = 1
while num 查看全部
网站调用新浪微博内容([python爬虫]Selenium爬取新浪微博内容及用户信息pyhton微博爬虫
)
老师交给的任务是对一批批的微博文本进行舆情分析。第一步是捕获数据。我在网上搜索了主要基于移动网页(wap/cn)的爬虫,但是我的电脑上打不开这些网站。
由于我也是网络新手,所以参考别人的代码,硬着头皮直接抓取内容。他们使用非常傻瓜式方法,适合入门。
参考链接:
[python爬虫] Selenium爬取新浪微博内容和用户信息
pyhton微博爬虫(2) - 获取微博用户关注列表
首先是参考第一个文档,通过指定的ID获取微博信息,主要工作是根据网页的电脑版本修改网页元素。
由于需要自己输入用户ID,所以能抓到的信息其实是很有限的,所以我在考虑是用用户的关注度还是粉丝列表来用他们的ID作为这个程序的输入,然后从关注度在这些用户中,粉丝名单的扩大有点类似于病毒的传播,从而可以捕捉到客观数量的用户ID。这涉及到json数据的识别和常规文本的提取。参考第二条。
具体代码放在下面,分成两个py. 还有一个问题我想优化,但是我觉得有点难,就是想把大V、僵尸号、海军去掉,只提取普通用户的信息。希望有兄弟姐妹指导思路。
代码
<p># coding=utf-8
# sinascr.py 输入指定用户ID,爬取这些用户的微博信息和内容
"""
Created on 2018-3-29 @author: goaza123
功能: 爬取新浪微博用户的信息
信息:用户ID 用户名 粉丝数 关注数 微博数 微博内容
网址:http://weibo.com/, http://weibo.cn/无法访问
"""
import time
import re
import os
import sys
import codecs
import shutil
import urllib
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# 先调用无界面浏览器PhantomJS或Firefox
# driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")
driver = webdriver.Firefox()
wait = ui.WebDriverWait(driver, 10)
# 全局变量 文件操作读写信息
inforead = codecs.open("SinaWeibo_List.txt", 'r', 'utf-8')
infofile = codecs.open("SinaWeibo_Info.txt", 'a', 'utf-8')
# ********************************************************************************
# 第一步: 登陆weibo.cn 获取新浪微博的cookie
# 该方法针对weibo.cn有效(明文形式传输数据) weibo.com见学弟设置POST和Header方法
# LoginWeibo(username, password) 参数用户名 密码
# 验证码暂停时间手动输入
# ********************************************************************************
def LoginWeibo(username, password):
try:
# **********************************************************************
# 直接访问driver.get("http://weibo.cn/5824697471")会跳转到登陆页面 用户id
#
# 用户名
# 密码 "password_4903" 中数字会变动,故采用绝对路径方法,否则不能定位到元素
#
# 勾选记住登录状态check默认是保留 故注释掉该代码 不保留Cookie 则'expiry'=None
# **********************************************************************
# 输入用户名/密码登录
print u'准备登陆Weibo.cn网站...'
driver.get("https://weibo.com/")
time.sleep(10) #等待页面载入
elem_user = driver.find_element_by_id('loginname')
elem_user.clear()
elem_user.send_keys(username) # 用户名
elem_pwd = driver.find_element_by_class_name('password').find_element_by_name('password')
elem_pwd.clear()
elem_pwd.send_keys(password) # 密码
# elem_rem = driver.find_element_by_id("login_form_savestate")
# elem_rem.click() #记住登录状态
elem_sub = driver.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[6]/a/span')
elem_sub.click() # 点击登陆
time.sleep(10) # 重点: 暂停时间输入验证码
elem_sub.click() # 点击登陆
# 获取Coockie 推荐 http://www.cnblogs.com/fnng/p/3269450.html
#print driver.current_url
#print driver.get_cookies() # 获得cookie信息 dict存储
#print u'输出Cookie键值对信息:'
for cookie in driver.get_cookies():
# print cookie
for key in cookie:
print key, cookie[key]
# driver.get_cookies()类型list 仅包含一个元素cookie类型dict
print u'登陆成功...'
time.sleep(5)
except Exception, e:
print "Error: ", e
# ********************************************************************************
# 第二步: 访问个人页面http://weibo.cn/302579176并获取信息
# VisitPersonPage()
# 编码常见错误 UnicodeEncodeError: 'ascii' codec can't encode characters
# ********************************************************************************
def VisitPersonPage(user_id):
try:
global infofile
print u'准备访问个人网站.....'
# 原创内容 http://weibo.cn/guangxianliuya ... e%3D2
driver.get("http://weibo.com/" + user_id +"?profile_ftype=1&is_all=1#_0")
# **************************************************************************
# No.1 直接获取 用户昵称 微博数 关注数 粉丝数
# str_name.text是unicode编码类型
# **************************************************************************
# 用户id
print u'个人详细信息'
print '**********************************************'
print u'用户id: ' + user_id
# 昵称
str_name = driver.find_element_by_xpath("//div[@class='pf_username']")
str_t = str_name.text.split(" ")
num_name = str_t[0] # 空格分隔 获取第一个值 "Eastmount 详细资料 设置 新手区"
print u'昵称: ' + num_name
str_intro = driver.find_element_by_xpath("//div[@class='pf_intro']")
str_t = str_intro.text.split(" ")
num_intro = str_t[0] # 空格分隔 获取第一个值 "Eastmount 详细资料 设置 新手区"
print u'简介: ' + num_intro
# Error: 'unicode' object is not callable
# 一般是把字符串当做函数使用了 str定义成字符串 而str()函数再次使用时报错
try:
str_wb = driver.find_element_by_xpath("//td[1]/a[@class='t_link S_txt1']/strong")
except:
str_wb = driver.find_element_by_xpath("//td[@class='S_line1'][1]/strong")
pattern = r"\d+\.?\d*" # 正则提取"微博[0]" 但r"(\[.*?\])"总含[]
guid = re.findall(pattern, str_wb.text, re.S | re.M)
for value in guid:
num_wb = int(value)
break
print u'关注数: ' + str(num_wb)
# 关注数
try:
str_gz = driver.find_element_by_xpath("//td[2]/a[@class='t_link S_txt1']/strong")
except:
str_gz = driver.find_element_by_xpath("//td[@class='S_line1'][2]/strong")
guid = re.findall(pattern, str_gz.text, re.M)
num_gz = int(guid[0])
print u'粉丝数: ' + str(num_gz)
# 粉丝数
try:
str_fs = driver.find_element_by_xpath("//td[3]/a[@class='t_link S_txt1']/strong")
except:
str_fs = driver.find_element_by_xpath("//td[@class='S_line1'][3]/strong")
guid = re.findall(pattern, str_fs.text, re.M)
num_fs = int(guid[0])
print u'微博数: ' + str(num_fs)
# ***************************************************************************
# No.2 文件操作写入信息
# ***************************************************************************
infofile.write('=====================================================================\r\n')
infofile.write(u'用户: ' + user_id + '\r\n')
infofile.write(u'昵称: ' + num_name + '\r\n')
infofile.write(u'简介: ' + num_intro + '\r\n')
infofile.write(u'微博数: ' + str(num_wb) + '\r\n')
infofile.write(u'关注数: ' + str(num_gz) + '\r\n')
infofile.write(u'粉丝数: ' + str(num_fs) + '\r\n')
infofile.write(u'微博内容: ' + '\r\n')
# ***************************************************************************
# No.3 获取微博内容
# http://weibo.cn/guangxianliuya ... e%3D1
# 其中filter=0表示全部 =1表示原创
# ***************************************************************************
print '\n'
print u'获取微博内容信息'
num = 1
while num
网站调用新浪微博内容(新浪微博是利用feed找到更新文章的地址可以成功关联)
网站优化 • 优采云 发表了文章 • 0 个评论 • 70 次浏览 • 2022-01-22 14:08
新浪微博使用提要查找更新文章。只要给他指定提要地址,就可以成功关联。
现在开始简单地修改织梦的模板。由于织梦无法生成整个站点的xml文件,所以需要先创建一个php程序来生成整个站点的xml。
1.创建feed.php
上面要注意的是修改模板的路径,保证模板和目录下都能找到feed.htm
2. 创建 feed.htm 模板文件
{dede:global.cfg_webname/}
{dede:global.cfg_basehost/}
{dede:global.cfg_description/}
zh-cn
{dede:global.cfg_webname/}
{dede:global.cfg_adminemail/}
{dede:arclist row=’60′ col=’1′ titlelen=’100′ orderby=’pubdate’}
[field:arcurl/]
[field:writer/]
[field:typename/]
[field:pubdate function='strftime("%a, %d %b %Y %H:%M:%S +0800",@me)'/]
[field:arcurl/]
{/dede:arclist}
请务必注意,不要忘记将我的 URL 更改为您需要的。
3.修改index.htm首页模板
由于新浪微博只能验证网址,不能写完整路径,比如我写了:. 结果表明关联失败。解决方法是在中间添加如下代码
通过以上方法,就可以成功关联新浪微博了。 查看全部
网站调用新浪微博内容(新浪微博是利用feed找到更新文章的地址可以成功关联)
新浪微博使用提要查找更新文章。只要给他指定提要地址,就可以成功关联。
现在开始简单地修改织梦的模板。由于织梦无法生成整个站点的xml文件,所以需要先创建一个php程序来生成整个站点的xml。
1.创建feed.php
上面要注意的是修改模板的路径,保证模板和目录下都能找到feed.htm
2. 创建 feed.htm 模板文件
{dede:global.cfg_webname/}
{dede:global.cfg_basehost/}
{dede:global.cfg_description/}
zh-cn
{dede:global.cfg_webname/}
{dede:global.cfg_adminemail/}
{dede:arclist row=’60′ col=’1′ titlelen=’100′ orderby=’pubdate’}
[field:arcurl/]
[field:writer/]
[field:typename/]
[field:pubdate function='strftime("%a, %d %b %Y %H:%M:%S +0800",@me)'/]
[field:arcurl/]
{/dede:arclist}
请务必注意,不要忘记将我的 URL 更改为您需要的。
3.修改index.htm首页模板
由于新浪微博只能验证网址,不能写完整路径,比如我写了:. 结果表明关联失败。解决方法是在中间添加如下代码
通过以上方法,就可以成功关联新浪微博了。
网站调用新浪微博内容(一条前置工作去微博开放平台上()申请网站接入审核)
网站优化 • 优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2022-01-22 14:06
一般流程如下
前期工作
去微博开放平台()申请网站访问
审核通过后,App Key 和 App Secret 会分配给你的应用(后面会根据授权码获取 access_token)
填写用户授权成功后的回调地址
1、点击社交登录按钮
社交按钮链接是第三方授权页面
2、跳转到微博授权页面
3、扫码登录后跳转回调页面并携带授权码
:20000/oauth2.0/weibo/success?code =xxxxxxxx
4、在回调接口中,通过授权码,获取access_token,再通过access_token,即可访问微博开启的相关接口
Map map = new HashMap();
map.put("client_id", "2362606657");
map.put("client_secret", "78533622143269d1728d3ae6fdbd8c67");
map.put("grant_type", "authorization_code");
map.put("redirect_uri", "http://auth.gulimall.com:20000 ... 6quot;);
map.put("code", code);
HttpResponse response = HttpUtils.doPost("https://api.weibo.com", "/oauth2/access_token", "post", new HashMap(), null, map);
5、微博授权第三方应用登录时,使用access_token获取微博用户相关信息,进行集成登录,相关代码随意实现
【注意】如果微博社交用户未注册,请先注册并登录;如果已注册,请直接登录
从下图中可以看出,确实是以微博用户登录的。
而在数据库中,确实生成了一条用户记录
相关代码可以参考:gulimall-auth-server下的gulimall-auth-server 查看全部
网站调用新浪微博内容(一条前置工作去微博开放平台上()申请网站接入审核)
一般流程如下

前期工作
去微博开放平台()申请网站访问

审核通过后,App Key 和 App Secret 会分配给你的应用(后面会根据授权码获取 access_token)

填写用户授权成功后的回调地址

1、点击社交登录按钮

社交按钮链接是第三方授权页面

2、跳转到微博授权页面

3、扫码登录后跳转回调页面并携带授权码
:20000/oauth2.0/weibo/success?code =xxxxxxxx
4、在回调接口中,通过授权码,获取access_token,再通过access_token,即可访问微博开启的相关接口
Map map = new HashMap();
map.put("client_id", "2362606657");
map.put("client_secret", "78533622143269d1728d3ae6fdbd8c67");
map.put("grant_type", "authorization_code");
map.put("redirect_uri", "http://auth.gulimall.com:20000 ... 6quot;);
map.put("code", code);
HttpResponse response = HttpUtils.doPost("https://api.weibo.com", "/oauth2/access_token", "post", new HashMap(), null, map);
5、微博授权第三方应用登录时,使用access_token获取微博用户相关信息,进行集成登录,相关代码随意实现
【注意】如果微博社交用户未注册,请先注册并登录;如果已注册,请直接登录
从下图中可以看出,确实是以微博用户登录的。

而在数据库中,确实生成了一条用户记录

相关代码可以参考:gulimall-auth-server下的gulimall-auth-server
网站调用新浪微博内容(【魔兽世界】新浪微博登录常用接口:对应主界面)
网站优化 • 优采云 发表了文章 • 0 个评论 • 65 次浏览 • 2022-01-20 20:11
日志条目
新浪微博登录常用界面:
对应主界面:
不过,我个人推荐使用移动端的微博入口:
对应主界面:
原因是手机上的数据比较轻量级,基础数据齐全,可能会缺少一些基本的个人信息,比如“个人资料完成度”、“个人等级”等。粉丝ID和关注ID只能显示20页,但可以作为大部分验证的语料库。
通过对比下面两张图,分别是PC端和手机端,可以发现内容基本一致:
如下图在手机上,图片比较小,内容也比较简洁。
完整的源代码
下面的代码主要分为三部分:
1.登录微博(用户名、密码) 登录微博
2.VisitPersonPage(user_id) 访问follower网站获取个人信息
3.获取微博内容同时翻页
<p># coding=utf-8
"""
Created on 2016-02-22 @author: Eastmount
功能: 爬取新浪微博用户的信息
信息:用户ID 用户名 粉丝数 关注数 微博数 微博内容
网址:http://weibo.cn/ 数据量更小 相对http://weibo.com/
"""
import time
import re
import os
import sys
import codecs
import shutil
import urllib
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.action_chains import ActionChains
#先调用无界面浏览器PhantomJS或Firefox
#driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")
driver = webdriver.Firefox()
wait = ui.WebDriverWait(driver,10)
#全局变量 文件操作读写信息
inforead = codecs.open("SinaWeibo_List.txt", 'r', 'utf-8')
infofile = codecs.open("SinaWeibo_Info.txt", 'a', 'utf-8')
#********************************************************************************
# 第一步: 登陆weibo.cn 获取新浪微博的cookie
# 该方法针对weibo.cn有效(明文形式传输数据) weibo.com见学弟设置POST和Header方法
# LoginWeibo(username, password) 参数用户名 密码
# 验证码暂停时间手动输入
#********************************************************************************
def LoginWeibo(username, password):
try:
#**********************************************************************
# 直接访问driver.get("http://weibo.cn/5824697471")会跳转到登陆页面 用户id
#
# 用户名
# 密码 "password_4903" 中数字会变动,故采用绝对路径方法,否则不能定位到元素
#
# 勾选记住登录状态check默认是保留 故注释掉该代码 不保留Cookie 则'expiry'=None
#**********************************************************************
#输入用户名/密码登录
print u'准备登陆Weibo.cn网站...'
driver.get("http://login.weibo.cn/login/")
elem_user = driver.find_element_by_name("mobile")
elem_user.send_keys(username) #用户名
elem_pwd = driver.find_element_by_xpath("/html/body/div[2]/form/div/input[2]")
elem_pwd.send_keys(password) #密码
#elem_rem = driver.find_element_by_name("remember")
#elem_rem.click() #记住登录状态
#重点: 暂停时间输入验证码
#pause(millisenconds)
time.sleep(20)
elem_sub = driver.find_element_by_name("submit")
elem_sub.click() #点击登陆
time.sleep(2)
#获取Coockie 推荐 http://www.cnblogs.com/fnng/p/3269450.html
print driver.current_url
print driver.get_cookies() #获得cookie信息 dict存储
print u'输出Cookie键值对信息:'
for cookie in driver.get_cookies():
#print cookie
for key in cookie:
print key, cookie[key]
#driver.get_cookies()类型list 仅包含一个元素cookie类型dict
print u'登陆成功...'
except Exception,e:
print "Error: ",e
finally:
print u'End LoginWeibo!\n\n'
#********************************************************************************
# 第二步: 访问个人页面http://weibo.cn/5824697471并获取信息
# VisitPersonPage()
# 编码常见错误 UnicodeEncodeError: 'ascii' codec can't encode characters
#********************************************************************************
def VisitPersonPage(user_id):
try:
global infofile
print u'准备访问个人网站.....'
#原创内容 http://weibo.cn/guangxianliuya ... e%3D2
driver.get("http://weibo.cn/" + user_id)
#**************************************************************************
# No.1 直接获取 用户昵称 微博数 关注数 粉丝数
# str_name.text是unicode编码类型
#**************************************************************************
#用户id
print u'个人详细信息'
print '**********************************************'
print u'用户id: ' + user_id
#昵称
str_name = driver.find_element_by_xpath("//div[@class='ut']")
str_t = str_name.text.split(" ")
num_name = str_t[0] #空格分隔 获取第一个值 "Eastmount 详细资料 设置 新手区"
print u'昵称: ' + num_name
#微博数 除个人主页 它默认直接显示微博数 无超链接
#Error: 'unicode' object is not callable
#一般是把字符串当做函数使用了 str定义成字符串 而str()函数再次使用时报错
str_wb = driver.find_element_by_xpath("//div[@class='tip2']")
pattern = r"\d+\.?\d*" #正则提取"微博[0]" 但r"(\[.*?\])"总含[]
guid = re.findall(pattern, str_wb.text, re.S|re.M)
print str_wb.text #微博[294] 关注[351] 粉丝[294] 分组[1] @他的
for value in guid:
num_wb = int(value)
break
print u'微博数: ' + str(num_wb)
#关注数
str_gz = driver.find_element_by_xpath("//div[@class='tip2']/a[1]")
guid = re.findall(pattern, str_gz.text, re.M)
num_gz = int(guid[0])
print u'关注数: ' + str(num_gz)
#粉丝数
str_fs = driver.find_element_by_xpath("//div[@class='tip2']/a[2]")
guid = re.findall(pattern, str_fs.text, re.M)
num_fs = int(guid[0])
print u'粉丝数: ' + str(num_fs)
#***************************************************************************
# No.2 文件操作写入信息
#***************************************************************************
infofile.write('=====================================================================\r\n')
infofile.write(u'用户: ' + user_id + '\r\n')
infofile.write(u'昵称: ' + num_name + '\r\n')
infofile.write(u'微博数: ' + str(num_wb) + '\r\n')
infofile.write(u'关注数: ' + str(num_gz) + '\r\n')
infofile.write(u'粉丝数: ' + str(num_fs) + '\r\n')
infofile.write(u'微博内容: ' + '\r\n\r\n')
#***************************************************************************
# No.3 获取微博内容
# http://weibo.cn/guangxianliuya ... e%3D1
# 其中filter=0表示全部 =1表示原创
#***************************************************************************
print '\n'
print u'获取微博内容信息'
num = 1
while num 查看全部
网站调用新浪微博内容(【魔兽世界】新浪微博登录常用接口:对应主界面)
日志条目
新浪微博登录常用界面:
对应主界面:
不过,我个人推荐使用移动端的微博入口:
对应主界面:
原因是手机上的数据比较轻量级,基础数据齐全,可能会缺少一些基本的个人信息,比如“个人资料完成度”、“个人等级”等。粉丝ID和关注ID只能显示20页,但可以作为大部分验证的语料库。
通过对比下面两张图,分别是PC端和手机端,可以发现内容基本一致:
如下图在手机上,图片比较小,内容也比较简洁。
完整的源代码
下面的代码主要分为三部分:
1.登录微博(用户名、密码) 登录微博
2.VisitPersonPage(user_id) 访问follower网站获取个人信息
3.获取微博内容同时翻页
<p># coding=utf-8
"""
Created on 2016-02-22 @author: Eastmount
功能: 爬取新浪微博用户的信息
信息:用户ID 用户名 粉丝数 关注数 微博数 微博内容
网址:http://weibo.cn/ 数据量更小 相对http://weibo.com/
"""
import time
import re
import os
import sys
import codecs
import shutil
import urllib
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.action_chains import ActionChains
#先调用无界面浏览器PhantomJS或Firefox
#driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")
driver = webdriver.Firefox()
wait = ui.WebDriverWait(driver,10)
#全局变量 文件操作读写信息
inforead = codecs.open("SinaWeibo_List.txt", 'r', 'utf-8')
infofile = codecs.open("SinaWeibo_Info.txt", 'a', 'utf-8')
#********************************************************************************
# 第一步: 登陆weibo.cn 获取新浪微博的cookie
# 该方法针对weibo.cn有效(明文形式传输数据) weibo.com见学弟设置POST和Header方法
# LoginWeibo(username, password) 参数用户名 密码
# 验证码暂停时间手动输入
#********************************************************************************
def LoginWeibo(username, password):
try:
#**********************************************************************
# 直接访问driver.get("http://weibo.cn/5824697471")会跳转到登陆页面 用户id
#
# 用户名
# 密码 "password_4903" 中数字会变动,故采用绝对路径方法,否则不能定位到元素
#
# 勾选记住登录状态check默认是保留 故注释掉该代码 不保留Cookie 则'expiry'=None
#**********************************************************************
#输入用户名/密码登录
print u'准备登陆Weibo.cn网站...'
driver.get("http://login.weibo.cn/login/")
elem_user = driver.find_element_by_name("mobile")
elem_user.send_keys(username) #用户名
elem_pwd = driver.find_element_by_xpath("/html/body/div[2]/form/div/input[2]")
elem_pwd.send_keys(password) #密码
#elem_rem = driver.find_element_by_name("remember")
#elem_rem.click() #记住登录状态
#重点: 暂停时间输入验证码
#pause(millisenconds)
time.sleep(20)
elem_sub = driver.find_element_by_name("submit")
elem_sub.click() #点击登陆
time.sleep(2)
#获取Coockie 推荐 http://www.cnblogs.com/fnng/p/3269450.html
print driver.current_url
print driver.get_cookies() #获得cookie信息 dict存储
print u'输出Cookie键值对信息:'
for cookie in driver.get_cookies():
#print cookie
for key in cookie:
print key, cookie[key]
#driver.get_cookies()类型list 仅包含一个元素cookie类型dict
print u'登陆成功...'
except Exception,e:
print "Error: ",e
finally:
print u'End LoginWeibo!\n\n'
#********************************************************************************
# 第二步: 访问个人页面http://weibo.cn/5824697471并获取信息
# VisitPersonPage()
# 编码常见错误 UnicodeEncodeError: 'ascii' codec can't encode characters
#********************************************************************************
def VisitPersonPage(user_id):
try:
global infofile
print u'准备访问个人网站.....'
#原创内容 http://weibo.cn/guangxianliuya ... e%3D2
driver.get("http://weibo.cn/" + user_id)
#**************************************************************************
# No.1 直接获取 用户昵称 微博数 关注数 粉丝数
# str_name.text是unicode编码类型
#**************************************************************************
#用户id
print u'个人详细信息'
print '**********************************************'
print u'用户id: ' + user_id
#昵称
str_name = driver.find_element_by_xpath("//div[@class='ut']")
str_t = str_name.text.split(" ")
num_name = str_t[0] #空格分隔 获取第一个值 "Eastmount 详细资料 设置 新手区"
print u'昵称: ' + num_name
#微博数 除个人主页 它默认直接显示微博数 无超链接
#Error: 'unicode' object is not callable
#一般是把字符串当做函数使用了 str定义成字符串 而str()函数再次使用时报错
str_wb = driver.find_element_by_xpath("//div[@class='tip2']")
pattern = r"\d+\.?\d*" #正则提取"微博[0]" 但r"(\[.*?\])"总含[]
guid = re.findall(pattern, str_wb.text, re.S|re.M)
print str_wb.text #微博[294] 关注[351] 粉丝[294] 分组[1] @他的
for value in guid:
num_wb = int(value)
break
print u'微博数: ' + str(num_wb)
#关注数
str_gz = driver.find_element_by_xpath("//div[@class='tip2']/a[1]")
guid = re.findall(pattern, str_gz.text, re.M)
num_gz = int(guid[0])
print u'关注数: ' + str(num_gz)
#粉丝数
str_fs = driver.find_element_by_xpath("//div[@class='tip2']/a[2]")
guid = re.findall(pattern, str_fs.text, re.M)
num_fs = int(guid[0])
print u'粉丝数: ' + str(num_fs)
#***************************************************************************
# No.2 文件操作写入信息
#***************************************************************************
infofile.write('=====================================================================\r\n')
infofile.write(u'用户: ' + user_id + '\r\n')
infofile.write(u'昵称: ' + num_name + '\r\n')
infofile.write(u'微博数: ' + str(num_wb) + '\r\n')
infofile.write(u'关注数: ' + str(num_gz) + '\r\n')
infofile.write(u'粉丝数: ' + str(num_fs) + '\r\n')
infofile.write(u'微博内容: ' + '\r\n\r\n')
#***************************************************************************
# No.3 获取微博内容
# http://weibo.cn/guangxianliuya ... e%3D1
# 其中filter=0表示全部 =1表示原创
#***************************************************************************
print '\n'
print u'获取微博内容信息'
num = 1
while num