|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
用python写了一个爬虫,爬取中国天气网上的天气信息,大家感兴趣的可以支持一下;
经验:中国天气网进行天气查询的时候,每个城市的url都是与一个城市代码相关,比如北京就是101010100,每个城市都有自己的一个代码。
这个城市及代码的对应在这里分享给大家;
想看代码的感谢大家回复支持一下(由于时间比较短,正则表达式比较暴力。)!
import re
import urllib.request
import urllib.parse
def getcitynumberlist():
file = open("f://citynumber.txt", "r");
listOfcity = dict({});
while True:
line = file.readline();
if line != '\n':
r_key = "([0-9]*?)=(.*?) ";
key = re.compile(r_key);
numberOfcity = re.findall(key, line);
if len(numberOfcity) != 0:
listOfcity[numberOfcity[0][1]] = numberOfcity[0][0];
if not line:
break;
return listOfcity;
def getHtml(url):
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134"};
Request = urllib.request.Request(url, headers = header);
response = urllib.request.urlopen(Request);
html = response.read().decode("utf-8");
return html;
def getweatherreport(citynumber):
url = "http://www.weather.com.cn/weather/" + citynumber + ".shtml";
html = getHtml(url);
r_key ='''<ul class=\"t clearfix\">
<li class=\".*?\">
<h1>(.*?)</h1>
<big class=\".*?\"></big>
<big class=\".*?\"></big>
<p title=\".*?\" class=\".*?\">(.*?)</p>
<p class=\".*?\">
<i>(.*?)</i>
</p>
<p class=\"win\">
<em>
<span title=\"(.*?)\" class=\".*?\"></span>
</em>
<i>(.*?)</i>
</p>
<div class=\".*?\"></div>
</li>
<li class=\".*?\">
<h1>(.*?)</h1>
<big class=\".*?\"></big>
<big class=\".*?\"></big>
<p title=\".*?\" class=\".*?\">(.*?)</p>
<p class=\".*?\">
<span>(.*?)</span>/<i>(.*?)</i>
</p>
<p class=\".*?\">
<em>
<span title=\"(.*?)\" class=\".*?\"></span>
<span title=\"(.*?)\" class=\".*?\"></span>
</em>
<i>(.*?)</i>
</p>
<div class=\".*?\"></div>
</li>
<li class=\".*?\">
<h1>(.*?)</h1>
<big class=\".*?\"></big>
<big class=\".*?\"></big>
<p title=\".*?\" class=\".*?\">(.*?)</p>
<p class=\".*?\">
<span>(.*?)</span>/<i>(.*?)</i>
</p>
<p class=\".*?\">
<em>
<span title=\"(.*?)\" class=\".*?\"></span>
<span title=\"(.*?)\" class=\".*?\"></span>
</em>
<i>(.*?)</i>
</p>
<div class=\".*?\"></div>
</li>
<li class=\".*?\">
<h1>(.*?)</h1>
<big class=\".*?\"></big>
<big class=\".*?\"></big>
<p title=\".*?\" class=\".*?\">(.*?)</p>
<p class=\".*?\">
<span>(.*?)</span>/<i>(.*?)</i>
</p>
<p class=\".*?\">
<em>
<span title=\"(.*?)\" class=\".*?\"></span>
<span title=\"(.*?)\" class=\".*?\"></span>
</em>
<i>(.*?)</i>
</p>
<div class=\".*?\"></div>
</li>
<li class=\".*?\">
<h1>(.*?)</h1>
<big class=\".*?\"></big>
<big class=\".*?\"></big>
<p title=\".*?\" class=\".*?\">(.*?)</p>
<p class=\".*?\">
<span>(.*?)</span>/<i>(.*?)</i>
</p>
<p class=\".*?\">
<em>
<span title=\"(.*?)\" class=\".*?\"></span>
<span title=\"(.*?)\" class=\".*?\"></span>
</em>
<i>(.*?)</i>
</p>
<div class=\".*?\"></div>
</li>
<li class=\".*?\">
<h1>(.*?)</h1>
<big class=\".*?\"></big>
<big class=\".*?\"></big>
<p title=\".*?\" class=\".*?\">(.*?)</p>
<p class=\".*?\">
<span>(.*?)</span>/<i>(.*?)</i>
</p>
<p class=\".*?\">
<em>
<span title=\"(.*?)\" class=\".*?\"></span>
<span title=\"(.*?)\" class=\".*?\"></span>
</em>
<i>(.*?)</i>
</p>
<div class=\".*?\"></div>
</li>
<li class=\".*?\">
<h1>(.*?)</h1>
<big class=\".*?\"></big>
<big class=\".*?\"></big>
<p title=\".*?\" class=\".*?\">(.*?)</p>
<p class=\".*?\">
<span>(.*?)</span>/<i>(.*?)</i>
</p>
<p class=\".*?\">
<em>
<span title=\"(.*?)\" class=\".*?\"></span>
<span title=\"(.*?)\" class=\".*?\"></span>
</em>
<i>(.*?)</i>
</p>
<div class=\".*?\"></div>
</li>
</ul>
'''
key = re.compile(r_key);
list = re.findall(key, html);
return list;
def chaxun():
listOfcity = getcitynumberlist();
city = str(input("please input a city:"));
if city in listOfcity:
weatherlist = getweatherreport(listOfcity[city]);
print("以下是您查询城市未来七天的天气预报:");
print("\n");
print("----------");
print("时间:" + weatherlist[0][0]);
print("天气:" + weatherlist[0][1]);
print("温度:" + weatherlist[0][2]);
print("风向:" + weatherlist[0][3] + weatherlist[0][4]);
for num in range(1, 7):
judge = (num - 1) * 7 + 5;
print("----------");
print("时间:" + weatherlist[0][judge]);
print("天气:" + weatherlist[0][judge + 1]);
print("温度:" + weatherlist[0][judge + 2] + "~" + weatherlist[0][judge + 3]);
print("风向:" + weatherlist[0][judge + 4] + "转" + weatherlist[0][judge + 5] + " " + "风力:" + weatherlist[0][judge + 6]);
else:
print("对不起,未找到你所输入的城市!");
if __name__ == "__main__":
chaxun();
在这里的第一个函数中是打开上面的城市代码文件,大家讲城市代码的txt文件保存下来后,然后open函数中的路径改为你电脑中的路径即可。
另外User Agent也按照自己的改一下就行了! |
|