算是很基本的爬虫问题,基础没掌握好自己琢磨了大半天,主要的问题是,爬取的标签不对
网页的代码,
<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,。