وب اسکریپینگ سایت دیوار

مقدمه

وب اسکریپینگ به زبان ساده یعنی اینکه صفحات وب را کراول کنیم و داده هایی را از آن ها بدست بیاوریم. در ادامه سعی میکنیم در عمل بفهمیم وب اسکریپینگ برای ما چه کار میکند.

آخرین بروز رسانی: 30 تیر 1402

نصب سلنیوم:

با دستور زیر کتابخانه سلنیوم را نصب میکنیم:

pip install selenium
or
!pip install selenium

میتوانیم از محیط مجازی virtual enve استفاده کنیم.

ابزارهای اسکرپ بر پایه مرورگر زمان بیشتری نسبت به روشهای بر پایه پروتوکل میبرند. بنابراین توصیه میشود اگر به عناصر جاو اسکریپت نیاز نداریم، از روش های بر پایه پروتوکل استفاده کنیم(چون سریع تر هستند)

موارد اولیه:

موارد زیر را ایمپورت میکنیم:

import selenium
import re
import requests
from bs4 import BeautifulSoup
from selenium import webdriver

سپس درایور کروم را از فولدری که در آن قرار دارد میخوانیم و متغیرdrive را به آن نسبت میدهیم. سپس با متود get آدرس مورد نظر خود را روی آن ران میکنیم. سایت ذکر شده به جای دیوار میتواند یک ی از صفحات سایت دیوار باشد.

driver = webdriver.Chrome('E:\shahram\ML\webscap\chromedriver')
url='https://www.google.com/'
driver.get(url) # it is under control Boy

حال متن سایت مورد نظر خود را در text1 ریخته و آن را پرینت میکنیم:

text1=driver.page_source
print(text1)

روش دیگری نیز برای گرفتن متن سایت ها وجود دارد و آن استفاده از request.get است. ابتدا url مورد نظر را در یک متغیر میریزیم و سپس با استفاده سوپ زیبا و html.parser متن آن را میخوانیم.

بنابراین در دستور زیر یک متغیر به نام getsite_bmw تعریف میکنیم و سایت را میخوانیم: (بدیهی است که از متد get از کتابخانه request استفاده کرده ایم)

getsite_bmw=requests.get('https://divar.ir/s/tehran/car/bmw?q=bmw')

در کد زیر از BeautifulSoup میخواهیم ، متن سایت خوانده شده در کد قبلی را به سبک html.parser برای ما تجزیه کند. و در نهایت آن را چاپ میکنیم. در متن شلوغ خروجی تگهای مختلفی وجود دارد (همانند لوبیا و نخود و سبزی و عدس و گوشت که در سوپ وجود دارد). در ادامه تگ های خاصی از آن را انتخاب خواهیم کرد.

soup_bmw=BeautifulSoup(getsite_bmw.text,'html.parser')
print(soup_bmw)

نتیجه:

انتخاب تگ خاص:

در ادامه میخواهیم فقط یک تگ یا چند تگ خاص (بدنه آگهی) را پیدا کنیم. با دستور زیر فقط یک tag خاص را جدا کرده ایم وسپس با استفاده از یک حلقه ، متن مرتبط با هر آگهی را در خروجی چاپ کرده ایم:

model_bmw=soup_bmw.div.find_all('div' ,class_="kt-post-card__body")
for j in range(0,len(model_bmw)):
    print(model_bmw[j].get_text())    
    print('-------------------')

نتیجه:

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

در نوشته های بعدی سعی خواهیم کرد مسئله های کاربردی تری را با استفاده از وب اسکرپینگ حل کنیم.

منابع:

1- گیت هاب Strumer

منتشر شده در
دسته‌بندی شده در scrape

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد.