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到浏览器去试一下,如果不点击搜索的话是不会出来东西的。
请高人再看看!

参考技术A String ur="http://www.baidu.com/s?wd=asdf";
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-8

import 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 抓取搜索网页内容的主要内容,如果未能解决你的问题,请参考以下文章

如何用Java抓取网页的具体内容

如何利用java中url实现网页内容的抓取

谷歌搜索即将启用HTTP/2 方式抓取网页内容

java爬虫抓取指定数据

网络爬虫Java实现抓取网页内容

走过路过不要错过~java语言抓取网页想要的内容