Tôi đang tìm một thư viện C++ tốt cho việc cào web.
Nó phải là C/C++ và không có gì khác vì vậy vui lòng không chuyển hướng tôi đến Options for HTML scraping hoặc các câu hỏi/câu trả lời khác mà C++ thậm chí không được đề cập.Tùy chọn cho việc cào web - Phiên bản C++ chỉ
Trả lời
liên kết thứ hai của bạn có lẽ nên truy cập http://tidy.sourceforge.net/? –
+1 Chính xác những gì tôi đang tìm kiếm, tôi đã sử dụng curl rất nhiều từ cli nhưng tôi không bao giờ nghĩ đến việc sử dụng nó như một thư viện :) – rflood89
// download winhttpclient.h
// --------------------------------
#include <winhttp\WinHttpClient.h>
using namespace std;
typedef unsigned char byte;
#define foreach BOOST_FOREACH
#define reverse_foreach BOOST_REVERSE_FOREACH
bool substrexvealue(const std::wstring& html,const std::string& tg1,const std::string& tg2,std::string& value, long& next) {
long p1,p2;
std::wstring wtmp;
std::wstring wtg1(tg1.begin(),tg1.end());
std::wstring wtg2(tg2.begin(),tg2.end());
p1=html.find(wtg1,next);
if(p1!=std::wstring::npos) {
p2=html.find(wtg2,next);
if(p2!=std::wstring::npos) {
p1+=wtg1.size();
wtmp=html.substr(p1,p2-p1-1);
value=std::string(wtmp.begin(),wtmp.end());
boost::trim(value);
next=p1+1;
}
}
return p1!=std::wstring::npos;
}
bool extractvalue(const std::wstring& html,const std::string& tag,std::string& value, long& next) {
long p1,p2,p3;
std::wstring wtmp;
std::wstring wtag(tag.begin(),tag.end());
p1=html.find(wtag,next);
if(p1!=std::wstring::npos) {
p2=html.find(L">",p1+wtag.size()-1);
p3=html.find(L"<",p2+1);
wtmp=html.substr(p2+1,p3-p2-1);
value=std::string(wtmp.begin(),wtmp.end());
boost::trim(value);
next=p1+1;
}
return p1!=std::wstring::npos;
}
bool GetHTML(const std::string& url,std::wstring& header,std::wstring& hmtl) {
std::wstring wurl = std::wstring(url.begin(),url.end());
bool ret=false;
try {
WinHttpClient client(wurl.c_str());
std::string url_protocol=url.substr(0,5);
std::transform(url_protocol.begin(), url_protocol.end(), url_protocol.begin(), (int (*)(int))std::toupper);
if(url_protocol=="HTTPS") client.SetRequireValidSslCertificates(false);
client.SetUserAgent(L"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0");
if(client.SendHttpRequest()) {
header = client.GetResponseHeader();
hmtl = client.GetResponseContent();
ret=true;
}
}catch(...) {
header=L"Error";
hmtl=L"";
}
return ret;
}
int main() {
std::string url = "http://www.google.fr";
std::wstring header,html;
GetHTML(url,header,html));
}
mã không có lời giải thích là một ý tưởng tồi, bạn có thể giải thích điều này? –
Tôi khuyên bạn nên Qt5. 6.2, thư viện mạnh mẽ này tắt er chúng tôi
- cấp cao, trực quan, không đồng bộ mạng api như QNetworkAccessManager, QNetworkReply, QNetworkProxy vv
- lớp regex mạnh mẽ như QRegularExpression
- engine web Decent như QtWebEngine
- mạnh mẽ, gui trưởng thành như QWidgets
- Hầu hết các api Qt5 đều được thiết kế tốt, tín hiệu và khe làm cho các mã không đồng bộ viết trở nên dễ dàng hơn quá
- Hỗ trợ unicode tuyệt vời
- Tính năng thư viện hệ thống tệp phong phú. Cho dù tạo, xóa, đổi tên hoặc tìm đường dẫn tiêu chuẩn để lưu tệp là miếng bánh trong Qt5
- api không đồng bộ của QNetworkAccessManager giúp dễ dàng sinh ra nhiều yêu cầu tải xuống cùng một lúc
- Cross lớn nền tảng máy tính để bàn, windows, mac os và linux , viết một khi được biên dịch ở bất cứ đâu, chỉ một cơ sở mã.
- Dễ triển khai trên Windows và Mac (linux? Có lẽ linuxdeployqt có thể cứu chúng ta tấn rắc rối)
- Dễ dàng để cài đặt trên Windows, Mac và Linux
- Và vân vân
Tôi đã viết một ứng dụng scraper hình ảnh của Qt5, ứng dụng này có thể cạo hầu như mọi hình ảnh được tìm kiếm bởi Google, Bing và Yahoo.
Để biết thêm chi tiết về nó, vui lòng truy cập my github project. Tôi đã viết tổng quan cấp cao về cách xóa dữ liệu theo Qt5 trên blog của tôi (quá dài để đăng lúc tràn ngăn xếp).
Tại sao bạn đề xuất phiên bản 5.6.2 và không phải phiên bản mới nhất (hiện tại là 5.9.0)? –
@PiotrDobrogost Lý do chính là tôi không biết Qt5.9.0 ổn định như thế nào, một lý do khác là Qt5.6.2 hỗ trợ windows xp – StereoMatching
- 1. Cách chỉ định phiên bản .NET khi sử dụng/tùy chọn CLR
- 2. Web cào trong PHP
- 3. tùy chọn chọn không làm việc cho chọn
- 4. Quy tắc cào trên web
- 5. Web-phát triển với công việc điều khiển phiên bản
- 6. Lựa chọn phiên bản HTML
- 7. C++ Đại diện cho các đối tượng tùy chọn
- 8. Phiên dịch cho trang web
- 9. Có thể làm việc với cào cào không?
- 10. Phiên bản trang web dành cho iPhone, khuyên bạn nên làm việc trong px hoặc bằng%?
- 11. Daemoninsing một công việc cào
- 12. Tùy chọn/Có thể lớp cho C++
- 13. C# 4.0 Tham số tùy chọn - Cách chỉ định tham số tùy chọn loại "hướng dẫn"?
- 14. Twitter Bootstrap - chỉ dành cho phiên bản di động?
- 15. Tùy chọn giao diện web Hadoop Hive
- 16. Phiên chống đạn cho trang web IIS
- 17. tùy chỉnh các phiên bản Beanstalk Elastic
- 18. thực hiện kiểm soát phiên bản cho phát triển web
- 19. Thiết kế ứng dụng web: Phiên hoặc phiên làm việc
- 20. Chỉ có bốn tùy chọn cho ShareActionProvider Với ActionBarSherlock
- 21. Phiên bản IDE Eclipse nào để chọn?
- 22. tùy chọn -static cho gcc?
- 23. Trình phân tích cú pháp tùy chọn cho C/C++?
- 24. Kiểm soát phiên bản cho công việc chỉnh sửa video
- 25. tùy chọn dán cho edittext
- 26. CSS chỉ cho phép lựa chọn văn bản trên trang web?
- 27. Có phiên bản Ruby cho vòng lặp tương tự như phiên bản Java/C++ không?
- 28. Tùy chọn SSE2 trong Visual C++ (x64)
- 29. Cách chọn phiên bản Python trong PyCharm?
- 30. AutoCompleteTextView chỉ cho phép các tùy chọn được đề xuất
được chuyển đổi HTML sang XML đầu tiên một lựa chọn? không có nhiều trình phân tích cú pháp HTML tốt cho C++ ngoài đó, tuy nhiên, có XML. –