إن ما يسمى ببرنامج جمع البيانات هو أيضًا برنامج لصوص الويب (من فضلك لا توبيخني). بعد أن أنتهي من كتابته، سأقوم بنشر شيء ما هنا، وآمل أن يكون لدى الجميع أي أفكار وأن يدرسوها معًا
1. في البداية تنزيل البيانات، تتطلب بعض مواقع الويب تسجيل الدخول قبل أن تتمكن من مشاهدتها. للحصول على البيانات المقابلة، يتطلب ذلك منا إرسال اسم المستخدم وكلمة المرور لتسجيل الدخول، لكنني قمت بتسجيل الدخول، لكن الخادم الخاص به ليس قمامة، وقام بإعادة توجيهه، وتم إنشاء جلستين في هذه الجلسة الثانية، ولا أعرف كيفية التقاطها، لذا قمت بالتخمين واستخدمت برنامجًا لالتقاط الجلسة رأس طلب HTTP.
WebClient myWebClient = new WebClient();
string sessionkey=textBox78.Text;
سلسلة مرجعية = textBox77.Text؛
myWebClient.Headers.Clear();
myWebClient.Headers.Add("Cookie",sessionkey);
myWebClient.Headers.Add("Referer"، Refererurl);
myWebClient.Headers.Add("User-agent", "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.5) Gecko/20031107 Debian/1.5-3");
هذا يخدع الخادم هاها
2 الجزء الثاني هو تنزيل الكود
byte[] myDataBuffer = myWebClient.DownloadData(remoteUri);
download = Encoding.Default.GetString(myDataBuffer);
3. الجزء الثالث هو مطابقة البيانات، قرأت الدفق في البيانات، ثم استخدم IndexOf للحصول على مواضع الحقلين الرئيسيين، ثم استخدم السلسلة الفرعية للحصول عليها. out، أعلم أن هذا غبي، لكن من الصعب استخدام التعبيرات العادية (من يستطيع أن يقدم لي بعض النصائح)، بعد مطابقة السلسلة، استخدمت الوظيفة التالية لإزالة كود HTML.
سلسلة خاصة StripHTML (سلسلة strHtml)
{
سلسلة [] aryReg = {
@"<script[^>]*?>.*?</script>",
@"<(/s*)؟!?((w+:)?w+)(w+(s*=?s*(([""'])( \[""' tbnr]|[^7])*?7|w+)|.{0})|s)*?(/s *)?>"،
@"([rn])[s]+"،
@"&(quot|#34);"،
@"&(amp|#38);",
@"&(lt|#60);",
@"&(gt|#62);",
@"&(nbsp|#160);",
@"&(iexcl|#161);",
@"&(سنت|#162);",
@"&(جنيه|#163);",
@"&(نسخة|#169);",
@"&#(d+);",
@"-->"،
@"<!--.*n"
};
سلسلة [] aryRep = {
""،
""،
""،
"""،
"&"،
"<"،
">"،
" "،
"xa1"، // مركز حقوق الإنسان (161)،
"xa2"،//مركز حقوق الإنسان (162)،
"xa3"،//مركز حقوق الإنسان (163)،
"xa9"، // مركز حقوق الإنسان (169)،
""،
"rn"،
""
};
string newReg =aryReg[0];
string strOutput=strHtml;
ل(int i = 0;i<aryReg.Length;i++)
{
Regex regex = new Regex(aryReg[i],RegexOptions.IgnoreCase);
strOutput = regex.Replace(strOutput,aryRep[i]);
}
strOutput.Replace("<"،"");
strOutput.Replace(">"،"");
strOutput.Replace("rn"،");
إرجاع strOutput؛
}
4. الخطوة التالية هي تخزينها في قاعدة البيانات، الجميع يعرف ذلك ولكن لا تزال لدي مشكلة عندما أكتب البيانات، يظهر استثناء يقول أن الحقل الخاص بي طويل جدًا ولا يمكن كتابته في قاعدة البيانات. أنا أستخدم ACCESS، وسأحاول استخدام SQL
5. إذا كانت لديك أي اقتراحات جيدة، فيرجى ترك تعليق لنا، فلنحقق تقدمًا معًا.
المصدر: http://jetadv.cnblogs.com/archive/2006/02/. 18 /333213.html