爬虫小问题,.find_all的最小父级

算是很基本的爬虫问题,基础没掌握好自己琢磨了大半天,主要的问题是,爬取的标签不对

爬天气信息

网页的代码,
<div id="7d" class="c7d">
	<input type="hidden" id="hidden_title" value="02月26日20时 周三  多云  18/25°C" />
	<input type="hidden" id="fc_24h_internal_update_time" value="2020022620"/>
	<input type="hidden" id="update_time" value="18:00"/>
	<ul class="t clearfix">
		<li class="sky skyid lv2 on">
			<h1>26日(今天)</h1>
			<big class="png40"></big>
			<big class="png40 n01"></big>
			<p title="多云" class="wea">多云</p>
			<p class="tem">
				<i>18℃</i>
			</p>
		<p class="win">
			<em>
				<span title="东风" class="E"></span>
			</em>
			<i>3-4级</i>
		</p>
	<div class="slid"></div>
</li>
<li class="sky skyid lv3">
...

爬虫的时候记得笔记,抓取最小父级后for循环提取数值,开始就以下代码进行爬虫,结果发现除了需要的资料还包括了需要不必要的数据,这里不提供的,显然这段代码显然不正确,可以判断爬取区间错误,但是这点我没意识到。

sky = bs.find(id='7d')
print(sky)

接着尝试往下抓取一层,就是上面代码的第六行,

sky = bs.find('ul',class_='t clearfix')
for i in sky:
    day = i.find('h1')
    print(day)

结果是

-1
<h1>26日(今天)</h1>
-1
<h1>27日(明天)</h1>
-1
<h1>28日(后天)</h1>
-1
<h1>29日(周六)</h1>
-1
<h1>1日(周日)</h1>
-1
<h1>2日(周一)</h1>
-1
<h1>3日(周二)</h1>
-1

不是我所需要的,而且还有莫名奇妙多了一个int -1出来,
打算去掉< h1>,在结尾 print(day)的基础上变成 print(day.text),结果报错:AttributeError: ‘int’ object has no attribute ‘text’。这应该就是提取出-1的而产生问题。

后面发现,是我的最小父级抓取错误,应该抓取

sky = bs.find_all('li',class_='sky')  #抓取这个区域
for i in sky:
    day = i.find('h1').text
    wea = i.find(class_='wea').text
    tem = i.find('i').text
    print(day +'\n' + '天气' + wea + '\n'+ '温度' +tem)
    print('')

-------------------------华丽的风格线---------------------------------
现在就总结下经验:
BS_all的最小父级应该选取重复的定义块区域(就是 for i in XX中的 i那种,
如果只是单个数据就无需_all,。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值