PDA

View Full Version : استخراج متن از داخل سورس یک صفحه ؟



sara_aryanfar
جمعه 09 تیر 1391, 01:53 صبح
با سلام دوستان من می خوام یک تکه از متن رو از داخل سورس صفحه جدا کنم چطور باید انجام بدم فکر می کنم پارسر راه حل مناسبی باشه آیا تا به حال از دوستان کسی اینکارو انجام داده لطفا راهنمایی کنید ممنون

mehdy.programmer
جمعه 09 تیر 1391, 02:13 صبح
دوست عزیز میشه بگی منظورت از سورس صحفه چیه؟؟
سورس برنامه یا یه متن که تو برنامه استفاده میشه؟

sara_aryanfar
جمعه 09 تیر 1391, 10:02 صبح
نخیر منظور کد های html یک صفحه هست صفحه هم مال برنامه خودمون نیست منظور هر صفحه اینترنتی که داخلش یه مطلبی هست اونو می خوام استخراج کنمیعنی نوشته رو از تگ های html جدا کنم

ma.rad
جمعه 09 تیر 1391, 10:07 صبح
خوب از منوی view گزینه source بزن وسورس صفحه ببین هر جا شو خواستا کپی کن

میخواید آدرسشو بدید براتون کپی کنم

sara_aryanfar
جمعه 09 تیر 1391, 10:58 صبح
دوست نابغه من می خوام برنامه برام برداره به طور اتوماتیک

ma.rad
جمعه 09 تیر 1391, 11:03 صبح
شما نمی تونید درست سوالتون رو مطرح کنید مشکل من نیست.

sara_aryanfar
جمعه 09 تیر 1391, 11:21 صبح
کجای سوال من که می خوام یک متن خاص رو از داخل کد html بردارم مشکل داشت قدر مسلم شما منو نباید اونطور فرض می کردین که نمی دونم با راست کلیک و ویو سورس ... بماند در هر حال شاید حق با شما باشه و من معذرت می خوام و از اینکه پاسخ دادین واقعا ممنون هستم اما عرض کردم منظور من این هست که بشه یک نوشته رو از داخل کد html به صورت مرتب برداشت البته بنده کد زیر رو به کار می برم و نوشته ها رو جدا می کنم اما خب مطالب مربوط و نامربوط همه باهم میان و من می خوام فقط متن کامل یک بخش رو داشته باشم مثل متن کامل همین نوشته دیگه سایر نوشته ها رو که در این صفحه موجوده نیاره
Regex reg = new Regex("<[^>]+>", RegexOptions.IgnoreCase);
return reg.Replace(HTMLText, "");

Y_Safaiee
جمعه 09 تیر 1391, 11:29 صبح
با سلام خدمت شما دوست گرامی

هر فایل HTML دارای Tag های مختلفی مثه <Body>.<br>,<tr> و ... است شما میتونین آدرس سایت Html رو بدید و با streamReader محتوای اونو بخونید برای اینکه تگ های Html خونده نشن میتونین یه آرایه رشته ای از کلمات کلیدی بسازید و با خوندن سطری هرگاه به این تگ ها رسیدید از خوندن اونا صرف نظر شه یا روی کد اعمالی شه (مثلا بره خط پائین و ...) و به کارش ادامه بده و در نهایت ذخیره یا توی RichTextBox نمایش داده بشه.


اینم یک سمپل کد که خودم الان براتون نوشتم



WebClient client = new WebClient();
String htmlCode = client.DownloadString("url");
htmlCode = htmlCode.Replace( "<br>", "\r\n" );



موفق باشی
بایت بایت

ma.rad
جمعه 09 تیر 1391, 11:31 صبح
یه نگاهی به این بندازید شاید کمکتون کنه البته php:
http://forum.iranphp.org/Thread-%D8%A7%D8%B3%D8%AA%D8%AE%D8%B1%D8%A7%D8%AC-%D9%86%D9%88%D8%B4%D8%AA%D9%87-%D8%A7%D8%B2-%DA%A9%D8%AF-html

Beginner2013
جمعه 09 تیر 1391, 11:52 صبح
شما باید از مشابه همین کدی که گذاشتید استفاده کنید با این تفاوت که بجای Replace کردن Match ها رو در بیارید،همچنین Regex شما حالت کلی داره،باید بجاش از Regex های جزئی تر مثل

