参考一个前辈的代码,修改了一个案例开始学习beautifulsoup做爬虫获取天气信息,前辈获取的是7日内天气,

我看旁边还有8-15日就模仿修改了下。其实其他都没有变化,只变换了获取标签的部分。但是我碰到

一个span获取的问题,如我的案例中每日的源代码是这样的。

<li class="t">
<span class="time">周五(19日)</span>
<big class="png30 d301"></big>
<big class="png30 n301"></big>
<span class="wea">雨</span>
<span class="tem"><em>℃</em>/℃</span>
<span class="wind">东南风</span>
<span class="wind1">微风</span>
</li>

上门的所有span标签中,日期,天气,风向都可以通过beautifulsoup进行标签匹配获取。唯独温度获取不到,

获取到的值为none,我奇怪了好酒,用span.em能获取到36°,获取不完全,不符合我的要求。最后没办法。

我只能通过获取到这个span这一回内容

<span class="tem"><em>℃</em>/℃</span>

然后通过字符串替换替换掉多余的字符。剩余36℃/22℃

得到这个结果。存入变量并写入csv文件。

以下为全部代码,如有不对的地方欢迎指教。

'''
Created on 2017年5月10日 @author: bekey qq:402151718
''' #conding:UTF-8 import requests
import csv
import random
import time
import socket
import http.client
#import urllib.request
from bs4 import BeautifulSoup def get_content(url , data = None):
header={
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, sdch',
'Accept-Language': 'zh-CN,zh;q=0.8',
'Connection': 'keep-alive',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'
}
timeout = random.choice(range(80, 180))
while True:
try:
rep = requests.get(url,headers = header,timeout = timeout)
rep.encoding = 'utf-8'
# req = urllib.request.Request(url, data, header)
# response = urllib.request.urlopen(req, timeout=timeout)
# html1 = response.read().decode('UTF-8', errors='ignore')
# response.close()
break
# except urllib.request.HTTPError as e:
# print( '1:', e)
# time.sleep(random.choice(range(5, 10)))
#
# except urllib.request.URLError as e:
# print( '2:', e)
# time.sleep(random.choice(range(5, 10)))
except socket.timeout as e:
print( '3:', e)
time.sleep(random.choice(range(8,15))) except socket.error as e:
print( '4:', e)
time.sleep(random.choice(range(20, 60))) except http.client.BadStatusLine as e:
print( '5:', e)
time.sleep(random.choice(range(30, 80))) except http.client.IncompleteRead as e:
print( '6:', e)
time.sleep(random.choice(range(5, 15))) return rep.text
# return html_text def get_data(html_text):
final = []
bs = BeautifulSoup(html_text, "html.parser") # 创建BeautifulSoup对象
body = bs.body # 获取body部分
data = body.find('div', {'id': '15d'}) # 找到id为7d的div
ul = data.find('ul') # 获取ul部分
li = ul.find_all('li') # 获取所有的li for day in li: # 对每个li标签中的内容进行遍历
temp = []
#print(day)
span = day.find_all('span') #找到所有的span标签
#print(span)
date = span[0].string # 找到日期
temp.append(date) # 添加到temp中
wea1 = span[1].string#获取天气情况
temp.append(wea1) #加入到list
tem =str(span[2])
tem = tem.replace('<span class="tem"><em>', '')
tem = tem.replace('</span>','')
tem = tem.replace('</em>','')
#tem = tem.find('span').string #获取温度
temp.append(tem) #温度加入list windy = span[3].string
temp.append(windy)#加入到list
windy1 = span[4].string
temp.append(windy1)#加入到list
final.append(temp) return final def write_data(data, name):
file_name = name
with open(file_name, 'a', errors='ignore', newline='') as f:
f_csv = csv.writer(f)
f_csv.writerows(data) if __name__ == '__main__':
url ='http://www.weather.com.cn/weather15d/101180101.shtml'
html = get_content(url)
#print(html)
result = get_data(html)
#print(result)
write_data(result, 'weather7.csv')

效果如图:

项目地址:git@github.com:zhangbei59/weather_get.git

