flask框架的简单使用

flask简介

Flask是一个使用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2模板引擎。Flask使用BSD授权。

aqi爬虫

Flask通过Python的装饰器在内部自动地把URL和函数给关联起来
Template目录下为模板html文件,嵌入了一些变量和指令,然后,根据我们传入的数据,替换后,得到最终的HTML,发送给用户。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
num = int(request.form['num'])
pollutant = int(request.form['pollutant'])
aqi.py向pm25.in网站爬取所有城市的空气信息

def get_city_aqi(city_pingyin):
url = 'http://pm25.in' + city_pingyin
url_text = requests.get(url).text
soup = BeautifulSoup(url_text, 'html.parser')
div_list = soup.find_all("div", {'class': 'span1'}) # 当前城市所有的污染物的值 8
city_aqi = []

for i in range(8):
div_content = div_list[i]
caption = div_content.find('div', {'class': 'caption'}).text.strip() # 标题
value = div_content.find('div', {'class': 'value'}).text.strip() # value
value = float(value)
city_aqi.append((caption, value))
return city_aqi

def get_all_cities():
url = 'http://pm25.in/'
city_list = []
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')

city_div = soup.find_all('div', {'class': 'bottom'})[1] # 全部城市的div
city_link_list = city_div.find_all('a') # 所有的城市的a
for city_link in city_link_list:
city_name = city_link.text # 城市的名字
city_pingyin = city_link['href'] # 城市的拼音
city_list.append((city_name, city_pingyin))
print(city_name)
return city_list

然后对选定的污染物进行排序

1
result.sort(key = lambda k: k[1][pollutant_no][1])

爬虫爬取的数据变量通过render_template()传递给模板,渲染成用户看到的html网页。

1
return render_template('aqi.html', result = result, num = num)

result为爬虫数据,num为显示的城市数量
模板把result解析显示在table里。

数据抓取器

前端输入url和关键字,以post方式提交表单
flask app.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@app.route('/', methods = ['GET', 'POST'])
def hello_world():
result = []
keyword = ''
if request.method == 'POST':
url = request.form['url']
keyword = request.form['keyword']
result = crawler(url, keyword)
return render_template('index.html', result = result, keyword = keyword)
调用crawler函数爬到网页标题和链接,并返回。
def crawler(url, keyword):
data = requests.get(url).content
soup = BeautifulSoup(data, 'html.parser')
titles = soup.find_all('a')
info = []
for title in titles:
result = title.text.find(keyword)
if result != -1:
text = title.text
href = title['href']
info.append((text, href))
return info

通过render_template把变量传递给模板,模板被渲染为html呈现给用户。

项目地址

flask-aqi-crawler

坚持原创技术分享,您的支持将鼓励我继续创作!
0%