使用 lxml 爬取四川省各城市天气预报
1.实验目的
(1)熟练安装Python扩展库lxml。
(2)熟悉HTML语法和常见标签的用法。
(3)理解网页源代码结构,能够根据实际情况对代码进行适当调整。
(4)理解xpath的工作原理。
2.实验内容
安装Python扩展库lxml,然后编写爬虫项目,从网站http:// www.weather.com.cn/sichuan/index.shtml
爬取四川各城市的天气预报数据,并把爬取到的天气数据写人本地文本文件四川天气.txt。
3.实验步骤
Python扩展库
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip install request lxml
分析城市预报列表
分析内容页面
4.实验结果
相关源码
from lxml import etree
import requests
import re
f = open("四川天气.txt", "w", encoding="utf8")
def getHTMLText(url):
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = 'utf-8'
return etree.HTML(r.text)
except:
return ""
def getcity():
s = getHTMLText("http://www.weather.com.cn/sichuan/index.shtml")
city_name = s.xpath('//*[@id="forecastID"]/dl/dt/a/text()')
city_url = s.xpath('//*[@id="forecastID"]/dl/dt/a/@href')
return city_name, city_url
def getinfo(url):
l = []
s = getHTMLText(url)
l.append(s.xpath('//*[@id="7d"]/ul/li/h1/text()'))
l.append([i for i in s.xpath('//ul[@class="t clearfix"]/li/p/text()')
if re.fullmatch(r'^[\u4e00-\u9fa5]{0,}$', i)])
l.append(s.xpath('//*[@id="7d"]/ul/li/p[2]/i/text()'))
l.append(s.xpath('//*[@id="7d"]/ul/li/p[3]//@title')[:7])
l.append(s.xpath('//*[@id="7d"]/ul/li/p[3]//i/text()'))
for j in range(len(l[0])):
for i in range(len(l)):
print("{0:>10}".format(l[i][j]), end="")
f.write(l[i][j])
# f.write("\t")
print()
f.write("\n")
name, urls = getcity()
for i in range(len(name)):
print(name[i])
f.write(name[i])
f.write("\n")
getinfo(urls[i])
print("\n\n")
f.write("\n\n")
f.close()