新浪微博关键字搜索结果抓取

   我在实现抓取关键字搜索结果的时候确实遇到的验证码识别问题很蛋疼,一开始本来想破解验证码,后来查了资料发现,这个很难;就像实现手动填写验证码。

网上提供手动填写验证码的基本实现思路是:

1. 请求获取图片。

2. 保存图片至本地。

3. 打开图片。

4.手动填写验证码,模拟请求验证码识别验证。

后来看了别人的blog发现一个更简单暴力的方法,就是开浏览器填写验证码。

//打开浏览器,手动输入验证码
Desktop desktop = Desktop.getDesktop();   
    if (Desktop.isDesktopSupported()&& desktop.isSupported(Desktop.Action.BROWSE)) {   
           URI uri = new URI(searchUrl);   
           desktop.browse(uri);    
    }

这个方法虽然解决了验证码识别问题,但是需要人工反复填写验证码;抓取效率不高;只适合临时数据采集。


既然这个方法效率不高,那有没有其他实现办法呢!答案是有的,我们可以尝试抓取手机端新浪微博内容。

但是抓取手机端新浪微博的时候要注意额!抓取过于频繁ip可能会被封,一定要注意抓取时间间隔。代码如下:(其中的工具类代码就不贴了)

public void keyWordsSearch(String keyword){
try {
String searchHomeUrl = "http://weibo.cn/search/?tf=5_012&vt=4";
HtmlPage searchHomePage = client.getPage(searchHomeUrl);


//搜索表单
HtmlForm searchForm = searchHomePage.getForms().get(0);
HtmlTextInput keywordField = searchForm.getInputByName("keyword");
HtmlSubmitInput searchBlogField = searchForm.getInputByName("smblog");

//模拟设值搜索框操作
keywordField.click();
keywordField.setValueAttribute(keyword);
keywordField.blur();
//模拟设值搜索微博按钮操作
HtmlPage nowPage = searchBlogField.click();
// System.out.println(nowPage.asText());
HtmlPage nextPage = null;
HtmlAnchor nextAnchor = null;
for(int i=0; i<100; i++){
// System.out.println("第"+(i+1)+"页");
// System.out.println(nowPage.asText());
String responseContent = nowPage.getWebResponse().getContentAsString();
HtmlCleaner cleaner = new HtmlCleaner();
TagNode rootNode = cleaner.clean(responseContent);

Object[] cDivNodes

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值