``## Görev Açıklaması
Kullanıcıya yapılacak otel önermeleri için web scraping yapılarak otel bilgilerini elde etmek.
Görev Gereksinimleri ve Yapılacaklar
Otel verileri TripcAdvisor sitesi üzerinden çekmek planlanmaktadır. Çekilecek otel verisinin özelliği şu şekildedir.
Yapılacaklar
Otelin,
[ ] TripAdvisor linki
[ ] Adı
[ ] Fiyatı
[ ] Değerlendirme puanı
[ ] Telefon Numarası
[ ] İşletme Olanakları
[ ] Oda özellikleri
[ ] Koordinatları
Yapılacaklar
[ ] Data scrape yöntemi araştırılması
[ ] Veri çekmek
Yazılım Tasarımı
Bu işlem için Beatiful Soup ve Selenium kullanılacaktır. Beautiful Soup, ham HTML verilerinin kazınması için kullanılırken, Selenium ise JavaScript temelli HTML verilerinin kazınmasında kullanılır, özellikle butonlar, form gönderimleri gibi interaktif öğelerle etkileşim gerektiğinde tercih edilir.
url = f'https://www.tripadvisor.com.tr{hotel_links[i]}'
browser = uc.Chrome(options=chrome_options)
random_sleep()
print(url)
try:
browser.get(url)
random_sleep()
cookie = WebDriverWait(browser, 20).until(
EC.presence_of_element_located((By.ID, "onetrust-cookie-btn-container"))
)
cookie.click()
sleep(4)
denied = WebDriverWait(browser, 20).until(
EC.presence_of_element_located((By.CSS_SELECTOR, ".ot-pc-refuse-all-handler"))
)
denied.click()
page_html = browser.page_source
random_sleep()
bsobj = soup(page_html, 'lxml')
try:
names.append(bsobj.find('h1', {'class': 'biGQs _P rRtyp'}).text.strip())
except (NameError, AttributeError) as e:
print("Name is not found! Skipping the name section... ", url)
names.append('None')
random_sleep()
try:
links.append(bsobj.find('div', {'class': 'eeVey S4 H3 f u LGJIs'}).find('a').get('href'))
except:
print("Link is not found! Skipping the name section...", url)
links.append('None')
random_sleep()
try:
phone_numbers.append(bsobj.find('div', {'class': 'kpIff f u'}).text)
except:
print("PhoneNumber is not found! Skipping the name section...", url)
phone_numbers.append('None')
sleep(3)
try:
addresses.append(bsobj.find('span', {'class':'biGQs _P pZUbB KxBGd'}).text)
except:
print("Address is not found! Skipping the name section...", url)
addresses.append('None')
random_sleep()
try:
img = bsobj.find('img', {'class': 'MJDXi'})
if img:
src = img['src']
match = re.search(r"center=([-\d.]+),([-\d.]+)", src)
if match:
latitude, longitude = match.groups()
print(f"Latitude: {latitude}, Longitude: {longitude}")
coordinates.append([latitude, longitude])
else:
print("Latitude and longitude not found in the URL.")
coordinates.append([None, None])
else:
print("Image tag not found.")
coordinates.append([None, None])
except Exception as e:
print(f"An error occurred while extracting coordinates: {e}")
coordinates.append([None, None])
random_sleep()
try:
ratings.append(bsobj.find('span', {'class': 'kJyXc P'}).text)
except:
print("Rating is not found! Skipping the name section...", url)
ratings.append('None')
random_sleep()
browser.execute_script("window.scrollBy(0, 900);")
random_sleep()
try:
prices.append(bsobj.find('div', {'class': 'aLfMd'}).text)
except Exception as e:
print("Price is not found! Skipping the name section...", url)
print(e)
prices.append('None')
random_sleep()
try:
try:
css_selector = "div.LRBRp.S4.b._S"
daha_fazla_goster = WebDriverWait(browser, 10).until(
EC.element_to_be_clickable((By.CSS_SELECTOR, css_selector))
)
sleep(3)
# Elementi sayfanın görünür alanına getir
browser.execute_script("arguments[0].scrollIntoView();", daha_fazla_goster)
sleep(2)
browser.execute_script("window.scrollBy(0, -300);")
sleep(1)
# Elemente tıkla
daha_fazla_goster.click()
except:
print("Daha fazla göstere basilamadi")
random_sleep()
bsobj2 = soup(browser.page_source, 'lxml')
divs = bsobj2.find_all('div', {'class':'gFttI f ME Ci H3 _c'})
temp = []
for div in divs:
temp.append(div.text)
print(div.text)
olanaklar.append(temp)
sleep(5)
browser.quit()
except:
print("Olanaklar is not found! Skipping the name section...", url)
olanaklar.append('None')
sleep(3)
except (TimeoutException, WebDriverException) as e:
browser.quit()
print(e.msg)
sleep(6)
counter = counter + 1
i=i-1
if(counter == 5):
break
Aşağıdaki kod bloğunda BeatifulSoup request sonucu gelen raw HTML içerisinde ilgili aramalar yapılarak veri çekiliyor. Selenium kullanılarak da sayfa açıldığı zaman sayfayla daha karmaşık olarak etkileşime girebiliyoruz.
``## Görev Açıklaması Kullanıcıya yapılacak otel önermeleri için web scraping yapılarak otel bilgilerini elde etmek.
Görev Gereksinimleri ve Yapılacaklar
Otel verileri TripcAdvisor sitesi üzerinden çekmek planlanmaktadır. Çekilecek otel verisinin özelliği şu şekildedir.
Yapılacaklar
Otelin,
Yapılacaklar
Yazılım Tasarımı
Bu işlem için Beatiful Soup ve Selenium kullanılacaktır. Beautiful Soup, ham HTML verilerinin kazınması için kullanılırken, Selenium ise JavaScript temelli HTML verilerinin kazınmasında kullanılır, özellikle butonlar, form gönderimleri gibi interaktif öğelerle etkileşim gerektiğinde tercih edilir.
Aşağıdaki kod bloğunda BeatifulSoup request sonucu gelen raw HTML içerisinde ilgili aramalar yapılarak veri çekiliyor. Selenium kullanılarak da sayfa açıldığı zaman sayfayla daha karmaşık olarak etkileşime girebiliyoruz.