前言:BeautifulSoup4是爬虫必学的技能,和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据。下面分享如何运用Python的第三方库BeautifulSoup4来爬取中国城市的天气。
中国天气网站(华北):http://www.weather.com.cn/textFC/hb.shtml
可以看到url中的 hb表示华北,其他区域则分别是:db(东北)、hd(华东)、hz(华中)、hn(华南)、xb(西北)、xn(西南)、gat(港澳台)。
我们的爬虫需求是:爬取全中国所有城市以及对应的最低气温。
页面结构分析,通过页面导航可以发现:
(1)整个分页都在<div class="conMidtab">...</div> == $0
标签里,同级标签有7个,对应7个日期的分页:
(2)一个<div class="conMidtab">
标签下面有多个<div class="conMidtab2">
的标签,一个<div class="conMidtab2">
标签的节点集对应一个省/直辖市:
(3)一个<div class="conMidtab2">
标签下面有两个节点标签:其中table标签(表格标签)包含了整个省/直辖市的所有城市及对应城市的天气信息,<div class="contentLtab">...</div>
标签是分隔行“返回顶部”:
(4)一个tr标签表示一行,第一个城市的名称和对应的天气在第三行(即第三个tr标签),第二个城市的名称和对应的天气在第四行,以此类推:
(5)一个td标签表示一个单元格,城市名称在第二个单元格(即第二个td标签,该td标签下面还有一个a标签),最低气温在倒数第二个单元格:
(6)验证数据在不在网页源代码中:
可以看到需要的信息都在对应的标签里。
案例实现:
import requests
from bs4 import BeautifulSoup
# 定义一个函数,用来获取网页源码并进行解析
def parse_page(url):
headers