最近突然对腾讯微博上的内容产生了兴趣,于是研究了腾讯微博的API,可是官方给的资料是在看不下去,无奈之下,找到了一个开源的类库,包括腾讯微博和新浪微博的接口,但是最令我纠结的是,这两种API无一例外地都需要在授权以后填写验证码,而这种验证码必须手动输入,无法用程序来获取,所以这条路只好放弃。怎么做呢,当然了分析源代码了,呵呵,这个不多说啦,直接上代码吧!

WebClient Client = new WebClient();
string webstring = Client.DownloadString(Url);//这里获取网页源码当然可以使用HttpWebRequest和HttpWebResponse啦,不过这种在这里貌似比较简单啦!
Regex r = new Regex(@"
http://t3\.qpic\.cn/mblogpic/([a-z|0-9]+?)/460");//这里可以根据网页的代码分析出来 ,但是不同的网页是不一样的,这个不知道是什么原因
MatchCollection m = r.Matches(webstring);
string[] src=new string[m.Count];
for (int i = 0; i <m.Count; i++)
{
string small = m[i].Groups[0].ToString();
int k = small.LastIndexOf("/") + 1;
small = small.Substring(0,k);
small = small + "2000";//如果你仔细研究过腾讯微博的图片,就会发现鼠标点击显示大图其实是把大图和小图分开储存的,小图是460,大图是2000
string filename = Application.StartupPath + @"\images\" + m[i].Groups[1].ToString() + ".jpg";
Client.DownloadFileAsync(new System.Uri(small),filename);
src[i]=Application.StartupPath + @"\images\" + m[i].Groups[1].ToString() + ".jpg";
}
return src;

一个问题:WebClient 不支持并发 I/O 操作

使用WebClinet可能会触发这个错误,这是因为一个webclient实例一次只能连到一个服务器,所以连第二个就会出错。用循环创建实例的方法可以解决,即需要在循环体内重新new WebClient.。

使用正则表达式抓取腾讯微博上的图片的更多相关文章

  1. Swift中if与switch语句使用一例

    在Swift中相同的条件处理有if和switch两个语句,我们如何取舍呢?换句话说不关心在满足范围条件的其他情况下,此时我们可以考虑用if而不是switch.我们先来看一下用switch的情况:说句题外话,我们可以将default子句换为如下代码,作用是一样的:但是在上面这个例子中,我并不关心othersize这种情况,但我在switch中还是不得不考虑到所有情况啊!这是如果用if来写的话,就会简单很多:是不是清爽了不少呢!?就是这样了,这就是本猫要阐明的观点喽,谢谢观赏;]

  2. android – 按密度分割APK仍包含所有资源

    我决定尝试apksliptting来减少我的apk的大小.我将以下内容添加到我的gradle构建文件中这成功地为各种密度生成单独的apks.但是,我注意到所有apks都是相同的大小,没有一个比通用apk小.所以,我将一个加载到apk分析器中,发现它包含所有资源.没有人被剥夺.因此,所有配置都有效地生成了具有不同文件名的相同apk.我错过了什么吗?是否有任何其他构建选项可能会阻止正在删除的资源?

  3. android – 创建包并发送到新活动

    我在一个活动中创建一个包,然后在另一个活动中提取它这是它在主要活动中创建的时间然后,当我提取其他活动当我在第二个活动中提取包时应用程序崩溃.但是当我注释掉束的提取时.该应用运行正常.所以我把它缩小到了那个范围.我的日志猫并没有真正解释错误是什么,或者我只是不明白它想法?解决方法您在调用startActivity后添加以下代码;把它放在startActivity之前;

  4. 在Android中

    美好的一天,我试图在谷歌播放中将屏幕尺寸限制为仅手机.在我找到这个article后,我将其添加到我的清单文件中:但现在看来,使用5.5英寸手机的用户无法安装我的应用程序.接下来我也发现了这个article和图片:我的第一个问题–是否可以将屏幕尺寸限制为特定的英寸值,或者我只能使用小型,普通型,大型和Xlarge等标签?

  5. JavaScript中的small()方法使用详解

    这篇文章主要介绍了JavaScript中的small()方法使用详解,是JS入门学习中的基础知识,需要的朋友可以参考下

  6. python神经网络MobileNetV3 small模型的复现详解

    这篇文章主要为大家介绍了python神经网络MobileNetV3 small模型的复现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  7. 正则表达式 – 组内组

    部分,显然你不关心.如果你想避免这种无用的捕获,你可以使用非捕获组(?

  8. 使用正则表达式抓取腾讯微博上的图片

    最近突然对腾讯微博上的内容产生了兴趣,于是研究了腾讯微博的API,可是官方给的资料是在看不下去,无奈之下,找到了一个开源的类库,包括腾讯微博和新浪微博的接口,但是最令我纠结的是,这两种API无一例外地都需要在授权以后填写验证码,而这种验证码必须手动输入,无法用程序来获取,所以这条路只好放弃。用循环创建实例的方法可以解决,即需要在循环体内重新newWebClient.。

  9. php – 奇怪的数组语法

    我试图弄清楚我被赋予的功能是如何工作的–或者说不起作用.有问题的区域包括这样的数组表示法:我认为这个想法是将“0”附加到$end[$i]的值,并将其用于$small的索引.但它在PHP5.3中不起作用.这是一种弃用的语法,它是否正在尝试按我认为的那样做?它从$end[$i]字符串中获取第一个字符,然后使用该字符作为数组键访问$small数组.编辑:Since$foo=200;$foo[0]!

  10. jQuery:但是所有的孩子呢?

    我觉得我必须使用太多的.children()在我的一些jQuery函数。这是我的HTML:这是我的jQuery:有没有更好的办法?告诉我孩子们解决方法或更简单地:

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部