上一篇文章我是用C++寫的一個(gè)爬取亞馬遜的爬蟲程序,相信大家已經(jīng)看過了,這次呢,我依然使用C語(yǔ)言來(lái)寫一個(gè)爬蟲,大體上思路是和之前一樣,只是支持的庫(kù)以及語(yǔ)法有些區(qū)別,具體的呢我會(huì)一一解釋出來(lái),方便大家查閱。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
int main() {
CURL *curl;
CURLcode res;
char *url = "https://www.amazon.com";
// 提取爬蟲ip jshk.com.cn/mb/reg.asp?kefu=xjy&csdn
char *proxy_host = "duoip";
int proxy_port = 8000;
char *ch = NULL;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ch);
curl_easy_setopt(curl, CURLOPT_PROXY, proxy_host);
curl_easy_setopt(curl, CURLOPT_PROXYPORT, proxy_port);
res = curl_easy_perform(curl);
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
curl_easy_cleanup(curl);
}
curl_global_cleanup();
if(ch) free(ch);
return 0;
}
1、#include <stdio.h>
:這個(gè)頭文件包含了標(biāo)準(zhǔn)輸入輸出文件流的定義和函數(shù)聲明。
2、#include <stdlib.h>
:這個(gè)頭文件包含了各種系統(tǒng)函數(shù)的定義和聲明,如malloc、free等。
3、#include <string.h>
:這個(gè)頭文件包含了各種字符串函數(shù)的定義和聲明,如strcpy、strlen等。
4、#include <curl/curl.h>
:這個(gè)頭文件包含了libcurl庫(kù)函數(shù)的定義和聲明。
5、int main() { ..、}
:這是一個(gè)標(biāo)準(zhǔn)的C程序的主函數(shù)入口。
6、CURL *curl;
:這是一個(gè)全局變量,用于存放libcurl庫(kù)的句柄。
7、CURLcode res;
:這是一個(gè)全局變量,用于存放libcurl庫(kù)的錯(cuò)誤代碼。
8、char *url = "https://www.amazon.com";
:這是一個(gè)字符串指針,用于存放要訪問的URL。
9、char *proxy_host = "duoip";
:這是一個(gè)字符串指針,用于存放代理服務(wù)器的主機(jī)名。
10、int proxy_port = 8000;
:這是一個(gè)整數(shù)變量,用于存放代理服務(wù)器的端口號(hào)。
11、char *ch = NULL;
:這是一個(gè)字符串指針,用于存放libcurl庫(kù)的返回?cái)?shù)據(jù)。
12、curl_global_init(CURL_GLOBAL_DEFAULT);
:這是一個(gè)libcurl庫(kù)的函數(shù),用于初始化libcurl庫(kù)。
13、curl = curl_easy_init();
:這是一個(gè)libcurl庫(kù)的函數(shù),用于創(chuàng)建一個(gè)libcurl庫(kù)的句柄。
14、if(curl) { ..、}
:這是一個(gè)if語(yǔ)句,用于判斷l(xiāng)ibcurl庫(kù)的句柄是否成功創(chuàng)建。
15、curl_easy_setopt(curl, CURLOPT_URL, url);
:這是一個(gè)libcurl庫(kù)的函數(shù),用于設(shè)置要訪問的URL。
16、curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL);
:這是一個(gè)libcurl庫(kù)的函數(shù),用于設(shè)置數(shù)據(jù)寫入函數(shù)。
17、curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ch);
:這是一個(gè)libcurl庫(kù)的函數(shù),用于設(shè)置數(shù)據(jù)寫入的數(shù)據(jù)指針。
18、curl_easy_setopt(curl, CURLOPT_PROXY, proxy_host);
:這是一個(gè)libcurl庫(kù)的函數(shù),用于設(shè)置代理服務(wù)器的主機(jī)名。
19、curl_easy_setopt(curl, CURLOPT_PROXYPORT, proxy_port);
:這是一個(gè)libcurl庫(kù)的函數(shù),用于設(shè)置代理服務(wù)器的端口號(hào)。
20、res = curl_easy_perform(curl);
:這是一個(gè)libcurl庫(kù)的函數(shù),用于發(fā)送請(qǐng)求并獲取響應(yīng)。
21、if(res != CURLE_OK) { ..、}
:這是一個(gè)if語(yǔ)句,用于判斷l(xiāng)ibcurl庫(kù)的錯(cuò)誤代碼是否為CURLE_OK,即請(qǐng)求是否成功。
22、fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
:這是一個(gè)標(biāo)準(zhǔn)庫(kù)函數(shù),用于輸出錯(cuò)誤信息。
23、curl_easy_cleanup(curl);
:這是一個(gè)libcurl庫(kù)的函數(shù),用于清除libcurl庫(kù)的句柄。
24、curl_global_cleanup();
:這是一個(gè)libcurl庫(kù)的函數(shù),用于清除libcurl庫(kù)的全局?jǐn)?shù)據(jù)。
25、if(ch) free(ch);
:這是一個(gè)if語(yǔ)句,用于判斷ch是否為空指針,如果是則調(diào)用free函數(shù)釋放ch所指向的內(nèi)存。
26、return 0;
:這是一個(gè)標(biāo)準(zhǔn)的C程序的返回值,表示程序成功運(yùn)行。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-785948.html
以上就是今天我編程的全部?jī)?nèi)容,其實(shí)總體思路還是和上一篇差不多。只是這次使用的庫(kù)不同,但是都一樣能達(dá)到自己想要的效果,兩者選其一就行。如果有更多有趣好玩的爬蟲代碼,記得評(píng)論區(qū)留言給我。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-785948.html
到了這里,關(guān)于用C語(yǔ)言采集亞馬遜amazon產(chǎn)品數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!