İçindekiler

As you might already know, the Resmi Google Places API'si yalnızca bir yer için 5 yorumla sınırlıdır. Bu nedenle geliştiriciler, Google Haritalar'daki herhangi bir işletmeden tüm incelemeleri getirme yeteneğine sahip olmak için kazıma yapmayı araştırıyor.

Google'ı tüm korumaları ve dinamik olarak oluşturulan sayfalarıyla kazımak zorlu bir görev olabilir. Neyse ki, python veya başka bir programlama dilinde incelemeleri kazımak için kullanabileceğiniz birçok araç var. Bu blog yazısında, Google İncelemelerini kazımak için en yaygın iki aracı göreceksiniz: tarayıcı emülasyonu ve Outscraper Platformu. Her biri, haritalardan herhangi bir listeden tüm incelemeleri almak için yeterlidir.

Dinamik İçerik Oluşturmak için Tarayıcı Kullanarak Python'da Google İncelemelerini Kazıma

Biz kullanacağız Selenyum Chrome tarayıcısını kontrol etmek için. Tarayıcı, Google Reviews'un dinamik sayfalarını oluşturacaktır. Selenium ile inceleme kazıyıcı oluşturmaya başlamak için ihtiyacımız olacak:

  1. Python 3+.
  2. Chrome tarayıcı yüklü.
  3. Selenium 3.141.0+ (python paketi).
  4. Chrome Sürücüsü (işletim sisteminiz için).
  5. Parsel veya Beautiful Soup gibi HTML'den veri ayıklamak için başka bir kütüphane.

Selenium ve Diğer Paketleri Kurun

Aşağıdaki komutları çalıştırarak Selenium ve Parsel paketlerini yükleyin. Parsel'i daha sonra HTML'den içerik ayrıştırırken kullanacağız.

				
					pip install selenium
pip install parsel # to extract data from HTML using XPath or CSS selectors
				
			

Tarayıcıyı Başlatın

Sürücüyü başlatmadan önce önceki adımları uyguladığınızdan ve chromedriver dosyanızın yoluna sahip olduğunuzdan emin olun. Sürücüyü aşağıdaki kod ile başlatın. Yeni tarayıcı penceresinin açıldığını görmelisiniz.

				
					from selenium import webdriver


chromedrive_path = './chromedriver' # use the path to the driver you downloaded from previous steps
driver = webdriver.Chrome(chromedrive_path)
				
			

You might see the following on mac: “chromedriver cannot be opened because the developer cannot be verified.” To overcome this, control-click the chromedriver in Finder, choose Open from the menu and then click Open in the dialog that appears. You should see “ChromeDriver was started successfully” in the opened terminal windows. Close it, and after this, you will be able to start ChromeDriver from your code.

Tüm Yorumları İndir Sayfası

Once you start the driver, you are ready to open some pages. To open any page, use the “get” command.

				
					url = 'https://www.google.com/maps/place/Central+Park+Zoo/@40.7712318,-73.9674707,15z/data=!3m1!5s0x89c259a1e735d943:0xb63f84c661f84258!4m16!1m8!3m7!1s0x89c258faf553cfad:0x8e9cfc7444d8f876!2sTrump+Tower!8m2!3d40.7624284!4d-73.973794!9m1!1b1!3m6!1s0x89c258f1fcd66869:0x65d72e84d91a3f14!8m2!3d40.767778!4d-73.9718335!9m1!1b1?hl=en&hl=en'
driver.get(url)
				
			

Parse Yorumları

Sayfanız açıldığında, Chrome pencerenizde kodunuz tarafından kontrol edilen sayfayı göreceksiniz. HTML sayfa içeriğini sürücüden almak için aşağıdaki kodu çalıştırabilirsiniz.

				
					page_content = driver.page_source
				
			

HTML içeriğini rahatça görmek için tarayıcı penceresinin sağ üst köşesindeki Chrome Menüsünü açıp Diğer Araçlar > Geliştirici Araçları'nı seçerek Chrome'da geliştirici konsolunu açın. Şimdi sayfanızın öğelerini görebilmeniz gerekir.

python'da google incelemelerini kazıyın
Developer Console ile Almak İstediğimiz İncelemelere X Yolu Bulma

Favori ayrıştırma araçlarınızı kullanarak HTML sayfasındaki içeriği ayrıştırabilirsiniz. Biz kullanacağız Parsel bu eğitimde.

				
					from parsel import Selector

response = Selector(page_content)
				
			

İncelemeler üzerinde yineleyin.

				
					results = []

for el in response.xpath('//div/div[@data-review-id]/div[contains(@class, "content")]'):
    results.append({
        'title': el.xpath('.//div[contains(@class, "title")]/span/text()').extract_first(''),
        'rating': el.xpath('.//span[contains(@aria-label, "stars")]/@aria-label').extract_first('').replace('stars' ,'').strip(),
        'body': el.xpath('.//span[contains(@class, "text")]/text()').extract_first(''),
    })
    
