Сохранение Google Trends Graph в виде изображения Stati c? - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь сохранить виджет Google Trend, который выводит линейный график, карту и т. Д. c. как изображение, используя Python. У URL, который я использую, есть только один виджет на странице, и я хотел бы сохранить его как статичное c изображение. Я хочу сохранить это изображение в зависимости от размера виджета; Я не хочу снимать скриншот страницы и обрезать это изображение. Может ли кто-нибудь помочь с этим, пожалуйста? BS4 не поднимает какие-либо виджеты, когда я их ищу. Я знаю, что не добавил никаких шагов для сохранения виджета, потому что я еще не нашел его. URL и код ниже:

https://trends.google.com/trends/embed/explore/TIMESERIES?req=%7B%22comparisonItem%22%3A%5B%7B%22keyword%22%3A%22Coronavirus%22%2C%22geo%22%3A%22%22%2C%22time%22%3A%222020-01-15%202020-03-02%22%7D%5D%2C%22category%22%3A0%2C%22property%22%3A%22%22%7D&tz=300&forceMobileMode=false&isPreviewMode=true&eq=date%3D2020-01-15%25202020-03-02%26q%3DCoronavirus&hl=enUS

import datetime
import requests
import warnings
from urllib3.exceptions import InsecureRequestWarning
from bs4 import BeautifulSoup 
from [redacted] import SETTINGS


d = datetime.date.today()
current_month = f"{d.month:02d}"
current_day = f"{d.day:02d}"

URL1 = 'https://trends.google.com/trends/embed/explore/TIMESERIES?req=%7B%22comparisonItem%22%3A%5B%7B%22keyword%22%3A%22Coronavirus%22%2C%22geo%22%3A%22%22%2C%22time%22%3A%222020-01-15%202020-'
URL2 = str(current_month)+"-"+str(current_day)
URL3 = '%22%7D%5D%2C%22category%22%3A0%2C%22property%22%3A%22%22%7D&tz=300&forceMobileMode=false&isPreviewMode=true&eq=date%3D2020-01-15%25202020-'
URL4 = URL2
URL5 = '%26q%3DCoronavirus&hl=enUS'

URL = URL1 + URL2 + URL3 + URL4 + URL5
print(URL)


def get_widget():
    #gets rid of request errors
    warnings.filterwarnings('ignore', message='Unverified HTTPS request')
    warnings.simplefilter('ignore',InsecureRequestWarning)
    #from internal core 
    proxies=SETTINGS['proxies']    
    resp = requests.get(URL, proxies=proxies, verify=False)
    html = resp.text
    #finds widgets
    soup = BeautifulSoup(html,'lxml')
    tags = soup.findAll("h2", {"class": "embed-logo"})
    for tag in tags:
        print(tag.getText())
    #another attempt to find the widgets
    widgets = soup.find_all('trends-wrapper ng-scope')
    number_of_widgets = len(widgets)
    print('Number of widgets: ' + str(number_of_widgets))

get_widget()

1 Ответ

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

С Selenium вы можете сделать только частичный снимок экрана диаграммы, тогда вам не придется обрезать изображение. Я не вижу другого способа получить эту диаграмму, кроме как загрузить данные и создать диаграмму с Python.

from selenium import webdriver
from time import sleep

URL = "https://trends.google.com/trends/explore?q=coronavirus&geo=US"
print(URL)
driver = webdriver.Chrome()
driver.get(URL)
sleep(10)
chart = driver.find_element_by_class_name('widget-container')
chart.screenshot("chart.png")
...