2012-06-30 357 views
0

我正在試驗並嘗試製作一個最小的網絡爬蟲。我非常瞭解整個過程。因此,進入下一層細節,程序如何「連接」到不同的網站來提取HTML?C++網絡爬蟲

我使用套接字連接到服務器併發送http請求嗎?我是否在給終端運行telnet或ssh命令?

另外,C++是網頁爬蟲的首選語言嗎?

謝謝!

+1

您可以使用C做++,當然,但我會建議一個腳本語言會容易得多 - 我是一個C++編碼器,但我絕不會將它用於這種應用程序,但我使用Perl做了很多。 – mathematician1975

+0

此外,如果你曾搜索過這個網站,你會發現這可能有助於http://stackoverflow.com/questions/4278024/a-very-simple-c-web-crawler-spider – mathematician1975

+0

@ mathematician1975:Perl的+1。 Lua可以是一個很好的選擇。 – Jack

回答

0

簡答題,沒有。我更喜歡用C++編寫代碼,但這個實例需要Java應用程序。該API有許多h​​tml解析器和內置的套接字協議。這個項目在C++中會很痛苦。我在java中編寫了一個代碼,這有點幸福。

順便說一句,有很多網絡爬蟲在那裏,但我假設你有定製需求:-)

+0

謝謝,我正在使用Java – CodeKingPlusPlus

2

此外,C++是一個很好的語言選擇的網絡爬蟲?

取決於。你在C++有多好。
C++是一種很好的語言來編寫先進的高速爬行器,因爲它的速度(並且您需要它來處理HTML頁面)。但是,如果您正在進行實驗,那麼編寫爬蟲程序並不是最簡單的語言,因此可能不是一個好的選擇。

根據您的問題,您沒有編寫高級抓取工具的經驗,因此可能正在構建一個簡單的串行抓取工具。因爲這個速度並不是一個優先事項,因爲瓶頸是網頁的下載(而不是頁面的處理)。所以我會選擇另一種語言(也許是Python)。

+0

我不同意。答案很簡單__no__。你也絕不會被CPU阻塞,除非你爲每個頁面做了大量的工作 - 下載頁面需要更長的時間。即使在這種情況下,抓取工具也應該用更高級的語言編寫,而需要性能的部分可以移植到像C++這樣的語言。 – orlp

+1

@nightcracker:我們是CPU綁定,因爲我們正在同時下載2000個HTML頁面(我們有一個嚴重的爬蟲)。 http://devblog.seomoz.org/2012/06/how-does-seomoz-crawl-the-web/我們無法負擔基於腳本語言的緩慢維護連接的解決方案。 (PS我們已經測試過)。 –

+0

我從來沒有猜到。我假設你沒有使用每個連接的單線程模型(在這種情況下,你確實會很快得到CPU綁定)?除此之外,如果頁面下載需要0.5秒,除以2000,這意味着每頁有0.25毫秒的實際抓取。套接字這樣慢嗎? – orlp

0

如果您打算堅持使用C++,那麼您應該考慮使用libcurl庫,而不是從頭開始使用套接字實現HTTP協議。該庫有可用的C++ bindings

從捲曲的網頁:

libcurl的是一個自由和易於使用的客戶端URL移庫, 支持DICT,FILE,FTP,FTPS,地鼠,HTTP,HTTPS,IMAP,IMAPS , LDAP,LDAPS,POP3,POP3S,RTMP,RTSP,SCP,SFTP,SMTP,SMTPS,Telnet 和TFTP。 012curl支持SSL證書,HTTP POST,HTTP PUT,FTP 上傳,基於HTTP表單的上傳,代理,cookies,用戶+密碼 身份驗證(基本,摘要,NTLM,協商,Kerberos),文件 傳輸恢復,http代理隧道和更多!

libcurl的是高度可移植的,它建立並同樣工作在 衆多平臺,包括Solaris,NetBSD的,FreeBSD的,OpenBSD的, 達爾文,HP-UX,IRIX,AIX,Tru64上,Linux和UnixWare的,赫德,Windows中,Amiga上, OS/2,BeOS的,Mac OS X中,的Ultrix,QNX,OpenVMS的,RISC OS,的Novell NetWare, DOS更多...

的libcurl是免費的,線程安全的,兼容IPv6,功能豐富,以及 支持,快速,深入地記錄並已被許多已知的,大的,成功的公司和衆多應用程序使用。