JAVA 抓取搜索网页内容
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA 抓取搜索网页内容相关的知识,希望对你有一定的参考价值。
用java一个抓取下面网页的搜索内容
http://www.cfed.cnki.net/zongku/jiansuo/SingleSearch.aspx?id=cfjd&NaviDbName=ZTNavi&ExportClassCode=cc&NaviField=&ClassGrade=0&resultsearch=0¶ms=%d6%f7%cc%e2_%c2%e8%c2%e8_1&beginYear=2000&endYear=2009&sort1=%d6%f7%cc%e2&pipei=%be%ab%c8%b7&sort=1&NaviCodeList=CC01%3f%2bCC02%3f%2bCC03%3f%2bCC04%3f%2bCC05%3f%2bCC06%3f%2bCC07%3f%2bCC08%3f%2bCC09%3f%2bCC10%3f%2bCC11%3f%2bCC13%3f
代码大致如下
url = new URL(
"http://www.cfed.cnki.net/zongku/jiansuo/SingleSearch.aspx?id=cfjd&NaviDbName=ZTNavi&ExportClassCode=cc&NaviField=&ClassGrade=0&resultsearch=0¶ms=%d6%f7%cc%e2_%c2%e8%c2%e8_1&beginYear=2000&endYear=2009&sort1=%d6%f7%cc%e2&pipei=%be%ab%c8%b7&sort=1&NaviCodeList=CC01%3f%2bCC02%3f%2bCC03%3f%2bCC04%3f%2bCC05%3f%2bCC06%3f%2bCC07%3f%2bCC08%3f%2bCC09%3f%2bCC10%3f%2bCC11%3f%2bCC13%3f");
// 打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。
conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
OutputStream output = conn.getOutputStream();
String params = "";
params = params + "__VIEWSTATE=。。。省略viewstate";
params = params + "&NaviCode=CC01?+CC02?+CC03?+CC04?+CC05?+CC06?+CC07?+CC08?+CC09?+CC10?+CC11?+CC13?";
params = params + "&HiddenP=主题_妈妈_1";
params = params + "&txtdbname=CFJD";
params = params + "&txtNaviField=子栏目代码";
output.write(params.getBytes());
output.flush();
output.close();
InputStream in = conn.getInputStream(); // 打开到这个URL的流
StringBuffer rslt = new StringBuffer();
byte[] buffer = new byte[4096];
int bytes_read;
while ((bytes_read = in.read(buffer)) != -1)
// String reads = new String(buffer, 0, bytes_read,"UTF-8");
String reads = new String(buffer, 0, bytes_read, "GB2312");
System.out.println(reads);
// rslt.append(reads);
in.close();
但是这样不能获取到页面的搜索内容。相当于没有点搜索之前的内容。
如何才能模拟点击搜索后抓取页面内容。
求高人指点。
谢谢 shalooloowf!
我知道baidu的搜索时可以通过get方式直接抓取的。但是你可以吧那个链接copy到浏览器去试一下,如果不点击搜索的话是不会出来东西的。
请高人再看看!
URL url = new URL(ur);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("GET");
conn.setReadTimeout(30000);
System.out.println(conn.getContentLength());
InputStream in = conn.getInputStream(); // 打开到这个URL的流
StringBuffer rslt = new StringBuffer();
byte[] buffer = new byte[4096];
int bytes_read;
while ((bytes_read = in.read(buffer)) != -1)
// String reads = new String(buffer, 0, bytes_read,"UTF-8");
String reads = new String(buffer, 0, bytes_read, "GB2312");
System.out.println(reads);
// rslt.append(reads);
in.close();
//System.err.println((char)(32));
这个啊,你用个工具把他那个网页中的元素分析一下,
看看他在查询的时候往后台传送什么信息。包括参数,后台处理URL等。
然后自己做个接口模拟调用就可以 参考技术B 终于明白问题究竟是什么意思了.......用自己写的查看源代码的函数,无法正常获得包含查询结果的网页源码............试了几种post......都没结果.....没办法...等高手了.....
0079007这个用户...很强....要不向他求助下...你就说有个很怪异的网站,用post方式提交查询参数, 似乎还只能在浏览器里出结果..... 参考技术C 晚上帮你解决
python怎么抓取网页中DIV的文字
第一张图是我抓取整个网页的代码,怎么修改把所有title的文字抓取出来?
1、编写爬虫思路:确定下载目标,找到网页,找到网页中需要的内容。对数据进行处理。保存数据。
2、知识点说明:
1)确定网络中需要的信息,打开网页后使用F12打开开发者模式。
在Network中可以看到很多信息,我们在页面上看到的文字信息都保存在一个html文件中。点击文件后可以看到response,文字信息都包含在response中。
对于需要输入的信息,可以使用ctrl+f,进行搜索。查看信息前后包含哪些特定字段。
对于超链接的提取,可以使用最左边的箭头点击超链接,这时Elements会打开有该条超链接的信息,从中判断需要提取的信息。从下载小说来看,在目录页提取出小说的链接和章节名。
2)注意编码格式
输入字符集一定要设置成utf-8。页面大多为GBK字符集。不设置会乱码。 参考技术A
使用 BeautifulSoup 进行解析 html,需要安装 BeautifulSoup
#coding=utf-8import urllib2
import socket
import httplib
from bs4 import BeautifulSoup
UserAgent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36'
def downloadPage(url):
try:
opener = urllib2.build_opener()
headers = 'User-Agent': UserAgent
req = urllib2.Request(url = url, headers = headers)
resp = opener.open(req, timeout = 30)
result = resp.read()
return result
except urllib2.HTTPError, ex:
print ex
return ''
except urllib2.URLError, ex:
print ex
return ''
except socket.error, ex:
print ex
return ''
except httplib.BadStatusLine, ex:
print ex
return ''
if __name__ == '__main__':
content = downloadPage("这填douban的地址")
#print content
soap = BeautifulSoup(content, 'lxml')
lst = soap.select('ol.grid_view li')
for item in lst:
# 电影详情页链接
print item.select('div.item > div.pic a')[0].attrs['href']
# 图片链接
print item.select('div.item > div.pic a img')[0].attrs['src']
# 标题
print item.select('div.item > div.info > div.hd > a > span.title')[0].get_text()
# 评分
print item.select('div.item > div.info > div.bd > div.star > span.rating_num')[0].get_text()
print '-------------------------------------------------------------------------'本回答被提问者和网友采纳 参考技术B 最简单的还是用DW,贴到里面,然后就能做了,也不是很难追问
我现在学的又不是DW,你和我说DW干啥?
以上是关于JAVA 抓取搜索网页内容的主要内容,如果未能解决你的问题,请参考以下文章