Heim > Fragen und Antworten > Hauptteil
Wie finde ich den Kurstext „New York City, USA“ mit BeautifulSoup
在 Python
?
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粉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