Regex reg2 = new Regex( "<script(.*?)>((.|\n)*?)(</script>)", RegexOptions.IgnoreCase);
Regex reg3 = new Regex("<style(.*?)>((.|\n)*?)(</style>)", RegexOptions.IgnoreCase);

استفاده کنید،البته متنی شما می خواید،به احتمال زیاد در داخل تگ های Div خواهند بود،با این حال هیچ تظمینی
وجود نداره که کد شما همراه با مقاله لینک های یک سایت رو هم بیرون نکشه،در واقع کد شما نمی تونه برای هر وبسایتی 100% جواب بده ؛ با این حال می تونید روش هایی اتخاذ کنید که احتمال اینکه کدتون برای بیش تر سایت ها جواب بده بیشتر بشه،یک روش اینکه بعد از جدا سازی متن از element های Div و TR و TD اون هایی رو که از یک مقدار مشخص مثلا 300 کاراکتر طولشون بیش تر هست رو به عنوان نتیجه بگیرید.

sara_aryanfar
جمعه 09 تیر 1391, 12:52 عصر
با تشکر از دوستان اول اینکه قدر مسلم باید برای هر سایت یک الگوی خاص تعریف بشه ما در اینجا فرض رو بر این می گیریم که تنها یک سایت داریم و قالب اون مشخص هست مثلا لینک زیر رو در نظر بگیرید
http://1pezeshk.com/archives/2012/06/6-new-iphone-applications.html#axzz1oTCVYr3E
ما در اینجا همونطور که دوستمون گفتن متن نوشته داخل یک دیو مشخص هست حالا دوستان چطوری میشه محتویات این دیو رو درآورد بدون اینکه بقیه بیاد

sara_aryanfar
جمعه 09 تیر 1391, 13:31 عصر
تصور می کنم بشه با HtmlAgilityPack انجام داد از دوستان کسی تا به حال با HtmlAgilityPack کار کرده

aradrobo
جمعه 09 تیر 1391, 13:51 عصر
از این دستور استفاده بکن
FileStream spam = new FileStream("1.txt", FileMode.Append, FileAccess.Write, FileShare.None);
StreamWriter rt = new StreamWriter(spam);

Saeed_m_Farid
جمعه 09 تیر 1391, 14:23 عصر
تصور می کنم بشه با HtmlAgilityPack انجام داد از دوستان کسی تا به حال با HtmlAgilityPack کار کرده
بلی! کلی هم توضیح دادم (اینجا (http://barnamenevis.org/showthread.php?342514) پست 6 به بعد - اینجا (http://barnamenevis.org/showthread.php?342548) کمتر!)، ضمناً شما به سورس کدهای این مجموعه هم بطور کامل دسترسی دارید؛ برای من که تمام نیازها رو پاسخ داده و بیشترش هم ...
بازم هرجا در نحوه کارش مشکل داشتید بگین تا اگه بتونم کمک کنم...
_____________
ضمناً بنظر من اگه میحواین برای مطالب یک پزشک (http://1pezeshk.com/) Crawler بنویسین! بهتره حتماً به خود آقای مجیدی بگین، چون واسه اون مطالب کلی وقت و هزینه صرف می کنن...

sara_aryanfar
جمعه 09 تیر 1391, 15:07 عصر
ضمناً بنظر من اگه میحواین برای مطالب یک پزشک (http://1pezeshk.com/) Crawler بنویسین! بهتره حتماً به خود آقای مجیدی بگین، چون واسه اون مطالب کلی وقت و هزینه صرف می کنن...
نه من خودم از طرفداران وبلاگ خوب ایشون هستم و عقیده دارم از این نوع وبلاگ ها باید زیاد باشن و حریم مطالبشون حفظ بشه چون من تمام مقالات ایشون رو دنبال می کنم موقع ارسال تاپیک صفحه سایت ایشون باز بود و داشتم می خوندم همینطوری لینک ایشون رو زدم

rahdar
جمعه 09 تیر 1391, 22:15 عصر
من از فایل زیر استفاده کردم برام جواب داده
البته تو بعضی صفحات فارسی اذیت می کرد ولی یه کم Encoding هارو هنگام خوندن فایل عوض می کردم درس می شد
88947

aradrobo
شنبه 10 تیر 1391, 22:41 عصر
من از فایل زیر استفاده کردم برام جواب داده
البته تو بعضی صفحات فارسی اذیت می کرد ولی یه کم Encoding هارو هنگام خوندن فایل عوض می کردم درس می شد
88947

از این فایل cs که قرار داده اید چگونه باید استفده کنیم ؟