天气网站的网页抓取返回 nil

时间:2021-02-11 03:29:56

标签: web-scraping

我是 Python 新手,我正在尝试从 The Weather Network 获取温度,但是我没有收到任何温度值。有人可以帮我解决这个问题,因为我已经坚持了一段时间吗? :(先谢谢你!

import time
import schedule
import requests

from bs4 import BeautifulSoup

def FindTemp ():
    myurl = "https://www.theweathernetwork.com/ca/36-hour-weather-forecast/ontario/toronto"

    headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'
   }
    r = requests.get(myurl, headers = headers)
    c = r.content
    soup = BeautifulSoup(c,"html.parser")
    all = soup.find("div",{"class":"obs-area"}).find("span",{'class': 'temp'})
    todaydate = time.asctime()
    TorontoTemp = all.text
    print("The temperature in Toronto is" ,TorontoTemp, "on", todaydate)
    print(TorontoTemp)

print(FindTemp())

1 个答案:

答案 0 :(得分:1)

即使您没有做错任何事情,它也完全不必工作。许多站点使用 Javascript 来获取数据,因此您需要使用其他一些内置 Chromium 的抓取工具,并使用与您亲自与站点交互时会看到的相同 DOM。许多拥有重要数据(例如天气数据)的网站会主动保护自己免遭抓取,因为它们提供的数据具有货币价值(即您可以购买数据提要访问权限)。

无论如何,您应该从一些众所周知的抓取良好的网站开始。 Beautifulsoup 自己的网页是一个好的开始:)

并且您应该使用调试器来查看您的代码生成的中间值,并调查它们与您的期望不同的地方。