2016-08-23 63 views
0

我正在研究一個python項目,我需要找出公司擁有的應用程序。 例如,我有一個列表:在列表中自動執行谷歌播放搜索項目

company_name = ['Airbnb', 'WeFi'] 

我想編寫一個Python函數/程序來執行以下操作:

1。有它自動搜索項目在Play商店的列表中

2。如果公司名稱匹配,即使它只匹配的第一個名字,例如「製作的Airbnb」將匹配「的Airbnb,INC」

Airbnb Search Page circled

  • 然後,它會點擊進入該頁面並閱讀其類別 Airbnb Read category

  • 如果公司有多個應用程序,它將爲所有應用程序執行相同操作。

  • 公司的每個應用程序的信息是tuple = {app name, category}

  • 期望的最終結果店將元組

  • 如列表:

    print(company_name[0]) 
    print(type(company_name[0])) 
    

    結果:
    的Airbnb
    元組

    print(company_name[0][0]) 
    

    結果:
    [( '製作的Airbnb', '旅行')]

    這是一個混合的很多知識,我是一個新手,蟒蛇。所以請給我一些指導,我該如何開始編寫代碼。

    我學習硒可以自動執行「加載更多」功能,但我不確定我可以使用什麼樣的封裝?

    +0

    腳本你有代碼湊一個頁面? –

    +0

    是的,我知道如何刮谷歌頁面,但我做'自動化'部分有困難。我不知道如何在列表中自動執行搜索項並自動點擊進入頁面。 – KeepLearning

    +1

    添加你的代碼,讓你那麼遠 –

    回答

    0

    我寫了一個小小的演示,可以幫助你實現你的目標。我使用了請求和美麗的湯。這不完全是你想要的,但它可以很容易地適應。

    import requests 
    import bs4 
    
    company_name = "airbnb" 
    def get_company(company_name): 
        r = requests.get("https://play.google.com/store/search?q="+company_name) 
        soup = bs4.BeautifulSoup(r.text, "html.parser") 
        subtitles = soup.findAll("a", {'class':"subtitle"}) 
        dev_urls = [] 
        for title in subtitles: 
         try: 
          text = title.attrs["title"].lower() 
         #Sometimes there is a subtitle without any text on GPlay 
         #Catchs the error 
         except KeyError: 
          continue 
         if company_name in text: 
          url = "https://play.google.com" + title.attrs["href"] 
          dev_urls.append(url) 
        return dev_urls 
    
    def get_company_apps_url(dev_url): 
        r = requests.get(dev_url) 
        soup = bs4.BeautifulSoup(r.text, "html.parser") 
        titles = soup.findAll("a", {"class":"title"}) 
        return ["https://play.google.com"+title.attrs["href"] for title in titles] 
    
    def get_app_category(app_url): 
        r = requests.get(app_url) 
        soup = bs4.BeautifulSoup(r.text, "html.parser") 
        developer_name = soup.find("span", {"itemprop":"name"}).text 
        app_name = soup.find("div", {"class":"id-app-title"}).text 
        category = soup.find("span", {"itemprop":"genre"}).text 
        return (developer_name, app_name, category) 
    
    dev_urls = get_company("airbnb") 
    apps_urls = get_company_apps_url(dev_urls[0]) 
    get_app_category(apps_urls[0]) 
    
    >>> get_company("airbnb") 
    ['https://play.google.com/store/apps/developer?id=Airbnb,+Inc'] 
    >>> get_company_apps_url("https://play.google.com/store/apps/developer?id=Airbnb,+Inc") 
    ['https://play.google.com/store/apps/details?id=com.airbnb.android'] 
    >>> get_app_category("https://play.google.com/store/apps/details?id=com.airbnb.android") 
    ('Airbnb, Inc', 'Airbnb', 'Travel & Local') 
    

    我與谷歌

    dev_urls = get_company("google") 
    apps_urls = get_company_apps_url(dev_urls[0]) 
    for app in apps_urls: 
        print(get_app_category(app)) 
    
    ('Google Inc.', 'Google Duo', 'Communication') 
    ('Google Inc.', 'Google Translate', 'Tools') 
    ('Google Inc.', 'Google Photos', 'Photography') 
    ('Google Inc.', 'Google Earth', 'Travel & Local') 
    ('Google Inc.', 'Google Play Games', 'Entertainment') 
    ('Google Inc.', 'Google Calendar', 'Productivity') 
    ('Google Inc.', 'YouTube', 'Media & Video') 
    ('Google Inc.', 'Chrome Browser - Google', 'Communication') 
    ('Google Inc.', 'Google Cast', 'Tools') 
    ('Google Inc.', 'Google Sheets', 'Productivity') 
    
    +0

    hi @ Peter234,這太好了!您提供了一個新的視角來處理我的問題。我會深入研究它!再次感謝!! – KeepLearning

    +0

    我只是想從下來的選民那裏得到答案。我不應該張貼這麼多的代碼? – Peter234