ورود

View Full Version : مبتدی: اررو در htmlagility



piter11
پنج شنبه 24 فروردین 1396, 15:08 عصر
چرا میرسه به مقدار رشته متغیر body خالی بر میگردو.نه؟!
در صورتی که این xpath وجود داره در سایت

HtmlWeb hweb = new HtmlWeb();
var h= hweb.Load("http://stackoverflow.com/questions/14530280/html-agility-pack-parsing");

string body = h.DocumentNode.SelectSingleNode("//*[@id='question']/table/tbody").InnerHtml;



144951

piter11
جمعه 25 فروردین 1396, 23:51 عصر
منتظرم ممنون میشم جواب بده کسی

Moien Tajik
شنبه 26 فروردین 1396, 21:21 عصر
چک کنید احتمالا دستور Select اون المنت رو بدرستی وارد نکردید هرچند هم که اون Element در سایت وجود داره .
http://www.codefall.io/15-jun-2014/htmlagilitypack-getting-started.html

piter11
دوشنبه 04 اردیبهشت 1396, 16:28 عصر
چک کنید احتمالا دستور Select اون المنت رو بدرستی وارد نکردید هرچند هم که اون Element در سایت وجود داره .
http://www.codefall.io/15-jun-2014/htmlagilitypack-getting-started.html



HtmlWeb hweb = new HtmlWeb();
var h= hweb.Load("https://www.instagram.com/hossein_mnt/");


string body = h.DocumentNode.SelectSingleNode("//*[@id='react-root']/section/main/article/header/div[1]/div/img").InnerHtml
الان این آدرس پیج اینستای من هستش copy xpath گرفتم همین شد چه مشکلی داره؟ ممنون میشم تست کنی مهندس

Moien Tajik
دوشنبه 04 اردیبهشت 1396, 22:56 عصر
من براتون تست کردم .
اینستاگرام چون با React JS نوشته شده ، کدهای داخل react-root وقتی که از HttpRequest استفاده میکنید نمایش داده نمیشن و null برگردونده میشه و بخاطر همین نمیتونید از XPath و HtmlAgilityPack استفاده کنید.
روش دیگه ای پیدا کردم و یک Sample براتون ساختم که میتونید استفاده کنید ازش :


static void Main()
{
WebClient client = new WebClient();

client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

Stream data = client.OpenRead("https://www.instagram.com/hossein_mnt/");
if (data != null)
{
using (StreamReader reader = new StreamReader(data))
{
Regex regex1 = new Regex(@"(.*)\.jpg");
Regex regex2 = new Regex(@"(?<=https)(.*)(?=)");

string s = reader.ReadToEnd();

MatchCollection findImage = regex1.Matches(s);
string profileImageElement = findImage
.OfType<Match>()
.Select(m => m.Value)
.Distinct()
.FirstOrDefault();

if (profileImageElement != null)
{
MatchCollection profileImageUrl = regex2.Matches(profileImageElement);
string finalResult = profileImageUrl
.OfType<Match>()
.Select(m => m.Value)
.Distinct()
.FirstOrDefault();

Console.WriteLine("https" + finalResult);
}
Console.ReadKey();
}
}
}

piter11
دوشنبه 04 اردیبهشت 1396, 23:49 عصر
مهندس عالی یه سوال دیگه بخوای اطلاعات دیگه از صفحش شامل مثلا تعداد فالورزشا رو بگیری چطوریه؟
کدوم قسمت شو تغییر بدم با تشکر

Moien Tajik
سه شنبه 05 اردیبهشت 1396, 02:15 صبح
میتونید داخل متغییر s که source صفحه داخلش ذخیره میشه جستجو کنید با همون HtmlAgilityPack و یا Regex و یا از Instagram Api استفاده کنید .

piter11
سه شنبه 05 اردیبهشت 1396, 13:17 عصر
میتونید داخل متغییر s که source صفحه داخلش ذخیره میشه جستجو کنید با همون HtmlAgilityPack و یا Regex و یا از Instagram Api استفاده کنید . من به این صورت نوشتم ولی مقدار null بر میگردونه ! حتی اون عدد 150 هم نمیگیره

کد html صفحه: <span class="_bkw5z" title="150">150</span>


Regex rg3 = new Regex(@"(?:\<span\ class\=\'_bkw5z\'\>150\<\/span\>)");

Moien Tajik
سه شنبه 05 اردیبهشت 1396, 14:58 عصر
مقدار s رو داخل Notepad کپی کنید ، ببینید کجا follower و following نشون داده شده ، متناسب با اون regex باید بزنید و یا از HtmlAgilityPack استفاده کنید .
"followed_by\": {\"count\": 151}, \"followed_by_viewer\": false, \"follows\": {\"count\": 512}