使用BeautifulSoup4全方位解析爬取全国天气数据
一、小tips
# 通过requests的一个get请求去请求数据
response = requests.get(url)
response.content -->二进制数据
response.content.decode('utf-8') # 加了decode自动转化为字符串
response.text -->字符串
stripped_strings:获取一个标签下面的子孙节点的文本信息
# 解析网页,使用html5lib可以更好的解析
soup = BeautifulSoup(text,'html5lib')
#find直接返回元素信息
conMidtab = soup.find('div',class_='conMidtab')
#find_all直接返回的是列表
tables = conMidtab.find_all('table')
#enumerate()会返回两个值,第一个是索引,第二个是索引所对应的元素
for index,tr in enumerate(trs):
tds = tr.find_all('td')
city_td = tds[0] #城市
if index==0:
city_td = tds[1]
city=list(city_td.stripped_strings)[0]
temp_td = tds[-2] #温度
temp = list(temp_td.stripped_strings)[0]
print('城市:',city,'温度:',temp)
# break #先打印一个城市的信息
二、Steps
1.定义一个函数解析url
①通过requests的一个get请求去请求数据
②通过BeautiSoup4解析网页,使用html5lib可以更好的解析
③找网络元素:
第一步:找conMidtab
第二步:找table
第三步:找tr
第四步:找td,第一个td是城市,倒数第2个td是气温
三、Code
import requests
from bs4 import BeautifulSoup
#定义一个函数解析url
def parse_page(url):
# 通过requests的一个get请求去请求数据
response = requests.get(url)
#出现乱码使用decode('utf-8')
text = response.content.decode('utf-8')
# 解析网页,使用html5lib可以更好的解析
soup = BeautifulSoup(text,'html5lib')
#可以找网络元素
#第一步,找conMidtab:find直接返回元素信息
conMidtab = soup.find('div',class_='conMidtab')
# 第二步,找table:find_all直接返回的是列表,以列表形式返回
tables = conMidtab.find_all('table')
# 第三步,找tr
for table in tables:
trs = table.find_all('tr')[2:] #过滤掉前面两个的信息
# 第四步,找td,第一个td是城市,倒数第2个td是气温
#enumerate()会返回两个值,第一个是索引,第二个是索引所对应的元素
for index,tr in enumerate(trs):
tds = tr.find_all('td')
city_td = tds[0] #城市
if index==0:
city_td = tds[1]
city=list(city_td.stripped_strings)[0]
temp_td = tds[-2] #温度
temp = list(temp_td.stripped_strings)[0]
print('城市:',city,'温度:',temp)
# print(conMidtab)
#main函数
def main():
url = 'http://www.weather.com.cn/textFC/gat.shtml' #网址
parse_page(url)
if __name__ == '__main__':
main()
到这里,我们就成功的掌握了使用BeautifulSoup4全方位解析爬取全国天气数据的方法啦!宝贝们棒棒滴!