【问题标题】:Getting weather for a country, place bs4获取一个国家的天气,放置 bs4
【发布时间】:2019-03-09 12:08:18
【问题描述】:

我正在尝试使用此网站https://www.timeanddate.com/weather/ 通过以下方式打开 URL 来使用 BeautifulSoup4 抓取天气数据:

quote_page=r"https://www.timeanddate.com/weather/%s/%s/ext" %(country, place)

我还是网络抓取方法的新手,BS4,我可以在页面的来源中找到我需要的信息(例如,我们在这个搜索中将国家作为印度,城市作为孟买)链接为: https://www.timeanddate.com/weather/india/mumbai/ext

如果您看到页面的来源,使用CTRL+F 并找到“湿度”、“露点”和当前天气状态(如果晴天、下雨等)等信息的属性并不难。 ),唯一阻止我获取这些数据的是我对BS4 的了解。

您能否检查页面源并编写BS4 方法来获取诸如 “感觉像:”、“能见度”、“露点”、“湿度”、“风”和“预报”?

注意:在我必须获取 HTML 标记中的值(如 <tag class="someclass">value</tag>)之前,我已经完成了数据抓取练习 使用 `

a=BeautifulSoup.find(tag, attrs={'class':'someclass'})
a=a.text.strip()`

【问题讨论】:

  • 如果你需要天气数据,为什么不直接使用像openweathermap.org/api这样的API?
  • 这是一个很棒的 AP​​I,感谢您的评论。是的,我绝对可以使用更简单的 API,但这个问题的主要动机是了解我如何使用 beautifulsoup 来解决现实生活中的问题,而不仅仅是阅读文档和查看示例。但是,您提供的链接很有用。

标签: python web-scraping beautifulsoup


【解决方案1】:

你可以熟悉一下 CSS 选择器

 import requests
from bs4 import BeautifulSoup as bs
country = 'india'
place = 'mumbai'
headers = {'User-Agent' : 'Mozilla/5.0',
          'Host' : 'www.timeanddate.com'}
quote_page= 'https://www.timeanddate.com/weather/{0}/{1}'.format(country, place) 
res = requests.get(quote_page)
soup = bs(res.content, 'lxml')
firstItem = soup.select_one('#qlook p:nth-of-type(2)')
strings = [string for string in firstItem.stripped_strings]
feelsLike = strings[0]
print(feelsLike)
quickFacts = [item.text for item in soup.select('#qfacts p')]

for fact in quickFacts:
    print(fact)

第一个选择器#qlook p:nth-of-type(2) 使用id selector 指定父级,然后使用:nth-of-type CSS pseudo-class 选择其中的第二个段落类型元素(p 标签)。

该选择器匹配:

我使用stripped_strings 来分隔各个行并按索引访问所需的信息。


第二个选择器#qfacts p 使用id selector 作为父元素,然后使用descendant combinatorp type selector 指定子p 标签元素。该组合符合以下条件:

quickFacts 表示这些匹配项的列表。您可以按索引访问项目。

【讨论】:

  • 感谢您的详细回答,但我认为您没有看到“res”变量,因为它说 res 未定义(在 res.content 中)。你能快点解决这个问题吗?我现在像口译员一样工作,所以如果我遇到任何问题,我会在即将到来的 cmets 中添加,如果可以的话!
  • 哎呀...更新了。 jupyter 记忆事物的危害
  • 我正在使用 BeautifulSoup 4.7.1
  • 哈哈哈没问题,我正在使用 spyder for python 3.5 btw。像魅力一样工作,谢谢。在使用 BS4 打开网页时,我仍然需要了解从“lxml”类型网页中的标签获取值的方法;您刚刚使用的那些(CSS 选择器?)。这些对我来说是新的,我想了解更多,你有任何我可以参考的资源或我可以观看的教程吗?
  • 按照我的答案中的链接,并与this一起玩。相关剪辑:google.com/search?client=firefox-b-d&q=css+diner
猜你喜欢
  • 2017-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多