如何阅读网站内容?
How to read the content of an website?
我是使用 python 2.7 的网络爬虫新手。
1。背景
现在,我想从 AQICN.org 收集有用的数据,这是一个提供全球空气质量数据的好网站。
我想使用python每小时获取所有中国网站的数据。但我现在被困住了。
2。我的烦恼
以本网站(http://aqicn.org/city/shenyang/usconsulate/)为例。
此页面提供U.S驻中国领事馆的空气污染和气象参数。使用这样的代码,我无法获得有用的信息。
import urllib
from bs4 import BeautifulSoup
import re
import json
html_aqi =
urllib.urlopen("http://aqicn.org/city/shenyang/usconsulate/json").read().decode('utf-8')
soup= BeautifulSoup(html_aqi)
l = soup.p.get_text()
aqi= json.loads(l)
结果是这样的:
> ValueError: No JSON object could be decoded
所以,我将 html_aqi 更改为这种格式(参考某人的作品):
http://aqicn.org/aqicn/json/android/shenyang/usconsulate/json
代码运行良好。
3。我的目标。
格式 1: (http://aqicn.org/city/shenyang/usconsulate/json)
格式 2: (http://aqicn.org/aqicn/json/android/shenyang/usconsulate/json)
一般情况下,我可以处理格式 2 。但是,我收集了中国所有站点的网站,格式为 1。
那么,任何人都可以为我提供一些帮助来应对格式 1 吗?非常感谢。
更新
格式一很难转化为格式二(需要考虑很多条件。)
使用这样的代码无法轻松完成:
city_name = url_format1.split("/")[5]
site_name = url_format1.split("/")[6]
url_format2 = "http://aqicn.org/aqicn/json/android/"+ city_name + "/"+ site_name
### --- Reason Why it's hard in practice
1559 sites need to be care with, and these sites differ by their location.
Some are in city, some are in county. Their url are not the same pattern.
for example:
Type1 --> http://aqicn.org/city/hebi/json
Type2 --> http://aqicn.org/city/jiangsu/huaian/json
Type3 --> http://aqicn.org/city/china/xinzhou/jiyin/json
如果您对空气质量指数感兴趣,请查找 div
和 aqivalue
class:
>>> import urllib
>>> from bs4 import BeautifulSoup
>>>
>>> url = "http://aqicn.org/city/shenyang/usconsulate/json"
>>> soup = BeautifulSoup(urllib.urlopen(url), "html.parser")
>>> soup.find("div", class_="aqivalue").get_text()
u'171'
第一个urlhttp://aqicn.org/city/shenyang/usconsulate/json居然没有回馈JSON数据。它返回 HTML 数据。如果你真的对这个内容感兴趣,你必须解析HTML数据。
您可以使用 Beautifulsoup's HTML parser, though the lxml.html 包来执行此操作更简单。
我是使用 python 2.7 的网络爬虫新手。
1。背景
现在,我想从 AQICN.org 收集有用的数据,这是一个提供全球空气质量数据的好网站。
我想使用python每小时获取所有中国网站的数据。但我现在被困住了。
2。我的烦恼
以本网站(http://aqicn.org/city/shenyang/usconsulate/)为例。
此页面提供U.S驻中国领事馆的空气污染和气象参数。使用这样的代码,我无法获得有用的信息。
import urllib
from bs4 import BeautifulSoup
import re
import json
html_aqi =
urllib.urlopen("http://aqicn.org/city/shenyang/usconsulate/json").read().decode('utf-8')
soup= BeautifulSoup(html_aqi)
l = soup.p.get_text()
aqi= json.loads(l)
结果是这样的:
> ValueError: No JSON object could be decoded
所以,我将 html_aqi 更改为这种格式(参考某人的作品):
http://aqicn.org/aqicn/json/android/shenyang/usconsulate/json
代码运行良好。
3。我的目标。
格式 1: (http://aqicn.org/city/shenyang/usconsulate/json)
格式 2: (http://aqicn.org/aqicn/json/android/shenyang/usconsulate/json)
一般情况下,我可以处理格式 2 。但是,我收集了中国所有站点的网站,格式为 1。 那么,任何人都可以为我提供一些帮助来应对格式 1 吗?非常感谢。
更新
格式一很难转化为格式二(需要考虑很多条件。)
使用这样的代码无法轻松完成:
city_name = url_format1.split("/")[5]
site_name = url_format1.split("/")[6]
url_format2 = "http://aqicn.org/aqicn/json/android/"+ city_name + "/"+ site_name
### --- Reason Why it's hard in practice
1559 sites need to be care with, and these sites differ by their location.
Some are in city, some are in county. Their url are not the same pattern.
for example:
Type1 --> http://aqicn.org/city/hebi/json
Type2 --> http://aqicn.org/city/jiangsu/huaian/json
Type3 --> http://aqicn.org/city/china/xinzhou/jiyin/json
如果您对空气质量指数感兴趣,请查找 div
和 aqivalue
class:
>>> import urllib
>>> from bs4 import BeautifulSoup
>>>
>>> url = "http://aqicn.org/city/shenyang/usconsulate/json"
>>> soup = BeautifulSoup(urllib.urlopen(url), "html.parser")
>>> soup.find("div", class_="aqivalue").get_text()
u'171'
第一个urlhttp://aqicn.org/city/shenyang/usconsulate/json居然没有回馈JSON数据。它返回 HTML 数据。如果你真的对这个内容感兴趣,你必须解析HTML数据。
您可以使用 Beautifulsoup's HTML parser, though the lxml.html 包来执行此操作更简单。