Как очистить часть результатов поиска Google - PullRequest
0 голосов
/ 12 января 2020

Я хочу очистить информацию от акций AMD, которую предоставляет Google. Мне удалось очистить всю веб-страницу, но как только я пытаюсь получить конкретный c div или class Я не могу найти ничего, и консоль возвращает [] , При очистке всей страницы я тоже не могу найти эти классы, после поиска я обнаружил, что это возможно скрыто Javascript и может ли быть каким-либо образом принято с Selenium? Я пытался использовать Selenium Webdriver, но это ни к чему не привело.

Это то, что у меня есть:

import requests
from bs4 import BeautifulSoup
import urllib3
from selenium import webdriver

requests.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"}


url = "https://www.google.com/search?q=amd+stock&oq=amd+stock&aqs=chrome..69i57j35i39j0l5j69i60.1017j0j7&sourceid=chrome&ie=UTF-8"
source_code = requests.get(url, requests.headers)
soup = BeautifulSoup(source_code.text, "html.parser")
amd = soup.find_all('div', attrs = {'class': 'aviV4d'})
print(amd)

При печати «супа» я получаю всю страницу, но при печати » и я получаю [].

Ответы [ 3 ]

0 голосов
/ 12 января 2020

Это динамическая c страница, она не даст цену акции, просто запросив источник страницы через requests. Вы должны будете использовать выскабливание, чтобы сделать это. Попробуйте вместо этого:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--incognito")
chromedriver_path = './chromedriver'
driver = webdriver.Chrome(executable_path=chromedriver_path, options=options)
driver.get("https://www.google.com/search?q=amd+stock&oq=amd+stock&aqs=chrome..69i57j35i39j0l5j69i60.1017j0j7&sourceid=chrome&ie=UTF-8")

time.sleep(2)
x = driver.find_element_by_xpath('//*[@id="knowledge-finance-wholepage__entity-summary"]/div/g-card-section/div/g-card-section/span[1]/span/span[1]')

print(x.text)
driver.quit()

Вывод:

48.16
0 голосов
/ 12 января 2020

Ваш код в порядке, но используйте headers= параметр в request() вызов:

import requests
from bs4 import BeautifulSoup

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"}

url = "https://www.google.com/search?q=amd+stock&oq=amd+stock&aqs=chrome..69i57j35i39j0l5j69i60.1017j0j7&sourceid=chrome&ie=UTF-8"
source_code = requests.get(url, headers=headers)
soup = BeautifulSoup(source_code.text, "html.parser")
amd = soup.find('div', attrs = {'class': 'aviV4d'})
print(amd.get_text(strip=True, separator='|').split('|')[:3])

Печать:

['Advanced Micro Devices', 'NASDAQ: AMD', '48,16']
0 голосов
/ 12 января 2020

Я считаю, что вам нужно добавить amd.response или amd.text

print(amd.response)
print(amd.text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...