DC学院数据分析师(入门)学习笔记----基于网页抓取天气数据demo以及基于网页抓取《摔跤吧!爸爸》豆瓣评分

 

   

    课程示例的旧金山天气页面地址为:

http://forecast.weather.gov/MapClick.php?lat=37.77492773500046&lon=-122.41941932299972#.WUnSFhN95E4

   

   

    在火狐浏览器中提供了非常方便的网页代码查看器(其他浏览器可自行百度):


   

    这样我们可以很快速地知道我们想获取的信息在html代码中的位置,方便我们抓取信息。

 

     

    如果我们想要获取这个星期的天气情况,怎么做呢?

 

 

    下面,我们就来操作一下如何抓取出来我们需要的这部分信息。

    1.通过url.request 返回网页内容

import urllib.request as urlrequest
weather_url='http://forecast.weather.gov/MapClick.php?lat=37.77492773500046&lon=-122.41941932299972'
web_page=urlrequest.urlopen(weather_url).read()
print(web_page)

   

       

       2.通过BeautifulSoup 来抓取网页中的天气信息

   这里注意,我们想要抓取的天气情况的内容的在html中的id。(回看上上图)

from bs4 import BeautifulSoup
soup=BeautifulSoup(web_page,'html.parser')
print(soup.find(id='seven-day-forecast-body').get_text())


   

    我们也可以通过prettify输出一个美观的网页代码。


   

    我们先来观察一下这个网页代码,找到我们想要简短地获取的内容。


   

    对于这个问题,我们其实需要知道日期,天气和温度就可以了,也就是图中标出的那几项。

    比如,抓取日期:


         

    同样的,针对天气和温度,也可以根据他们的class获取。


   

    这里可以看到,天气的class有所不同:

<p class="temp temp-low">Low: 65 °F</p>
    这是指天气有两个class,我们通过class_='temp'  class_='temp-low'都可以找到它。


    怎样可以获取所有的天气呢?加上循环就可以了。

    3.将天气数据完整有序地抽取出来


    本案例的完整代码如下:

#导入需要的包和模块,这里需要的是 urllib.request 和 Beautifulsoup
import urllib.request as urlrequest
from bs4 import BeautifulSoup

#通过urllib来获取我们需要爬取的网页
weather_url='http://forecast.weather.gov/MapClick.php?lat=37.77492773500046&lon=-122.41941932299972'
web_page=urlrequest.urlopen(weather_url).read()

#用 BeautifulSoup 来解析和获取我们想要的内容块
soup=BeautifulSoup(web_page,'html.parser')
soup_forecast=soup.find(id='seven-day-forecast-container')

#找到我们想要的那一部分内容
date_list=soup_forecast.find_all(class_='period-name')
desc_list=soup_forecast.find_all(class_='short-desc')
temp_list=soup_forecast.find_all(class_='temp')

#将获取的内容更好地展示出来,用for循环来实现
for i in range(9):
    date=date_list[i].get_text()
    desc=desc_list[i].get_text()
    temp=temp_list[i].get_text()
    print("{}{}{}".format(date,desc,temp))

       在上一篇中,基于网站API抓取了《摔跤吧!爸爸》的豆瓣评分,这次我们基于网页来抓取一下。

    首先,打开《摔跤吧!爸爸》的豆瓣评分页面,并打开查看器看一下所需要抓取的得分所在的html结构:


   

    可以看到,评分所在的class的名字叫做'll rating_num'。这就是我们所需要依据的东西了。

import urllib.request as urlrequest
from bs4 import BeautifulSoup

douban_url='https://movie.douban.com/subject/26387939/'
page=urlrequest.urlopen(douban_url).read()

soup=BeautifulSoup(page,'html.parser')
score=soup.find(class_='ll rating_num').get_text()

print(score)




基于API的抓取和基于网页的抓取的对比:

基于API爬取得到的是JSON格式的数据,需要用到JSON库来处理;

基于网页的爬虫返回的HTML页面需要用BeautifulSoup库来解析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值