求教,怎么抓取网页中的表格数据

狼异族 2015-12-22 09:48:50
http://www.sse.com.cn/disclosure/diclosure/block
这个是网址
网页里面的表格数据不是直接呈现在网页源码里面的,我在这个网页相关的js文件中也没找到这个数据,我改怎么去抓取这个数据呢?
...全文
1641 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
狼异族 2015-12-30
  • 打赏
  • 举报
回复
引用 9 楼 L812234929 的回复:
但是新的问题了又来了,通过这个地址下载的数据都是最新的,就算我加上startDate和endDate参数也不行,不知道怎么回事
原来是sqlId不一样
狼异族 2015-12-29
  • 打赏
  • 举报
回复
但是新的问题了又来了,通过这个地址下载的数据都是最新的,就算我加上startDate和endDate参数也不行,不知道怎么回事
狼异族 2015-12-29
  • 打赏
  • 举报
回复
数据获取的问题解决了,代码如下:
	CString strURL	= "http://query.sse.com.cn/commonQuery.do?jsonCallBack=&isPagination=false&sqlId=COMMON_SSE_XXPL_JYXXPL_DZJYXX_LATEST_L&stockId=&startDate=2015-12-22&endDate=2015-12-24&pageHelp.pageSize=20&pageHelp.cacheSize=5&_=";
	CString strRefer	= "http://www.sse.com.cn/disclosure/diclosure/block";
    CString strFile = "D:\\test.txt";
	CInternetSession Session( "Internet Explorer"
		, 0
		, INTERNET_OPEN_TYPE_PRECONFIG
		, NULL
		, NULL
		, INTERNET_FLAG_DONT_CACHE );
	
	CString szUrlAccessError;
	CHttpConnection *pServer = NULL;
	CHttpFile *pHttpFile = NULL;

	TRY 
	{
		DWORD dwServiceType;
		CString strServer;
		CString strObject;
		INTERNET_PORT nPort;

		BOOL bParsed = AfxParseURL(strURL, dwServiceType, strServer, strObject, nPort);
 		if (bParsed)
		{
			pServer = Session.GetHttpConnection(strServer, nPort);
			if (pServer)
			{
				DWORD dwRet = 0;
				pHttpFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET, strObject, strRefer, 1, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION);
				if (pHttpFile)
				{
					CFile file;
					BOOL bSendRequest = pHttpFile->SendRequest();
					if (bSendRequest)
					{
						pHttpFile->QueryInfoStatusCode(dwRet);
						if (HTTP_STATUS_OK == dwRet)
						{
							CString str;
							pHttpFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH, str);
							DWORD dwFileLen = _ttol(str);
							DWORD dwFileLenReceived = 0;

							BYTE buf[1024];
							if (file.Open(strFile, CFile::modeCreate|CFile::modeWrite))
							{
								TRY 
								{
									UINT uSize = 0;
									uSize = pHttpFile->Read(buf, 1024);
									do 
									{
										file.Write(buf, uSize);
										dwFileLenReceived += (DWORD)uSize;
									}while (uSize = pHttpFile->Read(buf, 1024));
								}
								CATCH_ALL(e)
								{
									CString szError;
									e->GetErrorMessage( szError.GetBuffer(1024), 1024 );
									szError.ReleaseBuffer();
									szUrlAccessError.Format( "访问URL(%s)发生异常: %s", strURL, szError );
								}
								END_CATCH_ALL;

								file.Close();
							}

							if (dwFileLenReceived == 0)
							{
								szUrlAccessError.Format("下载文件有错:实际下载大小%u", dwFileLenReceived);
							}

						}
						else
						{
							szUrlAccessError.Format( "HTTP返回值错误: %u, %s", dwRet, strURL );
						}
					}

					pHttpFile->Close();
					delete pHttpFile;
				}
				else
				{
					szUrlAccessError.Format( "打开Internet对象出错: %s", strURL );
				}

				delete pServer;
			}
			else
			{
				szUrlAccessError.Format( "建立Internet连接出错: %s", strURL );
			}
		}
		else
		{
			szUrlAccessError.Format( "URL解析出错:%s", strURL );
		}
	}
	CATCH_ALL(e)
	{
		if (pHttpFile)
		{
			pHttpFile->Close();
			delete pHttpFile;
		}

		if (pServer)
		{
			pServer->Close();
			delete pServer;
		}

		CString szError;
		e->GetErrorMessage( szError.GetBuffer(1024), 1024 );
		szError.ReleaseBuffer();
		szUrlAccessError.Format( "访问URL(%s)发生异常: %s", strURL, szError );
	}
	END_CATCH_ALL

	Session.Close();
wuheng_1 2015-12-25
  • 打赏
  • 举报
回复
读HTTP协议文本RFC2616吧,通过TCP连上对方网站,依协议读取数据即可。 可以找一下相关的库。 那个尾巴是网站自定义的,可能保存了些历史数据。
狼异族 2015-12-23
  • 打赏
  • 举报
回复
引用 3 楼 jiu6332356 的回复:
这应该是个json数据 我用抓包工具 fiddler 试了下 应该是这个地址 但是具体怎么做就不知道了 我直接访问获取不到 但是用抓包工具可以看到那个列表是这个接口获取的 http://query.sse.com.cn/commonQuery.do?jsonCallBack=jsonpCallback10833&isPagination=true&sqlId=COMMON_SSE_XXPL_JYXXPL_DZJYXX_LATEST_L&stockId=&startDate=&endDate=&pageHelp.pageSize=20&pageHelp.cacheSize=5&_=1450772236889
还有最后的那个尾巴_=1450772236889不知道是什么意思
狼异族 2015-12-23
  • 打赏
  • 举报
回复
引用 3 楼 jiu6332356 的回复:
这应该是个json数据 我用抓包工具 fiddler 试了下 应该是这个地址 但是具体怎么做就不知道了 我直接访问获取不到 但是用抓包工具可以看到那个列表是这个接口获取的 http://query.sse.com.cn/commonQuery.do?jsonCallBack=jsonpCallback10833&isPagination=true&sqlId=COMMON_SSE_XXPL_JYXXPL_DZJYXX_LATEST_L&stockId=&startDate=&endDate=&pageHelp.pageSize=20&pageHelp.cacheSize=5&_=1450772236889
我用IE调试的时候也得到了这个地址,但是不能单独用啊,报没找到这个json文件,估计是jsonpCallback10833这个文件是IE临时创建的一个,但是不知道创建在哪里了
smwhotjay 2015-12-23
  • 打赏
  • 举报
回复
1.获取html 2.获取表格 3.分析表格
狼异族 2015-12-22
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
ajax异步返回的数据,你需要用浏览器等来做
求教,具体怎么操作,我用的MFC,想把这些数据转存到excel中,但是不知道具体怎么获取数据
oyljerry 2015-12-22
  • 打赏
  • 举报
回复
ajax异步返回的数据,你需要用浏览器等来做
jiu6332356 2015-12-22
  • 打赏
  • 举报
回复
这应该是个json数据 我用抓包工具 fiddler 试了下 应该是这个地址 但是具体怎么做就不知道了 我直接访问获取不到 但是用抓包工具可以看到那个列表是这个接口获取的 http://query.sse.com.cn/commonQuery.do?jsonCallBack=jsonpCallback10833&isPagination=true&sqlId=COMMON_SSE_XXPL_JYXXPL_DZJYXX_LATEST_L&stockId=&startDate=&endDate=&pageHelp.pageSize=20&pageHelp.cacheSize=5&_=1450772236889

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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