Для л oop для соскоба в python - PullRequest
0 голосов
/ 12 марта 2020

У меня есть небольшой проект, работающий над поиском в Интернете с помощью списка ключевых слов. Я построил вложенный For l oop для очистки результатов поиска. Проблема в том, что поиск l oop для ключевых слов в списке не работает так, как я намеревался, то есть собирает данные из каждого результата поиска. Результаты получают только результат последнего ключевого слова, за исключением первых двух результатов поиска.

Вот код:

browser = webdriver.Chrome(r"C:\...\chromedriver.exe")

df = pd.DataFrame(columns = ['ceo', 'value'])

baseUrl = 'https://www.google.com/search?q='

html = browser.page_source
soup = BeautifulSoup(html)

ceo_list = ["Bill Gates", "Elon Musk", "Warren Buffet"]
values =[]


for ceo in ceo_list:
    browser.get(baseUrl + ceo)
    r = soup.select('div.g.rhsvw.kno-kp.mnr-c.g-blk')

    df = pd.DataFrame()
    for i in r:

        value = i.select_one('div.Z1hOCe').text                     
        ceo = i.select_one('.kno-ecr-pt.PZPZlf.gsmt.i8lZMc').text   
        values = [ceo, value]

    s = pd.Series(values)
    df = df.append(s,ignore_index=True)


print(df)

Вывод:

              0                                                  1
0  Warren Buffet  Born: October 28, 1955 (age 64 years), Seattle...

Результат, который я ожидаю, следующий:

              0                                                  1
0  Bill Gates      Born:..........
1  Elon Musk       Born:...........
2  Warren Buffett  Born: August 30, 1930 (age 89 years), Omaha, N...


Any suggestions or comments are welcome here.

1 Ответ

0 голосов
/ 12 марта 2020

Объявите df = pd.DataFrame() за пределами для l oop

Поскольку в настоящее время вы определили его внутри l oop, для каждого ключевого слова в вашем списке он будет инициализировать новый фрейм данных и более старый будет заменен Вот почему вы только что получили результат для последнего ключевого слова.

Попробуйте это:

browser = webdriver.Chrome(r"C:\...\chromedriver.exe")
df = pd.DataFrame(columns = ['ceo', 'value'])
baseUrl = 'https://www.google.com/search?q='
html = browser.page_source
soup = BeautifulSoup(html)
ceo_list = ["Bill Gates", "Elon Musk", "Warren Buffet"]
df = pd.DataFrame()
for ceo in ceo_list:
    browser.get(baseUrl + ceo)
    r = soup.select('div.g.rhsvw.kno-kp.mnr-c.g-blk')
    for i in r:
        value = i.select_one('div.Z1hOCe').text                     
        ceo = i.select_one('.kno-ecr-pt.PZPZlf.gsmt.i8lZMc').text
    s = pd.Series([ceo, value])
    df = df.append(s,ignore_index=True)
print(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...