首页 > 解决方案 > 如何在列表中的google中搜索关键字并提取数据

问题描述

假设我有一个由城市组成的列表。例如,

zip = ['newyork','delhi']

如何在谷歌上搜索new york pincodedelhi pincode提取数据。

搜索 给出了结果,并且存在多个密码。我只需要捕捉第一个。

我需要的输出:

{Newyork: 10001, Delhi: 110001}

我试过这个

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
import re
import pandas as pd
import os
import html5lib
import json
import time
from selenium import webdriver
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.common.keys import Keys
url = "https://www.google.com/"
chromedriver = r"C:\Users\me\chromedriver"
driver = webdriver.Chrome(chromedriver)
driver.implicitly_wait(30)
driver.get(url)
search = driver.find_element_by_name('q')
pincodencodee=['newyork','delhi']
for i in pincodencodee:    
    search.send_keys(i)
search.send_keys(Keys.RETURN) 
time.sleep(5) 
driver.quit()

标签: pythonpython-3.xseleniumselenium-webdriverselenium-chromedriver

解决方案


第一个邮政编码具有data-idx从 0 开始运行索引的属性,因此第一个邮政编码将具有data-idx="0". 您还需要每次重新定位搜索栏以防止StaleElementReferenceException

driver.maximize_window()
driver.get(url)

pincodencodee = {'new york': -1, 'delhi': -1}
for key in pincodencodee.keys():
    search = driver.find_element_by_name('q')
    search.clear()
    search.send_keys(key + ' pincode')
    search.send_keys(Keys.RETURN)

    code = driver.find_element_by_css_selector('.rl_item[data-idx="0"] .title')
    pincodencodee[key] = code.text

driver.quit()

print(pincodencodee) # {'new york': '10001', 'delhi': '110001'}

推荐阅读