python获取网站http://www.weather.com.cn 城市 8-15天天气的更多相关文章

  1. [Python爬虫] 之一 : Selenium+Phantomjs动态获取网站数据信息

    本人刚才开始学习爬虫,从网上查询资料,写了一个利用Selenium+Phantomjs动态获取网站数据信息的例子,当然首先要安装Selenium+Phantomjs,具体的看 http://www.c ...

  2. ios项目开发(天气预报项目):使用正则获取 weather.com.cn站点信息

    NSString *pattern = @"(?<=<td class=\"bigblod\">).*?(?=</td>)"; 2 ...

  3. Python 获取车票信息

    提示:该代码仅供学习使用,切勿滥用!!! 先来一个git地址:https://gitee.com/wang_li/li_wang 效果图: 逻辑: 1.获取Json文件的内容 2.根据信息生成URL ...

  4. 【原创分享】python获取乌云最新提交的漏洞,邮件发送

    #!/usr/bin/env python # coding:utf-8 # @Date : 2016年4月21日 15:08:44 # @Author : sevck (sevck@jdsec.co ...

  5. php 抓取天气情况 www.weather.com.cn

    <?php print_r(getweather(101120501)); /** * Server 天气情况获取函数 * @param unknown $city */ function ge ...

  6. Python识别网站验证码

    http://drops.wooyun.org/tips/6313 Python识别网站验证码 Manning · 2015/05/28 10:57 0x00 识别涉及技术 验证码识别涉及很多方面的内 ...

  7. 再谈获取网站图标Icon

    上一篇文章讨论了一下获取网站图标方法,是通过从根目录直接获取和html解析结合的方式来获取的,并给出了相应的代码示例.这一篇来讨论一个更现成的方法,这个方法是从360导航的页面发现的,在导航页面中点击 ...

  8. 获取网站图标Icon

    通常情况下,做网站的都会给自己的网站添加一个Icon,浏览器上一长排的标签页,用Icon来区分就显得更加醒目.现在想找一个没有Icon的网站并不好找,可见没有Icon的网站是多么的业余啊." ...

  9. Python获取服务器的厂商和型号信息-乾颐堂

    Python获取服务器的厂商和型号信息,在RHEHL6下,需要系统预装python-dmidecode这个包(貌似默认就已经装过了) 脚本内容如下 [root@linuxidc tmp]# cat t ...

随机推荐

  1. java设计模式-----10、享元模式

    Flyweight模式也叫享元模式,是构造型模式之一,它通过与其他类似对象共享数据来减小内存占用.它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件:它适合用于只是因重复而导致使 ...

  2. WPF流程图制作系列相关基础二

       我们现在知道 thumb ,可以让用户自行拖动其在 canvas上移动,在这个而基础上 我们可以试着往流程图方向靠近一下. 我们知道,流程图,都是一个一个的流程块,然后用线连起来的,这一个一个的 ...

  3. Spring boot 入门四:spring boot 整合mybatis 实现CRUD操作

    开发环境延续上一节的开发环境这里不再做介绍 添加mybatis依赖 <dependency> <groupId>org.mybatis.spring.boot</grou ...

  4. Git——克隆部分文件

    在进行项目开发的时候,有时候会有这样的需求那就是:我们只希望从Git仓库里取指定的文件或者文件夹出来.在SVN里面,这非常容易实现,因为SVN基于文件方式存储,而Git却是基于元数据方式分布式存储文件 ...

  5. 语义化的HTML及其目的

    一.什么是语义化的HTML? 语义化的HTML就是写出的HTML代码,符合内容的结构化(内容语义化),选择合适的标签(代码语义化),能够便于开发者阅读和写出更优雅的代码的同时让浏览器的爬虫和机器很好地 ...

  6. Metinfo 5.x 管理员密码重置漏洞

    前言 在先知看到了一篇分析该漏洞的文章,复现分析一下,漏洞还是比较有趣的. 正文 首先知道是 管理员密码重置时出现的问题,于是抓包,定位到相关的php文件. 首先包含了 ../include/comm ...

  7. 自己搭建云盘 – 简单的PHP网盘程序

    自己搭建云盘 – 简单的PHP网盘程序 Veno File Manager 2.6.3 汉化版 相信大家都比较熟悉或使用过 Owncloud 网盘程序,Owncloud 虽强大,不过太过于臃肿,而 V ...

  8. 配置hive使用mysql存储metadata metadatastore

        hive默认使用derby数据库保存元数据,derby数据库比较小众,并且一次只能打开一个会话,一般修改为mysql数据库. 1.修改conf/hive-site.xml配置项: <pr ...

  9. 精华阅读第 12 期 | 最新 App Store 审核指南与10大被拒理由?

    很多时候,我们对技术的追求是没有止境的,我们需要不断的学习,进步,再学习,再进步!本文系移动精英开发俱乐部的第12期文章推荐阅读整理,其中涉及到了 Android 数据库框架,架构设计中的循环引用,同 ...

  10. Grunt-学习。

    Grunt 依赖 Node.js 所以在安装之前确保你安装了 Node.js.然后开始安装 Grunt 实际上,安装的并不是 Grunt,而是 Grunt-cli,也就是命令行的 Grunt,这样你就 ...