Maison > Questions et réponses > le corps du texte
Comment trouver le texte du cours « New York City, USA » en utilisant BeautifulSoup
在 Python
?
J'ai essayé de copier la vidéo pour m'entraîner, mais cela ne fonctionne plus.
J'ai essayé de trouver quelque chose dans la documentation officielle mais sans succès. Ou est-ce que ma fonction get_html_content ne fonctionne pas correctement et Google me bloque simplement, renvoyant ainsi un list
/ None
vide ?
Voici mon code actuel :
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'})
--> renvoient tous une liste vide (= .find
方法返回 None
)
P粉5093831502024-04-02 09:50:59
La présentation de la page Google a peut-être changé en même temps, donc pour obtenir des données sur la météo, vous devez modifier votre code. Par exemple :
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))
Impression :
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