怎么根据关键字获得百度和谷歌的搜索结果前面的100条记录的标题

liumingwei2009 2010-08-30 10:54:02
我的想法是根据关键字拼接百度和谷歌的URL然后连接获得页面,但是得到的是页面源代码。
但是一页显示不了一百条记录啊 那是不是还有分页才能获取 怎么判断已经得到了100条记录呢?
有没人有具体点的算法?
...全文
390 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
shehun 2010-08-30
  • 打赏
  • 举报
回复
这个应该是通过数据库操作的吧,再查找数据时,通过数据库可以查到多少条数据,只是在现实时按每页多少条数据显示就可以了。
shehun 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 huntor 的回复:]

baidu Java code
java.net.URLEncoder.encode(string,"GB2312");

google Java code
java.net.URLEncoder.encode(string,"UTF-8");
[/Quote]

这样只解决的编码问题
huntor 2010-08-30
  • 打赏
  • 举报
回复
baidu
java.net.URLEncoder.encode(string,"GB2312");

google
java.net.URLEncoder.encode(string,"UTF-8");
liumingwei2009 2010-08-30
  • 打赏
  • 举报
回复
你说的是不是中文编码的问题 这个JDK的net包里有专门的类可以直接编码跟解码。
现在关键的问题是不知道怎么处理获得的页面源代码。来获取标题内容
t2xingzhe 2010-08-30
  • 打赏
  • 举报
回复
百度会对你查询后的关键字做处理,比如你查询“哈哈”,它提交之后是这种连接
http://www.baidu.com/s?bs=%C5%AE%C8%CB&f=8&wd=%B9%FE%B9%FE
你要是知道百度是通过什么算法转化的不如告诉我下,或者其他牛人告诉也行~~

这个是查询“哈哈”之后第四页的连接http://www.baidu.com/s?wd=%B9%FE%B9%FE&pn=30&usm=2
"pn=30"来控制是第几页,每页显示10条数据,所以pn=90就是第十页

关于得到记录,你可以读取网页源代码,写个正则,抓取想要的链接href="http://www.haha1.com/" target="_blank" ><font size="3"><em>哈哈</em>蚁在线音乐</font></a><br
关键字是放在<em>标签里的,抓取后还得replacall来做替换

总体来说不好做,主要就是关键字转化的问题,谁知道是怎么转化的?

qingtianliuyun 2010-08-30
  • 打赏
  • 举报
回复
怎么感觉有点像RSS抓取页面信息,楼主可以去关注下RSS,他可以做这方面的工作
liumingwei2009 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 huntor 的回复:]

每页100比默认的10 。 url 多了
google.com &num=100
baidu.com &rn=100
[/Quote]
恩 我也刚刚发现了百度是这个参数控制的。
huntor 2010-08-30
  • 打赏
  • 举报
回复

// 百度结果
Elements elements = doc.select("td.f > a");
for(Element link : elements){
System.out.println(link.text());
System.out.println(link.attr("href"));
}



// Google结果
Elements elements = doc.select("h3.r > a.l");
for(Element link : elements){
System.out.println(link.text());
System.out.println(link.attr("href"));
}
t2xingzhe 2010-08-30
  • 打赏
  • 举报
回复
楼主..你的多加强动手能力了。。。我刚才设置了一下每页显示100条数据,就是多了一个字段来控制,你只要在搜索的url后面加上&rn=100就能查找出100条数据了。。。

Jsoup的确很强大,不过我现在还是多用自己手写几个小正则来解决~~比如查找你说的搜索出来网页源代码里的标题,我就用这个
regx = "<font size=\"3\">.*?</font>";


虽然有点取巧吧~~顺便说一句.*?真的很强大~
huntor 2010-08-30
  • 打赏
  • 举报
回复
每页100比默认的10 。 url 多了
google.com &num=100
baidu.com &rn=100
liumingwei2009 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 t2xingzhe 的回复:]

你为什么一定要一次获取100条的呢?每页十条,分成十次取源代码不好吗?
[/Quote]
一次都取出来应该好一些吧
liumingwei2009 2010-08-30
  • 打赏
  • 举报
回复
本来是想学习一下HTMLParser的 看到Jsoup貌似更强大。
liumingwei2009 2010-08-30
  • 打赏
  • 举报
回复
我能根据关键字构造URL 能 获得URL的页面源代码但是不知道具体怎样解析出100条记录的标题。

我看了一下百度里有个设置可以每页显示100条记录,肯定有个参数可以控制,这样就可以获得每页显示100条结果的页面了。
然后就只剩下解析出搜索结果的标题了。
t2xingzhe 2010-08-30
  • 打赏
  • 举报
回复
你为什么一定要一次获取100条的呢?每页十条,分成十次取源代码不好吗?
t2xingzhe 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 huntor 的回复:]
搜索结果可以使用Jsoup分析。
Jsoup现在支持CSS风格的选择。
Elements rs = doc.select("h3.r > a.l"); // google.com
[/Quote]

这个还是挺好用的,前几天我求那个连接的正则代码,这位仁兄就是推荐我用这个包,还是挺好用的
t2xingzhe 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 huntor 的回复:]
baidu

Java code
java.net.URLEncoder.encode(string,"GB2312");

google

Java code
java.net.URLEncoder.encode(string,"UTF-8");
[/Quote]

有这个就好说了,不过楼主既然都知道这个编码竟然不知道怎么读取网页的源代码?小小的诧异了一下
huntor 2010-08-30
  • 打赏
  • 举报
回复
搜索结果可以使用Jsoup分析。
Jsoup现在支持CSS风格的选择。
Elements rs = doc.select("h3.r > a.l"); // google.com
liumingwei2009 2010-08-30
  • 打赏
  • 举报
回复
百度的URL:http://www.baidu.com/s?tn=site888_pg&wd=a(wd参数就是关键字)
还有个参数pn=10就是第10到20条 依次类推 有没有一次获取100条的
Inhibitory 2010-08-30
  • 打赏
  • 举报
回复
http://www.baidu.com/s?bs=%C5%AE%C8%CB&f=8&wd=%B9%FE%B9%FE
你要是知道百度是通过什么算法转化的不如告诉我下

这个使用的是javascriipt的函数encodeURIComponent
liumingwei2009 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 shehun 的回复:]

这个应该是通过数据库操作的吧,再查找数据时,通过数据库可以查到多少条数据,只是在现实时按每页多少条数据显示就可以了。
[/Quote]
这个每页显示多少条有没有参数可以控制,应该不可能去百度的数据库里查吧

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