Heim  >  Fragen und Antworten  >  Hauptteil

Wie kratze ich mit BeautifulSoup bestimmten Google Weather-Text?

Wie finde ich den Kurstext „New York City, USA“ mit BeautifulSoupPython?

Ich habe versucht, das Video zum Üben zu kopieren, aber es funktioniert nicht mehr.

Ich habe versucht, etwas in der offiziellen Dokumentation zu finden, aber ohne Erfolg. Oder funktioniert meine get_html_content-Funktion nicht richtig und Google blockiert mich einfach und gibt so ein leeres list / None zurück?

Das ist mein aktueller Code:

from django.shortcuts import render
import requests

def get_html_content(city):
    USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36"
    LANGUAGE = "en-US,en;q=0.5"
    session = requests.Session()
    session.headers['User-Agent'] = USER_AGENT
    session.headers['Accept-Language'] = LANGUAGE
    session.headers['Content-Language'] = LANGUAGE
    city.replace(" ", "+")
    html_content = session.get(f"https://www.google.com/search?q=weather+in+{city}").text
    return html_content

def home(request):
    result = None
    if 'city' in request.GET: 
        city = request.GET.get('city')
        html_content = get_html_content(city)
        from bs4 import BeautifulSoup
        soup = BeautifulSoup(html_content, 'html.parser')
        soup.find_all('div', attrs={'class': 'wob_loc q8U8x'})
        **OR**
        soup.find_all('div', attrs={'id': 'wob_loc'})

--> alle geben eine leere Liste zurück (= .find 方法返回 None)

P粉275883973P粉275883973181 Tage vor316

Antworte allen(1)Ich werde antworten

  • P粉509383150

    P粉5093831502024-04-02 09:50:59

    Google 页面的布局可能同时发生了变化,因此要获取有关天气的数据,您必须更改代码。例如:

    import requests
    from bs4 import BeautifulSoup
    
    
    params = {'q':'weather in New York City, New York, USA', 'hl': 'en'}
    headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:108.0) Gecko/20100101 Firefox/108.0'}
    cookies = {'CONSENT':"YES+cb.20220419-08-p0.cs+FX+111"}
    
    url = 'https://www.google.com/search'
    
    
    soup = BeautifulSoup(requests.get(url, params=params, headers=headers, cookies=cookies).content, 'html.parser')
    
    for t in soup.select('#wob_dp [aria-label]'):
        how = t.find_next('img')['alt']
        temp = t.find_next('span').get_text(strip=True)
        print('{:<5} {:<20} {}'.format(t.text, how, temp))
    

    打印:

    Mon   Sunny                8
    Tue   Cloudy               7
    Wed   Partly cloudy        11
    Thu   Rain                 7
    Fri   Mostly cloudy        8
    Sat   Partly cloudy        6
    Sun   Scattered showers    8
    Mon   Showers              8
    

    Antwort
    0
  • StornierenAntwort