版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2.6.1项目简介2.6.1项目简介2.6.1项目简介在中国天气网()中输入一个城市的名称,例如输入深圳,那么会转到地址/weather1d/101280601.shtml的网页显示深圳的天气预报,其中101280601是深圳的代码,每个城市或者地区都有一个代码。如图2-6-1、2-6-2所示。2.6.1项目简介Python爬虫程序设计KC26课件Python爬虫程序设计KC26课件2.6.2HTML代码分析2.6.2HTML代码分析2.6.2HTML代码分析用Chrome浏览器浏览网站,鼠标指向7天天气预报的今天位置,点击右键弹出菜单,选择“检查”就可以打开这个位置对应的HTML代码,如图2-6-3所示。2.6.2HTML代码分析选择<ulclass="tclearfix">元素,点击右键弹出菜单选择"EditasHTML",就可以进入编辑状态,复制整个HTML,结果如下:<ulclass="tclearfix"><liclass="on"><h1>5日(今天)</h1><bigclass="png40d01"></big><bigclass="png40n01"></big><ptitle="多云"class="wea">多云</p><pclass="tem"><span>32</span>/<i>28℃</i></p><pclass="win"><em><spantitle="无持续风向"class=""></span><spantitle="无持续风向"class=""></span></em>选择<ulclass="tclearfix">元素,点击<i>微风</i></p><divclass="slid"></div></li><li><h1>6日(明天)</h1><bigclass="png40d01"></big><bigclass="png40n01"></big><ptitle="多云"class="wea">多云</p><pclass="tem"><span>32</span>/<i>27℃</i></p><pclass="win"><em><spantitle="无持续风向"class=""></span><spantitle="无持续风向"class=""></span></em><i>微风</i></p><divclass="slid"></div></li><li><i>微风</i><h1>7日(后天)</h1><bigclass="png40d01"></big><bigclass="png40n01"></big><ptitle="多云"class="wea">多云</p><pclass="tem"><span>32</span>/<i>27℃</i></p><pclass="win"><em><spantitle="无持续风向"class=""></span><spantitle="无持续风向"class=""></span></em><i>微风</i></p><divclass="slid"></div></li><li><h1>8日(周四)</h1><bigclass="png40d01"></big><bigclass="png40n01"></big><ptitle="多云"class="wea">多云</p><pclass="tem"><span>32</span>/<i>27℃</i></p><pclass="win"><em><spantitle="无持续风向"class=""></span><spantitle="无持续风向"class=""></span></em><i>微风</i></p><divclass="slid"></div></li><li><h1>7日(后天)</h1><h1>9日(周五)</h1><bigclass="png40d01"></big><bigclass="png40n01"></big><ptitle="多云"class="wea">多云</p><pclass="tem"><span>33</span>/<i>27℃</i></p><pclass="win"><em><spantitle="无持续风向"class=""></span><spantitle="无持续风向"class=""></span></em><i>微风</i></p><divclass="slid"></div></li><li><h1>9日(周五)</h1><h1>10日(周六)</h1><bigclass="png40d01"></big><bigclass="png40n01"></big><ptitle="多云"class="wea">多云</p><pclass="tem"><span>33</span>/<i>27℃</i></p><pclass="win"><em><spantitle="无持续风向"class=""></span><spantitle="无持续风向"class=""></span></em><i>微风</i></p><divclass="slid"></div></li><li><h1>10日(周六)</h1><h1>11日(周日)</h1><bigclass="png40d01"></big><bigclass="png40n07"></big><ptitle="多云转小雨"class="wea">多云转小雨</p><pclass="tem"><span>33</span>/<i>26℃</i></p><pclass="win"><em><spantitle="无持续风向"class=""></span><spantitle="无持续风向"class=""></span></em><i>微风</i></p><divclass="slid"></div></li></ul><h1>11日(周日)</h1>2.6.3爬取天气预报数据2.6.3爬取天气预报数据2.6.3爬取天气预报数据通过分析HTML代码,我们可以编写爬取的程序爬取深圳7天的天气预报数据:
frombs4importBeautifulSoupfrombs4importUnicodeDammitimporturllib.request
url="/weather/101280601.shtml"try:headers={"User-Agent":"Mozilla/5.0(Windows;U;WindowsNT6.0x64;en-US;rv:1.9pre)Gecko/2008072421Minefield/3.0.2pre"}req=urllib.request.Request(url,headers=headers)data=urllib.request.urlopen(req)data=data.read()dammit=UnicodeDammit(data,["utf-8","gbk"])data=dammit.unicode_markupsoup=BeautifulSoup(data,"lxml")lis=soup.select("ul[class='tclearfix']li")forliinlis:try:date=li.select('h1')[0].textweather=li.select('p[class="wea"]')[0].texttemp=li.select('p[class="tem"]span')[0].text+"/"+li.select('p[class="tem"]i')[0].textprint(date,weather,temp)exceptExceptionaserr:print(err)exceptExceptionaserr:print(err)2.6.3爬取天气预报数据程序爬取结果:5日(今天)多云32/28℃6日(明天)多云32/27℃7日(后天)多云32/27℃8日(周四)多云32/27℃9日(周五)多云33/27℃10日(周六)多云33/27℃11日(周日)多云转小雨33/26℃由此可见爬取的数据与我们直接从网站看到的是一样的。
程序爬取结果:2.6.4爬取与存储天气预报数据2.6.4爬取与存储天气预报数据2.6.4爬取与存储天气预报数据我们可以获取北京、上海、广州、深圳等城市的代码,爬取这些城市的天气预报数据,并存储到sqllite数据库weathers.db中,存储的数据表weathers是:createtableweathers(wCityvarchar(16),wDatevarchar(16),wWeathervarchar(64),wTempvarchar(32),constraintpk_weatherprimarykey(wCity,wDate))"编写程序依次爬取各个城市的天气预报数据存储在数据库中,程序如下:2.6.4爬取与存储天气预报数据frombs4importBeautifulSoupfrombs4importUnicodeDammitimporturllib.requestimportsqlite3
classWeatherDB:defopenDB(self):self.con=sqlite3.connect("weathers.db")self.cursor=self.con.cursor()try:self.cursor.execute("createtableweathers(wCityvarchar(16),wDatevarchar(16),wWeathervarchar(64),wTempvarchar(32),constraintpk_weatherprimarykey(wCity,wDate))")except:self.cursor.execute("deletefromweathers")
defcloseDB(self):mit()self.con.close()frombs4importBeautifulSoupdefinsert(self,city,date,weather,temp):try:self.cursor.execute("insertintoweathers(wCity,wDate,wWeather,wTemp)values(?,?,?,?)",(city,date,weather,temp))exceptExceptionaserr:print(err)
defshow(self):self.cursor.execute("select*fromweathers")rows=self.cursor.fetchall()print("%-16s%-16s%-32s%-16s"%("city","date","weather","temp"))forrowinrows:print("%-16s%-16s%-32s%-16s"%(row[0],row[1],row[2],row[3]))
classWeatherForecast:def__init__(self):self.headers={"User-Agent":"Mozilla/5.0(Windows;U;WindowsNT6.0x64;en-US;rv:1.9pre)Gecko/2008072421Minefield/3.0.2pre"}self.cityCode={"北京":"101010100","上海":"101020100","广州":"101280101","深圳":"101280601"}definsert(self,city,date,weatdefforecastCity(self,city):ifcitynotinself.cityCode.keys():print(city+"codecannotbefound")return
url="/weather/"+self.cityCode[city]+".shtml"try:req=urllib.request.Request(url,headers=self.headers)data=urllib.request.urlopen(req)data=data.read()dammit=UnicodeDammit(data,["utf-8","gbk"])data=dammit.unicode_markupsoup=BeautifulSoup(data,"lxml")lis=soup.select("ul[class='tclearfix']li")defforecastCity(self,city):forliinlis:try:date=li.select('h1')[0].textweather=li.select('p[class="wea"]')[0].texttemp=li.select('p[class="tem"]span')[0].text+"/"+li.select('p[class="tem"]i')[0].textprint(city,date,weather,temp)self.db.insert(city,date,weather,temp)exceptExceptionaserr:print(err)exceptExceptionaserr:print(err)forliinlis:defprocess(self,cities):self.db=WeatherDB()self.db.openDB()
forcityincities:self.forecastCity(city)
#self.db.show()self.db.closeDB()
ws=WeatherForecast()cess(["北京","上海","广州","深圳"])print("completed")defprocess(self,cities):北京7日(今天)晴间多云,北部山区有阵雨或雷阵雨转晴转多云31℃/17℃北京8日(明天)多云转晴,北部地区有分散阵雨或雷阵雨转晴34℃/20℃北京9日(后天)晴转多云36℃/22℃北京10日(周六)阴转阵雨30℃/19℃北京11日(周日)阵雨27℃/18℃北京12日(周一)阴转晴28℃/20℃北京13日(周二)晴32℃/21℃上海7日(今天)多云30/21℃上海8日(明天)多云转阴32/23℃上海9日(后天)阵雨32/24℃上海10日(周六)中雨27/22℃上海11日(周日)小雨转多云29/22℃上海12日(周一)多云30/22℃上海13日(周二)多云转阴30/21℃广州7日(今天)多云35/27℃广州8日(明天)多云35/28℃广州9日(后天)多云35/28℃广州10日(周六)多云35/28℃广州11日(周日)多云35/28℃广州12日(周一)雷阵雨35/27℃广州13日(周二)雷阵雨转大雨33/24℃深圳7日(今天)阵雨转多云34/28℃深圳8日(明天)晴34/28℃深圳9日(后天)晴34/28℃深圳10日(周六)晴转阵雨34/28℃深圳11日(周日)阵雨33/27℃深圳12日(周一)阵雨32/27℃深圳13日(周二)阵雨转中雨32/25℃北京7日(今天)晴间多云,北部山区有阵雨或雷阵雨转晴转多2.6.1项目简介2.6.1项目简介2.6.1项目简介在中国天气网()中输入一个城市的名称,例如输入深圳,那么会转到地址/weather1d/101280601.shtml的网页显示深圳的天气预报,其中101280601是深圳的代码,每个城市或者地区都有一个代码。如图2-6-1、2-6-2所示。2.6.1项目简介Python爬虫程序设计KC26课件Python爬虫程序设计KC26课件2.6.2HTML代码分析2.6.2HTML代码分析2.6.2HTML代码分析用Chrome浏览器浏览网站,鼠标指向7天天气预报的今天位置,点击右键弹出菜单,选择“检查”就可以打开这个位置对应的HTML代码,如图2-6-3所示。2.6.2HTML代码分析选择<ulclass="tclearfix">元素,点击右键弹出菜单选择"EditasHTML",就可以进入编辑状态,复制整个HTML,结果如下:<ulclass="tclearfix"><liclass="on"><h1>5日(今天)</h1><bigclass="png40d01"></big><bigclass="png40n01"></big><ptitle="多云"class="wea">多云</p><pclass="tem"><span>32</span>/<i>28℃</i></p><pclass="win"><em><spantitle="无持续风向"class=""></span><spantitle="无持续风向"class=""></span></em>选择<ulclass="tclearfix">元素,点击<i>微风</i></p><divclass="slid"></div></li><li><h1>6日(明天)</h1><bigclass="png40d01"></big><bigclass="png40n01"></big><ptitle="多云"class="wea">多云</p><pclass="tem"><span>32</span>/<i>27℃</i></p><pclass="win"><em><spantitle="无持续风向"class=""></span><spantitle="无持续风向"class=""></span></em><i>微风</i></p><divclass="slid"></div></li><li><i>微风</i><h1>7日(后天)</h1><bigclass="png40d01"></big><bigclass="png40n01"></big><ptitle="多云"class="wea">多云</p><pclass="tem"><span>32</span>/<i>27℃</i></p><pclass="win"><em><spantitle="无持续风向"class=""></span><spantitle="无持续风向"class=""></span></em><i>微风</i></p><divclass="slid"></div></li><li><h1>8日(周四)</h1><bigclass="png40d01"></big><bigclass="png40n01"></big><ptitle="多云"class="wea">多云</p><pclass="tem"><span>32</span>/<i>27℃</i></p><pclass="win"><em><spantitle="无持续风向"class=""></span><spantitle="无持续风向"class=""></span></em><i>微风</i></p><divclass="slid"></div></li><li><h1>7日(后天)</h1><h1>9日(周五)</h1><bigclass="png40d01"></big><bigclass="png40n01"></big><ptitle="多云"class="wea">多云</p><pclass="tem"><span>33</span>/<i>27℃</i></p><pclass="win"><em><spantitle="无持续风向"class=""></span><spantitle="无持续风向"class=""></span></em><i>微风</i></p><divclass="slid"></div></li><li><h1>9日(周五)</h1><h1>10日(周六)</h1><bigclass="png40d01"></big><bigclass="png40n01"></big><ptitle="多云"class="wea">多云</p><pclass="tem"><span>33</span>/<i>27℃</i></p><pclass="win"><em><spantitle="无持续风向"class=""></span><spantitle="无持续风向"class=""></span></em><i>微风</i></p><divclass="slid"></div></li><li><h1>10日(周六)</h1><h1>11日(周日)</h1><bigclass="png40d01"></big><bigclass="png40n07"></big><ptitle="多云转小雨"class="wea">多云转小雨</p><pclass="tem"><span>33</span>/<i>26℃</i></p><pclass="win"><em><spantitle="无持续风向"class=""></span><spantitle="无持续风向"class=""></span></em><i>微风</i></p><divclass="slid"></div></li></ul><h1>11日(周日)</h1>2.6.3爬取天气预报数据2.6.3爬取天气预报数据2.6.3爬取天气预报数据通过分析HTML代码,我们可以编写爬取的程序爬取深圳7天的天气预报数据:
frombs4importBeautifulSoupfrombs4importUnicodeDammitimporturllib.request
url="/weather/101280601.shtml"try:headers={"User-Agent":"Mozilla/5.0(Windows;U;WindowsNT6.0x64;en-US;rv:1.9pre)Gecko/2008072421Minefield/3.0.2pre"}req=urllib.request.Request(url,headers=headers)data=urllib.request.urlopen(req)data=data.read()dammit=UnicodeDammit(data,["utf-8","gbk"])data=dammit.unicode_markupsoup=BeautifulSoup(data,"lxml")lis=soup.select("ul[class='tclearfix']li")forliinlis:try:date=li.select('h1')[0].textweather=li.select('p[class="wea"]')[0].texttemp=li.select('p[class="tem"]span')[0].text+"/"+li.select('p[class="tem"]i')[0].textprint(date,weather,temp)exceptExceptionaserr:print(err)exceptExceptionaserr:print(err)2.6.3爬取天气预报数据程序爬取结果:5日(今天)多云32/28℃6日(明天)多云32/27℃7日(后天)多云32/27℃8日(周四)多云32/27℃9日(周五)多云33/27℃10日(周六)多云33/27℃11日(周日)多云转小雨33/26℃由此可见爬取的数据与我们直接从网站看到的是一样的。
程序爬取结果:2.6.4爬取与存储天气预报数据2.6.4爬取与存储天气预报数据2.6.4爬取与存储天气预报数据我们可以获取北京、上海、广州、深圳等城市的代码,爬取这些城市的天气预报数据,并存储到sqllite数据库weathers.db中,存储的数据表weathers是:createtableweathers(wCityvarchar(16),wDatevarchar(16),wWeathervarchar(64),wTempvarchar(32),constraintpk_weatherprimarykey(wCity,wDate))"编写程序依次爬取各个城市的天气预报数据存储在数据库中,程序如下:2.6.4爬取与存储天气预报数据frombs4importBeautifulSoupfrombs4importUnicodeDammitimporturllib.requestimportsqlite3
classWeatherDB:defopenDB(self):self.con=sqlite3.connect("weathers.db")self.cursor=self.con.cursor()try:self.cursor.execute("createtableweathers(wCityvarchar(16),wDatevarchar(16),wWeathervarchar(64),wTempvarchar(32),constraintpk_weatherprimarykey(wCity,wDate))")except:self.cursor.execute("deletefromweathers")
defcloseDB(self):mit()self.con.close()frombs4importBeautifulSoupdefinsert(self,city,date,weather,temp):try:self.cursor.execute("insertintoweathers(wCity,wDate,wWeather,wTemp)values(?,?,?,?)",(city,date,weather,temp))exceptExceptionaserr:print(err)
defshow(self):self.cursor.execute("select*fromweathers")rows=self.cursor.fetchall()print("%-16s%-16s%-32s%-16s"%("city","date","weather","temp"))forrowinrows:print("%-16s%-16s%-32s%-16s"%(row[0],row[1],row[2],row[3]))
classWeatherForecast:def__init__(self):self.headers={"User-Agent":"Mozilla/5.0(Windows;U;WindowsNT6.0x64;en-US;rv:1.9pre)Gecko/2008072421Minefield/3.0.2pre"}self.cityCode={"北京":"101010100","上海":"101020100","广州":"101280101","深圳":"101280601"}definsert(self,city,date,weatdefforecastCity(self,city):ifcitynotinself.cityCode.keys():print(city+"codecannotbefound")return
url="/weather/"+self.cityCode[city]+".shtml"try:req=urllib.request.Request(url,headers=self.headers)data=urllib.request.urlopen(req)data=data.read()dammit=UnicodeDammit(data,["utf-8","gbk"])data=dammit.unicode_markupsoup=BeautifulSoup(data,"lxml")lis=soup.select("ul[class='tclearfix']li")defforecastCity(self,city):forliin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广东惠州惠城区横沥镇大岚卫生院招聘村卫生站工作人员1人备考题库附答案详解(培优b卷)
- 2026四川宜宾市消防救援局第一次招聘政府专职消防员147人备考题库含答案详解
- 2026安徽蚌埠市固镇县仲兴镇和任桥镇选聘村级后备干部22人备考题库及一套完整答案详解
- 平安银行实习生招聘2027届毕业生备考题库及参考答案详解
- 2026安徽蚌埠市城市投资控股集团有限公司所属公司校园招聘4人备考题库及答案详解1套
- 2026北京大学光华管理学院招聘劳动合同制人员1人备考题库含答案详解(b卷)
- 2026大连银行股份有限公司北京分行党委书记、行长招聘1人备考题库带答案详解
- 2026浙江温州市瓯海区交通运输局招聘2人备考题库附答案详解(典型题)
- 2026广东广州白云区招聘内勤文职1名备考题库及一套完整答案详解
- 2026山东日照市消防救援支队政府专职消防队员招收备考题库附答案详解(综合卷)
- GB/T 46692.1-2025工作场所环境用气体探测器第1部分:有毒气体探测器性能要求
- 工装拆除建筑施工技术交底
- ECMO辅助下心脏移植患者围术期管理方案
- 妇产科年度科室工作汇报
- 2025年度大学生青海西部计划志愿者招募笔试试题库及答案
- DB15∕T 2763-2022 一般工业固体废物用于矿山采坑回填和生态恢复技术规范
- DB3301∕T 0190-2024 城镇生活垃圾分类管理规范
- 宣传儿科科室简介
- 足球绕杆射门课件
- 民间借贷纠纷讲座课件
- 质检科安全培训课件
评论
0/150
提交评论