fjafari
5 سال پیش توسط fjafari مطرح شد
6 پاسخ

استخراج اطلاعات از وب سایت

سلام دوستان وقت بخیر.
من میخواستم یه برنامه بنویسم با جاوااسکریپت که بتونم از سایت های فروشگاهی جزئیات کالا رو بردارم مثل اسم و قیمت و..... و بدون استفاده ازjquery ممنون میشم کمک کنید.


ثبت پرسش جدید
نوید
تخصص : برنامه نویس Go / Django
@navids 5 سال پیش مطرح شد
1

بهترین زبان برنامه نویسی برای این کار پایتون میباشد ، با جاوا اسکریپت و jquery نمیشه همچین کاری کرد (میشه ها ، منتها برای این کار ساخته نشده)
site crawler سرچ کن


fjafari
@farzanehjafari5 5 سال پیش مطرح شد
0

سلام من این کد رو دارم فقط میخوام برای چند تا سایت بتونم استفاده کنم
(function () {
function extractIntFromText (elem) {
if (!elem) {
return;
}
elem = elem
.replace(/۰/g, '0')
.replace(/۱/g, '1')
.replace(/۲/g, '2')
.replace(/۳/g, '3')
.replace(/۴/g, '4')
.replace(/۵/g, '5')
.replace(/۶/g, '6')
.replace(/۷/g, '7')
.replace(/۸/g, '8')
.replace(/۹/g, '9')
.replace(/\D/g, '');
elem = parseInt(elem, 10);
return elem;
}

function extractProductData () {
    var productInfo = {};
    var sku = document.querySelector('input[name="product"]');
    if (!sku) {
        return false;
    }
    sku = sku && sku.getAttribute('value');
    productInfo['sku'] = sku;

    var title = document.querySelector('div.product span.base');
    title = title && title.innerText;
    if (!title) {
        return false;
    }
    productInfo['title'] = title;

    var image = document.querySelector('div.fotorama__stage__frame img.fotorama__img');
    image = image && image.getAttribute('src');
    productInfo['image'] = image;

    var price = document.querySelector('span.special-price span.price');
    price = price && price.innerText;
    if(!price){
        price = document.querySelector('div.price-box span.price');
        price = price && price.innerText;
    }
    price = extractIntFromText(price);
    productInfo['price'] = price;

    productInfo['currency'] = 'IRT';

    var oldPrice = document.querySelector('span.old-price span.price');
    oldPrice = oldPrice && oldPrice.innerText;
    oldPrice = extractIntFromText(oldPrice);
    var discount = 0;
    discount = (oldPrice - price) / oldPrice * 100;
    discount = Math.round(discount);
    if (discount) {
        productInfo['discount'] = discount;
    }

    var unAvailable = document.querySelector('div.unavailable');
    if (unAvailable) {
        productInfo['isAvailable'] = false;
        delete productInfo.price;
        delete productInfo.currency;
    } else {
        productInfo['isAvailable'] = true;
    }

    productInfo['category'] = [];
    var categoryList = document.querySelectorAll('div.breadcrumbs ul.items li.item a');
    for (var i = 1, size = categoryList.length; i < size; i++) {
        var item = categoryList[i];
        productInfo['category'].push(item.innerText);
    }

    return productInfo;
}

function sendData () {
    try {
        var productInfo = extractProductData();

        if (productInfo && productInfo.sku && productInfo.title && productInfo.image) {
            console.log(productInfo);
            return true;
        }
        else {
            return false;
        }
    } catch (e) {
        console.log(e);
        return false;
    }
}

if (sendData()) {
    return;
}
var retry = 0;
var intervalId = setInterval(function () {
    if (retry++ > 5 || sendData()) {
        clearInterval(intervalId);
    }
}, 1000);

})();

@navids


عرفان همتی
تخصص : Backend Developer
@erfanhemmati 5 سال پیش مطرح شد
0

@farzanehjafari5
سلام وقت بخیر
از پکیج زیر میتونید استفاده کنید که با php نوشته شده
https://symfony.com/doc/current/components/dom_crawler.html
با nodejs هم این کار امکان پذیره...


fjafari
@farzanehjafari5 5 سال پیش مطرح شد
0

ممنون از راهنماییتون اما نمیتونم از پکیج ها استفاده کنم!!
@mrerfan.ir


داود خانی
تخصص : برنامه نویس لاراول و متخصص سئو...
@davoodkhany 5 سال پیش مطرح شد
0

سلام شما میتونی از بعضی از سایتها تو اینسپکت بگردی و دنبال یه آرایه باشی که میتونی آدرس اون آرایه رو دریافت کنی و هر جای سایت خودت استفاده کنی ، یه جوری مثل api هست ولی اگه اون وجود نداشت باید خودت خزنده تعریف کنی که هر سایت هم با سایت های دیگه کاملا فرق میکنه ، برای هر سایت باید خزنده مربوط به خودشو بنویسی.این سوالو پرسیدی رفتم یکی از سایت های معروف رو دیدم که راحت میشه همین چیزهایی رو که گفتی راحت از سایتشون بدون اینکه بیایید رباط یا crowler بنویسید راحت بدست بیارید
اینم یه لینک که می تونید استفاده کنید .

https://www.digikala.com/recommendation/v1/

نوب
تخصص : کدنویس نوب :)
@yk5742g 9 ماه پیش آپدیت شد
0

@erfanhemmati سلام
این پکیجی که معرفی کردید قابلیت استخراج اطلاعات یک فرم در صفحات متفاوت با آیدی متفاوت که در داشبرود پس از لاگین شدن هست را داره ؟

مثلا اول باید لاگین کنه توی اکانت با یوزر و پسوردی که میدیم و بعدش به صورت زیر لینک ها را باز کنه و اطلاعات فرم ها را برداره
example.com/admin/user/223
example.com/admin/user/224
example.com/admin/user/225


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

ورود یا ثبت‌نام