您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
在 Linux 下使用 C++ 进行网络爬虫,你需要遵循以下步骤:
在基于 Debian 的系统(如 Ubuntu)上,可以使用以下命令安装这些库:
sudo apt-get install libcurl4-openssl-dev libxml2-dev cmake build-essential
在基于 RHEL 的系统(如 CentOS)上,可以使用以下命令安装这些库:
sudo yum install libcurl-devel libxml2-devel cmake gcc-c++ make
mkdir my_crawler
cd my_crawler
CMakeLists.txt
的文件,其中包含以下内容:cmake_minimum_required(VERSION 3.10)
project(my_crawler)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(CURL REQUIRED)
find_package(XML2 REQUIRED)
include_directories(${CURL_INCLUDE_DIRS} ${XML2_INCLUDE_DIRS})
add_executable(my_crawler main.cpp)
target_link_libraries(my_crawler ${CURL_LIBRARIES} ${XML2_LIBRARIES})
这个文件告诉 CMake 使用 C++11 标准构建项目,并找到 libcurl 和 libxml2 库。
main.cpp
的文件,其中包含以下内容:#include <iostream>
#include <string>
#include <curl/curl.h>
#include <libxml/parser.h>
size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp) {
((std::string*)userp)->append((char*)contents, size * nmemb);
return size * nmemb;
}
int main(int argc, char *argv[]) {
if (argc != 2) {
std::cerr << "Usage: my_crawler <url>" << std::endl;
return 1;
}
CURL *curl = curl_easy_init();
if (!curl) {
std::cerr << "Failed to initialize curl" << std::endl;
return 1;
}
std::string url = argv[1];
std::string response;
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
if (response.empty()) {
std::cerr << "Failed to fetch URL: " << url << std::endl;
return 1;
}
htmlDocPtr doc = htmlReadMemory(response.c_str(), response.size(), NULL, NULL, HTML_PARSE_NOERROR | HTML_PARSE_NOWARNING);
if (!doc) {
std::cerr << "Failed to parse HTML" << std::endl;
return 1;
}
xmlNode *root = xmlDocGetRootElement(doc);
for (xmlNode *node = root->children; node; node = node->nextSibling) {
if (xmlStrcmp(node->name, (const xmlChar*)"a") == 0) {
xmlChar *href = xmlGetProp(node, (const xmlChar*)"href");
if (href) {
std::cout << "Link: " << (char*)href << std::endl;
xmlFree(href);
}
}
}
xmlFreeDoc(doc);
xmlCleanupParser();
return 0;
}
这个代码示例使用 libcurl 发送 HTTP 请求并获取网页内容,然后使用 libxml2 解析 HTML 文档并提取所有链接。
build
的目录,然后进入该目录:mkdir build
cd build
运行以下命令来构建项目:
cmake ..
make
构建完成后,你可以使用以下命令运行项目:
./my_crawler https://example.com
这将输出给定 URL 的所有链接。你可以根据需要修改代码以满足你的需求,例如解析特定的 HTML 标签或属性。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。