【网页采集】-百度-贴吧标题

2016-12-06  本文已影响0人  游戏终

大致步骤

1.建立连接
2.摘写请求报文
3.处理响应报文

相关信息

1.百度贴吧帖子格式

Url:tieba.baidu.com/p/id
title:
贴吧404        该帖已经被删除。
百度贴吧        该帖所在吧被合吧。
新帖创建频率:800贴/min

2.请求报文

请求报文:
GET /p/id/index.html HTTP/1.1
Host:tieba.baidu.com:80

首次尝试

Socket sc;
//建立连接
sc.Connect("tieba.baidu.com",80);
//发送报文
sc.Send(b,b.length,0);
//接受报文(接受到</title>为止)
sc.Receive(b,b.length,0);
//断开连接
sc.Close();
200ms/贴

优化

class Tie
{
    Socket sc;
    long P;//每张贴的id
    TieList Tl;
    //异步连接
    public void NewSocket()
    {
        sc = new Socket(2, 1, 6);
        P = Tl.getP();
    }
    public void Begin()
    {
        sc.BeginConnect("tieba.baidu.com",80,CallBack,null);
    }
    public void CallBack(IAsyncResult Ir)
    {
        try
        {
            //发送报文
            sc.Send(b,b.length,0);
            //接受,处理报文(接受到</title>为止)
            sc.Receive(b,b.length,0);
            //请求新的IP
            P = Tl.getP();
        }catch{}finally{
            //断开连接
            try
            {
                sc.EndConnect();
            }catch{}
        }
        //若成功,P更新,出现异常,P不变,进入循环。
        Begin();
    }
}
class TieList
{
    //管理多个Tie引发的线程
    long P;
    private readonly object o = new object();
    public long GetP()
    {
        lock (o1)
        {
             long l = P;
             P += W;
             return l;
         }
    }
}
30ms/贴      线程数:50

存在问题

该服务器会在短时间内发现该程序,并限制其效率( ̄▽ ̄)"

解决办法

改写请求报文:

请求报文:
GET /p/id/index.html HTTP/1.1
Host:tieba.baidu.com:80
Cookie:TIEBA_USERTYPE = 240918a9690f******; wise_device = 0; BAIDUID = 5536A9D00334A2********: FG = 1

相当于获得一个游客身份登陆
修改前:处理速度能维持20秒左右
修改后:处理速度能维持超过5分钟

注意!!

没有一个网站管理者会喜欢遇到这种东西,因此在请求报文加上下面两行。

User-Agent://程序的名字和目的。
From://可以与你联系的途径,邮箱或微信之类的。

给大家留一个可以商讨的余地。
需要源码的请私信。

上一篇下一篇

猜你喜欢

热点阅读