scrapy 网页搜罗AccuWeather网站

bq8i3lrv  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(159)

我最近开始在python中使用Scrapy学习Web抓取,并面临着从AccuWeather.org网站(https://www.accuweather.com/en/gb/london/ec4a-2/may-weather/328328?year=2020)抓取数据的问题。基本上,我捕捉日期和它的天气温度为我的报告目的。当检查网站时,我发现太多的div标签,所以写代码时感到困惑。所以我想我会寻求Maven的帮助。
下面是我的代码供您参考。

import scrapy

class QuoteSpider(scrapy.Spider):
    name = 'quotes'
    start_urls = ['https://www.accuweather.com/en/gb/london/ec4a-2/may-weather/328328?year=2020']

    def parse(self, response):
        All_div_tags = response.css('div.content-module')[0]
        #Grid_tag = All_div_tags.css('div.monthly-grid')
        Date_tag = All_div_tags.css('div.date::text').extract()
        yield {
            'Date' : Date_tag}

我在PyCharm中写了这个,并得到错误“代码未处理或不允许”。请帮我拿一下这个。

tkclm6bt

tkclm6bt1#

我试着读了一些网站,给了我同样的错误。这是因为有些网站不允许在上面进行网页抓取。要从这些网站获取数据,您可能需要使用它们的API(如果它们有)。幸运的是,AccuWeather使其API的使用变得很容易(与其他API不同):
1.首先,您需要在其开发人员的网站上创建一个帐户:https://developer.accuweather.com/
1.现在,通过转到我的应用>添加新应用创建新应用。
1.您可能会看到有关您的应用程序的一些信息(如果没有,请按其名称,它可能会显示)。您需要的唯一信息是您的API Key,这对于API来说是必不可少的。

  1. AccuWeather有关于他们的API here的很好的文档,但我将向您展示如何使用最有用的文档。你需要有你想得到的天气从城市的位置键,这是显示在其天气页面的URL,例如,伦敦的URL是www.accuweather.com/en/gb/london/ec4a-2/weather-forecast/328328,所以它的位置键是328328.
    1.当你有了你想要获取天气的城市的位置键时,打开一个文件,然后键入:
import requests
import json

如果您需要每日天气(如here所示),请键入:

response = requests.get(url="http://dataservice.accuweather.com/forecasts/v1/daily/1day/LOCATIONKEY?apikey=APIKEY")
print(response.status_code)

将APIKEY替换为您的API密钥,将LOCATIONKEY替换为城市的位置密钥。现在,当你运行它时,它应该显示200(意味着请求成功)现在,将它作为JSON文件加载:

response_json = json.loads(response.content)

而你现在可以从中得到一些信息,比如当天的“定义”:

print(response_json["Headline"]["Text"])

最低温度:

min_temperature = response_json["DailyForecasts"][0]["Temperature"]["Minimum"]["Value"]
print(f"Minimum Temperature: {min_temperature}")

最高气温

max_temperature = response_json["DailyForecasts"][0]["Temperature"]["Maximum"]["Value"]
print(f"Maximum Temperature: {max_temperature}")

机组最低温度和最高温度:

min_temperature = str(response_json["DailyForecasts"][0]["Temperature"]["Minimum"]["Value"]) + response_json["DailyForecasts"][0]["Temperature"]["Minimum"]["Unit"]
print(f"Minimum Temperature: {min_temperature}")

max_temperature = str(response_json["DailyForecasts"][0]["Temperature"]["Maximum"]["Value"]) + response_json["DailyForecasts"][0]["Temperature"]["Maximum"]["Unit"]
print(f"Maximum Temperature: {max_temperature}")

和更多.
如果你有任何问题,让我知道。希望我能帮到你!

相关问题