Trước giờ mình vẫn crawl Bing web search bình thường. Mấy ngày nay thấy tỉ lệ crawl thành công giảm còn khoảng 25% (giảm đột ngột đang từ xấp xỉ 90% xuống 25%) nên mới mò vào xem thì thấy Bing luôn trả về "There are no results". Lạ nữa là kể cả các keywords rất phổ biến như Nike, vnexpress ... cũng không có kết quả. Từ 3 ngày trước, thậm chí dùng FF/IE/Chrome search các keywords trên cũng bị như thế. Đến hôm qua thì đã bình thường trở lại với trình duyệt nhưng crawl thì vẫn lỗi. Ban đầu mình nghĩ là Bing đang update gì đó. Đến hôm qua chat với 1 người bạn thì bé đó nói có thể do Bing chuyển sang dùng http 2.0 (check header thì đúng là Bing đang dùng http 2.0) Mình dùng .Net. Tìm hiểu thì tụi nó nói phải là bản .Net framework 4.6.2 và Windows 10 mới hỗ trợ http 2.0. Vấn đề là nếu upgrade lên thì mất khá nhiều thời gian (mình đang dùng Wins 7) và cũng chưa chắc đó có phải cách để khắc phục lỗi hay không. Các bạn có ai đang crawl Bing không cho mình thông tin với?
Ko phải Win 7 ko xài dc .Net 4.7 mà anh đọc tài liệu tụi nó nói phải thỏa cả 2 điều kiện là dùng Win 10 và .Net từ 4.6.2 nên chưa biết như nào.
@Dang đây là code anh đang dùng đó giờ, mấy hôm nay mới bị lỗi: Code: public static string HarvestSearchEngineResult(string url, string proxyAddr, int timeout, string useragent) { //Fix error: The request was aborted: Could not create SSL/TLS secure channel. //ServicePointManager.Expect100Continue = true; ////ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; //For .Net 4.5 //ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); if (timeout > 0) { request.Timeout = timeout; } //request.Method = "POST"; //request.ContentLength = url.Length; request.UserAgent = useragent; request.Accept = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; //Accept: text/html,application/xhtml+xml,application/xml WebHeaderCollection myWebHeaderCollection = request.Headers; myWebHeaderCollection.Add("Accept-Language: en-US,en;q=0.5"); // if (proxyAddr != "") { string proxy = proxyAddr; string proxyAuthentication = ""; if (proxyAddr.IndexOf("@") > 0) { string[] tempArr = proxyAddr.Split('@'); proxyAuthentication = tempArr[0]; proxy = tempArr[1]; } string[] proxyArray = proxy.Split(':'); WebProxy proxyz = new WebProxy(proxyArray[0], int.Parse(proxyArray[1])); if (proxyAuthentication.Trim() != "") { string[] proxyCredentials = proxyAuthentication.Split(':'); proxyz.Credentials = new NetworkCredential(proxyCredentials[0], proxyCredentials[1]); } request.Proxy = proxyz; } WebResponse response = request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream()); string str = reader.ReadToEnd().Trim(); reader.Close(); response.Close(); return str; }
Đây là đoạn test của em. Em dùng proxy cùi nên timeout của em khá lâu, do đó em tách riêng ra 1 thư viện (giống như cUrl), thư viện đó nó cũng na ná như bên dưới. Em test Bing thấy cũng ok, sao anh lại bị em cũng không biết! Code: using System; using System.Text; using System.Net; using System.IO; namespace testBing { class Program { static void Main(string[] args) { string html = string.Empty; string url = @"https://www.bing.com/search?q=vnexpress"; try { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; var request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"; request.AutomaticDecompression = DecompressionMethods.GZip; request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"; html = new System.IO.StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd(); } catch (Exception err) { } File.WriteAllText("result.html", html, Encoding.UTF8); } } }
Chắc trước sau gì mấy trang khác cũng chuyển sang dùng version mới. Nếu vẫn không được, anh thử kết hợp thằng libcurl.dll của curl[.]haxx[.]se xem sao anh!
Ồ, có lẽ anh đã hiểu lí do rồi (đoán thôi chứ không chắc 100%) Đầu tiên là sorry anh em vì trước khi post bài anh ko kiểm tra lại cho kỹ, làm mất thời gian của mọi người. Thực ra bây giờ nó chỉ xảy ra lỗi trên bộ keywords anh đang crawl thôi. Hiện giờ các keyword linh tinh như vnexpress, nike, ... anh crawl bình thường. Riêng bộ keyword anh cần crawl cứ đưa vào là "There are no results for ..." Như vậy có khả năng là: 1. Bing mới update. Và bộ keywords anh đang dùng bị nó đánh giá có vấn đề. 2. Các ngày trước anh crawl keywords linh tinh cũng bị lỗi là do đang trong lúc nó update nên nó loạn hoặc do nó detect theo IP, proxy gì đó ... nên nó limit anh luôn.
lib này nuget về toàn lỗi build em ạ, anh đang dùng .Net frameword 4.5 nó không tương thích. Có lẽ dùng bản standalone tốt hơn (nuget anh thấy nó tận năm 2013 ) Code em share trên kia anh chạy cũng y như code anh đang dùng.
Google Update ngày 18/12 Cụ thể thì chưa có thông báo hoặc do mình mải bế con ko theo dõi tin tức đc hết nhưng thông tin này xác nhận do team global chơi cùng!
Thường thì tình hình khi sau khi Google update của các dàn site bên em ko khác gì lúc update. Thế mới đau .
Cập nhật: trưa nay đã crawl lại bộ keywords của mình, tỉ lệ thành công khoảng 70% Vậy là Bing update gì rồi. Tự nhiên làm mất 4 ngày sửa tìm hiểu rồi linh tinh