print(results)
				
			

Output from the Google Reviews Crawler (shortened).

				
					[
  {
    'title': 'Wanda Garrett',
    'rating': '5',
    'body': 'Beautiful ✨ park with a family-friendly atmosphere! I had a great time here; seeing all of the animals and learning all of the interesting facts was a fantastic way to spend the day. The zoo is beautifully landscaped and surrounded by …'
  },
  {
    'title': 'Bernadette Bennett',
    'rating': '4',
    'body': 'Worth going for the seals! They are the main attraction and located in the center of the zoo. We watched a live feeding and it was great. The kids loved it. The zoo is well manicured surrounded by gorgeous gardens. Lots of benches to rest …'
  },
  {
    'title': 'Mary Cutrufelli',
    'rating': '3',
    'body': "So not gonna lie... We came from PA. My kid expected to see lions and hippos and zebra from Madagascar. None of that which is there. It's clean it's a nice zoo. I wouldn't go again though."
  },
  ...
]
				
			

Tarayıcıyı Durdur

Sürücüyü kazıma işleminden önce ve sonra uygun şekilde başlatmak ve durdurmak önemlidir. Bu, internette gezinmeden önce ve sonra tarayıcınızı açıp kapatmanızla aynıdır. Aşağıdaki kodu çalıştırarak tarayıcıyı durdurun.

				
					driver.quit()
				
			

Despite the tricky HTML structure of Google Reviews, with Selenium and good knowledge of XPath and CSS selectors, you can achieve quite good results in scraping. This method of using a browser emulator should protect you from getting blocked. However, if you scale your application, consider using proxies to avoid unexpected problems.

Çoklu İşlem ve Diğer Öneriler

Sürücüleri çoklu işlemde (multithreading değil) çalıştırmak mümkündür ancak her sürücü bir CPU tüketecektir. Yeterli sayıda CPU'ya sahip olduğunuzdan emin olun.

Python'da Google İncelemelerini Kazımanın En Kolay Yolu

Google'dan tarayıcılarla veri çekmenin artıları ve eksileri vardır. Kazıyıcıyı kendiniz geliştirebilseniz de, ölçeklendirme sırasında, tarayıcı emülasyonlarını işlemek için büyük miktarda CPU'ya sahip sunucuların kullanılması büyük masraflara yol açabilir. Ayrıca, tarayıcının bakımını yapan ve Google site değişiklikleri sırasında güncelleyen bir kişi olmalıdır.

Kullanarak Outscraper PlatformOutscraper Google Haritalar Yorumları APIveya SDK'lar, Outscraper, işletmelerin ve bireylerin proxy'lerle, tarayıcı emülasyonuyla uğraşmadan ve geliştirmeye yatırım yapmadan Google'dan Yorumları Kazımaya başlamaları için en kolay çözümü sunar.

SDK Kullanarak Python'da Yorumları Kazıyın

1. Python3+ ve buna ihtiyacınız olacak python paketi. Komutu çalıştırarak paketi yükleyin.

				
					pip install google-services-api
				
			

2. API anahtarınızı şu adresten alın Profil sayfası.

3. Paketi içe aktarın ve anahtarla başlatın.

4. Bir bağlantı, yer kimliği veya ad sağlayarak konumu belirtin.

				
					from outscraper import ApiClient


api_cliet = ApiClient(api_key='KEY_FROM_OUTSCRAPER')
response = api_cliet.google_maps_reviews(
    'https://www.google.com/maps/place/Do+or+Dive+Bar/@40.6867831,-73.9570104,17z/data=!3m2!4b1!5s0x89c25b96a0b10eb9:0xfe4f81ff249e280d!4m5!3m4!1s0x89c25b96a0b30001:0x643d0464b3138078!8m2!3d40.6867791!4d-73.9548217',
    language='en',
    limit=100
)
				
			

