سرچ داده به صورت خودکار در موتور جستوجوگر - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

سرچ داده به صورت خودکار در موتور جستوجوگر

0 امتیاز
سلام میخواستم بدونم چطور میتونم برنامه ای بنویسم که یکسری داده رو به صورت خودکار در یک موتور جستوجوگر سرچ کند
سوال شده اردیبهشت 6, 1399  بوسیله ی AMINKH (امتیاز 15)   2 2
ویرایش شده اردیبهشت 6, 1399 بوسیله ی farnoosh

2 پاسخ

+1 امتیاز
 
بهترین پاسخ

توی پایتون به راحتی با پکیج   selenium  می تونید به صورت زیر:

1- pip install selenium 

2- کروم را نصب کنید.

3 - کروم درایور را از اینجا دانلود و از حالت فشرده خارجش کنید یا مسیرشو در environment معرفی کنید یا کنار کدتون کپیش کنید.

4 - از طریق اسکریپت زیر ازش استفاده کنید:

 

from selenium import webdriver 


search_string = input("Input the URL or string you want to search for:") 

search_string = search_string.replace(' ', '+') 

browser = webdriver.Chrome('chromedriver') 

for i in range(1): 
	matched_elements = browser.get("https://www.google.com/search?q =" +
									search_string + "&start =" + str(i)) 

 

پاسخ داده شده اردیبهشت 6, 1399 بوسیله ی farnoosh (امتیاز 8,362)   20 44 59
ویرایش شده اردیبهشت 19, 1399 بوسیله ی farnoosh
0 امتیاز

کد فرنوش را تکمیل کنم با یک کلاس تکمیل تر:

from selenium import webdriver

import time
from urllib.parse import quote_plus

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select


class Browser:

    def __init__(self, path='chromedriver.exe', initiate=True, implicit_wait_time = 10, explicit_wait_time = 2):
        self.path = path
        self.implicit_wait_time = implicit_wait_time    # http://www.aptuz.com/blog/selenium-implicit-vs-explicit-waits/
        self.explicit_wait_time = explicit_wait_time    # http://www.aptuz.com/blog/selenium-implicit-vs-explicit-waits/
        if initiate:
            self.start()
        return

    def start(self):
        self.driver = webdriver.Chrome(self.path)
        self.driver.implicitly_wait(self.implicit_wait_time)
        return

    def end(self):
        self.driver.quit()
        return

    def go_to_url(self, url, wait_time = None):
        if wait_time is None:
            wait_time = self.explicit_wait_time
        self.driver.get(url)
        print('[*] Fetching results from: {}'.format(url))
        time.sleep(wait_time)
        return

    def get_search_url(self, query, page_num=0, per_page=10, lang='en'):
        query = quote_plus(query)
        url = 'https://www.google.hr/search?q={}&num={}&start={}&nl={}'.format(query, per_page, page_num*per_page, lang)
        return url

    def scrape(self):
        #xpath migth change in future
        links = self.driver.find_elements_by_xpath("//a[@href]") # searches for all links insede h3 tags with class "r"
        results = []
        for elem in links:
          results.append(elem.get_attribute("href"))


        return results

    def search(self, query, page_num=0, per_page=10, lang='en', wait_time = None):
        if wait_time is None:
            wait_time = self.explicit_wait_time
        url = self.get_search_url(query, page_num, per_page, lang)
        self.go_to_url(url, wait_time)
        results = self.scrape()

        print(results)



    def search2(self):

      wait = WebDriverWait(self.driver, 100)

      wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'listing-item__title')))
      wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'listing-item__price')))

      for elm in self.driver.find_elements_by_css_selector(".listing-item__title,.listing-item__price"):
        print(elm.text)

 

 

برای سرچ هم به صورت زیر عمل کنید.

 b = Browser()
 res =  b.search("Book",1)

 

پاسخ داده شده اردیبهشت 18, 1399 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
...