为什么我批量查询出来的结果并采集下来有多个网址里面的东西采集不到

zxc7298183 2014-07-09 10:23:29
我是同过http://seo.chinaz.com/ 这个网站里面的查询功能 查询我输入的网址信息 我就写了个批量查询功能,把每个我自己想要查询的网址输入进去 我单个查询并采集下来没有出现任何问题 我用批量查询500个网址 就会出现很多很多网址采集下来的内容不完全,或者完全采集不到这个是什么问题 大神们能不能帮我一下
...全文
148 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
save4me 2014-07-13
  • 打赏
  • 举报
回复
先在很多网站为了提高网页速度,会在服务器设置压缩,通常会在响应头中看到gzip之类的内容。你可以自定义一个类继承WebClient来自动处理 参考: Uncompressing gzip response from WebClient

public class GZipWebClient : WebClient
{
    protected override WebRequest GetWebRequest(Uri address)
    {
        HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
        request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
        return request;
    }
}
或者根据响应头来使用不同的方法读取内容 参考: System.Net.WebClient.DownloadString chunked gzip

private static void DownloadSync(Uri address, Stream outputStream, int bufferSize = 4096)
{
    using (var webClient = new WebClient())
    using (var responseStream = webClient.OpenRead(address))
    {
        var responseHeaders = webClient.ResponseHeaders;
        Stream decompressedStream;

        if
        (
            responseHeaders[HttpResponseHeader.TransferEncoding]=="chunked" &&
            responseHeaders[HttpResponseHeader.ContentEncoding]=="gzip"
        )
        {
            decompressedStream = new GZipStream(responseStream, CompressionMode.Decompress, false);
        }
        else
        {
            decompressedStream = responseStream;
        }

        using (decompressedStream)
        {
            var buffer = new byte[bufferSize];

            while (true)
            {
                var amount = decompressedStream.Read(buffer, 0, bufferSize);

                if (amount==0)
                {
                    return;
                }

                outputStream.Write(buffer, 0, amount);
            }
        }
    }
}
建议使用两个开源的类库 苏飞的C#HttpHelper是挺好的抓取类库 Html Agility Pack是很好用的html解析类库
引用 9 楼 zxc7298183 的回复:
[quote=引用 7 楼 save4me 的回复:] 你是用httpwebrequest去采集的吗?你是怎么判断网页长度的,有没有处理gzip压缩等情况?
我是用 WebClient MyWebClient1 = new WebClient(); 通过正则表达式采集的 没有处理gzip压缩等情况[/quote]
zxc7298183 2014-07-09
  • 打赏
  • 举报
回复
引用 11 楼 Z65443344 的回复:
[quote=引用 5 楼 zxc7298183 的回复:] [quote=引用 2 楼 wangnaisheng 的回复:] http://download.csdn.net/detail/gaochaotian/7563931
我是直接用500个网址 自动查询完一个就接着下一个网址一直到500个然后在保存[/quote] 先确定那些不能查询到或信息不完整的网址,单独查询会不会有问题,如果也有问题,参考7楼大神说的,自己检查代码吧 如果单独能查到,放循环里就查不到了,检查下逻辑,确认已经返回完整信息了才开始下一次循环的么?[/quote] 我单个试过了 也用断点测试了 都没有问题 就是放在循环里面才会不出现我说的那种情况 你说的:确认已经返回完整信息了才开始下一次循环的么? 这个我没有设置 这个要这么设置呢?
於黾 2014-07-09
  • 打赏
  • 举报
回复
引用 5 楼 zxc7298183 的回复:
[quote=引用 2 楼 wangnaisheng 的回复:] http://download.csdn.net/detail/gaochaotian/7563931
我是直接用500个网址 自动查询完一个就接着下一个网址一直到500个然后在保存[/quote] 先确定那些不能查询到或信息不完整的网址,单独查询会不会有问题,如果也有问题,参考7楼大神说的,自己检查代码吧 如果单独能查到,放循环里就查不到了,检查下逻辑,确认已经返回完整信息了才开始下一次循环的么?
zxc7298183 2014-07-09
  • 打赏
  • 举报
回复
引用 7 楼 save4me 的回复:
你是用httpwebrequest去采集的吗?你是怎么判断网页长度的,有没有处理gzip压缩等情况?
我用正则表达式直接匹配到我想要的那些部分就直接采集下来
zxc7298183 2014-07-09
  • 打赏
  • 举报
回复
引用 7 楼 save4me 的回复:
你是用httpwebrequest去采集的吗?你是怎么判断网页长度的,有没有处理gzip压缩等情况?
我是用 WebClient MyWebClient1 = new WebClient(); 通过正则表达式采集的 没有处理gzip压缩等情况
zxc7298183 2014-07-09
  • 打赏
  • 举报
回复
引用 5 楼 zxc7298183 的回复:
[quote=引用 2 楼 wangnaisheng 的回复:] http://download.csdn.net/detail/gaochaotian/7563931
我是直接用500个网址 自动查询完一个就接着下一个网址一直到500个然后在保存[/quote] 我是用的循环的 功能我都实现了 就是有些数据采集下来 有些采集不完全会少一些东西 有些 就是根本采集不到郁闷死我了
save4me 2014-07-09
  • 打赏
  • 举报
回复
你是用httpwebrequest去采集的吗?你是怎么判断网页长度的,有没有处理gzip压缩等情况?
PaulyJiang 2014-07-09
  • 打赏
  • 举报
回复
用循环吧 慢慢等
zxc7298183 2014-07-09
  • 打赏
  • 举报
回复
引用 2 楼 wangnaisheng 的回复:
http://download.csdn.net/detail/gaochaotian/7563931
我是直接用500个网址 自动查询完一个就接着下一个网址一直到500个然后在保存
zxc7298183 2014-07-09
  • 打赏
  • 举报
回复
引用 楼主 zxc7298183 的回复:
我是同过http://seo.chinaz.com/ 这个网站里面的查询功能 查询我输入的网址信息 我就写了个批量查询功能,把每个我自己想要查询的网址输入进去 我单个查询并采集下来没有出现任何问题 我用批量查询500个网址 就会出现很多很多网址采集下来的内容不完全,或者完全采集不到这个是什么问题 大神们能不能帮我一下
大神我是要自己写一个的呢
於黾 2014-07-09
  • 打赏
  • 举报
回复
你所谓的批量查询功能,是一次性输入,返回500个结果,还是循环500次输入,还是分成500个线程同时输入?
wangnaisheng 2014-07-09
  • 打赏
  • 举报
回复
http://download.csdn.net/detail/gaochaotian/7563931
wangnaisheng 2014-07-09
  • 打赏
  • 举报
回复
http://www.downg.com/soft/47746.html 用软件实现

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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