5. Wait a few seconds till the reviews are fetched.

				
					[
    {
        "name": "Do or Dive Bar",
        "full_address": "1108 Bedford Ave, Brooklyn, NY 11216, United States",
        "borough": "Bedford-Stuyvesant",
        "street": "1108 Bedford Ave",
        "city": "Brooklyn",
        "postal_code": "11216",
        "country_code": "US",
        "country": "United States of America",
        "us_state": "New York",
        "state": "New York",
        "plus_code": null,
        "latitude": 40.686779099999995,
        "longitude": -73.9548217,
        "time_zone": "America/New_York",
        "site": "https://www.doordivebedstuy.com/",
        "phone": "+1 917-867-5309",
        "type": "Bar",
        "rating": 4.5,
        "reviews": 425,
        "reviews_data": [
            {
                "google_id": "0x89c25b96a0b30001:0x643d0464b3138078",
                "autor_link": "https://www.google.com/maps/contrib/115539085325450648866?hl=en-US",
                "autor_name": "Sam Grjaznovs",
                "autor_id": "115539085325450648866",
                "autor_image": "https://lh3.googleusercontent.com/a-/AOh14GgxmEH7a10v6Bo8AFb6OkbyxxfIBPXbMYVAxeSIRA=c0x00000000-cc-rp-ba3",
                "review_text": "Cozy shin dig with an assortment of drinks. They have a strong specialty for 10bucks and merch too. They have out side dining as well as back yard area. Ask for Brandon every other Saturday. He\u2019s hella cute!",
                "review_img_url": "https://lh5.googleusercontent.com/p/AF1QipPNs8QvvdkBonV5wuxdoylFjLY3k7L6muepbDq-",
                "owner_answer": null,
                "owner_answer_timestamp": null,
                "owner_answer_timestamp_datetime_utc": null,
                "review_link": "https://www.google.com/maps/reviews/data=!4m5!14m4!1m3!1m2!1s115539085325450648866!2s0x0:0x643d0464b3138078?hl=en-US",
                "review_rating": 5,
                "review_timestamp": 1603781021,
                "review_datetime_utc": "10/27/2020 06:43:41",
                "review_likes": 0,
                "reviews_id": "7222934207919784056"
            },
            {
                "google_id": "0x89c25b96a0b30001:0x643d0464b3138078",
                "autor_link": "https://www.google.com/maps/contrib/110571545135018844510?hl=en-US",
                "autor_name": "Arabella Stephens",
                "autor_id": "110571545135018844510",
                "autor_image": "https://lh3.googleusercontent.com/a-/AOh14GisqDfheDO0Aq0cu1Z7YBTbzLyvSEvM3IMDKg3q=c0x00000000-cc-rp",
                "review_text": "Great atmosphere, always fun vibe and good beers. I live in the area and this is a very reliable standby. Would recommend to anyone who is not pretentious and likes a bit of clutter in their watering hole.",
                "review_img_url": "https://lh3.googleusercontent.com/a-/AOh14GisqDfheDO0Aq0cu1Z7YBTbzLyvSEvM3IMDKg3q",
                "owner_answer": null,
                "owner_answer_timestamp": null,
                "owner_answer_timestamp_datetime_utc": null,
                "review_link": "https://www.google.com/maps/reviews/data=!4m5!14m4!1m3!1m2!1s110571545135018844510!2s0x0:0x643d0464b3138078?hl=en-US",
                "review_rating": 5,
                "review_timestamp": 1614111762,
                "review_datetime_utc": "02/23/2021 20:22:42",
                "review_likes": 0,
                "reviews_id": "7222934207919784056"
            },
            {
                "google_id": "0x89c25b96a0b30001:0x643d0464b3138078",
                "autor_link": "https://www.google.com/maps/contrib/101725757133547547783?hl=en-US",
                "autor_name": "Jack Parker",
                "autor_id": "101725757133547547783",
                "autor_image": "https://lh3.googleusercontent.com/a-/AOh14GjFK9CLb8__u5PtJzH1rGuX4DVgPvjaEeIkSJnCNw=c0x00000000-cc-rp",
                "review_text": "All the bartenders are rad. Cheap drinks, and a nice backyard. They have space heaters, but I would still recommend bundling up if you plan on spending a while there. Jeopardy night is always fun too. Can\u2019t wait to sit inside again!",
                "review_img_url": "https://lh3.googleusercontent.com/a-/AOh14GjFK9CLb8__u5PtJzH1rGuX4DVgPvjaEeIkSJnCNw",
                "owner_answer": null,
                "owner_answer_timestamp": null,
                "owner_answer_timestamp_datetime_utc": null,
                "review_link": "https://www.google.com/maps/reviews/data=!4m5!14m4!1m3!1m2!1s101725757133547547783!2s0x0:0x643d0464b3138078?hl=en-US",
                "review_rating": 5,
                "review_timestamp": 1611947492,
                "review_datetime_utc": "01/29/2021 19:11:32",
                "review_likes": 0,
                "reviews_id": "7222934207919784056"
            },
            ...
        ]
]
				
			

Python paketi ► https://pypi.org/project/google-services-api
API ► https://app.outscraper.com/api-docs

Video Eğitimi

SSS

SIKÇA SORULAN SORULAR

Outscraper'nin Google Maps Reviews API'si sayesinde tüm Google Maps incelemelerini kazımak mümkün. Outscraper API hizmetleri, herhangi bir sınırlama olmaksızın kazıma yapmanıza olanak tanır.

Google Haritalar incelemeleri için bir API hizmeti vardır. Bu, Outscraper'nin Google Haritalar İncelemeleri API'sidir. Outscraper hizmetleri sayesinde, tüm Google Haritalar incelemelerini dışa aktarabilir ve indirebilirsiniz.

Yorumlar Python ve Selenium ile kazınabilir. Makalede detaylı olarak anlatılmıştır "Python'da Tüm Google İncelemelerinin Kazınması“.


Vlad

Proje Yöneticisi Linkedin