Dogelike 发表于 2022-6-29 17:10:09

懂爬虫的大佬进,问个问题

import requests
from bs4 import BeautifulSoup
import pandas as pd

response=requests.get('http://www.tianqihoubao.com/lishi/beijing/month/202005.html')
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0'}
response=requests.get('http://www.tianqihoubao.com/lishi/beijing/month/202005.html',headers=headers)

#print(response.encoding)
print(response)
soup=BeautifulSoup(response.text, features="lxml")
txt=soup.find('table', {'class':'b'})
tbody_val=txt.tbody.find_all('tr')
#空的列表用于加入新的数据
tbody_id=[]
e=[]
for tr in tbody_val:
   cols=tr.find_all('td')
   #迭代cols中的元素,使用strip()方法剥离出每个元素的text
   col=
   #append往列表中加入新的元素,attrs['class']获取的是class属性的
   tbody_id.append(tr.attrs['class'])
   e.append(col)
data=pd.DataFrame(e,columns=,index=tbody_id)
data.to_excel('C:/Users/Administrator/Desktop/data.excel')

请问我这段代码为什么一直报错
AttributeError: 'NoneType' object has no attribute 'find_all'
是因为response有长度限制,没有爬完全部代码吗?

xiebg 发表于 2022-6-30 19:51:31

可能是没有找到tbody,删了tbody试试,或者你打印下txt看里面也没有tbody

cflying 发表于 2022-6-30 20:13:52

txt.find_all('tr')

Twilight6 发表于 2022-7-1 08:54:30


tbody 这个标签是浏览器自动加上的,你右击网页源代码会发现没有 tbody 标签

所以爬虫这里代码不需要在 tbody 下查找 tr ,直接查找 tr 标签即可,否则就会因为查找不到 tbody 标签而返回 None

解决方法,将代码中的:tbody_val = txt.tbody.find_all('tr') 改为 tbody_val = txt.find_all('tr') 即可

Dogelike 发表于 2022-7-1 16:38:25

cflying 发表于 2022-6-30 20:13
txt.find_all('tr')

可是没用,照样报错

Dogelike 发表于 2022-7-1 16:44:53

Twilight6 发表于 2022-7-1 08:54
tbody 这个标签是浏览器自动加上的,你右击网页源代码会发现没有 tbody 标签

所以爬虫这里代码不需要 ...

没用哎照样报错,最佳还是草率了

Twilight6 发表于 2022-7-1 17:06:40



没有调试你整个代码,只看了你发的报错部分而已

后来的报错是原来的错误吗?如果不是那么原先的问题解决了也不算草率吧


cflying 发表于 2022-7-1 19:50:54

Dogelike 发表于 2022-7-1 16:38
可是没用,照样报错

你确定去了还是不行?我不信
错误发出来看看

随手试了哈,我是可以的哦
import requests
from bs4 import BeautifulSoup


response=requests.get('http://www.tianqihoubao.com/lishi/beijing/month/202005.html')
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0'}
response=requests.get('http://www.tianqihoubao.com/lishi/beijing/month/202005.html',headers=headers)

#print(response.encoding)
#print(response)
soup=BeautifulSoup(response.text, features="lxml")
txt=soup.find('table', {'class':'b'})
tbody_val=txt.find_all('tr')
print(tbody_val)
==================================
Python 3.9.5 (tags/v3.9.5:0a7dcbd, May3 2021, 17:27:52) on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>>
======================== RESTART: E:\Users\desktop\1.py ========================
[<tr>
<td>
<b>日期</b></td>
<td>
<b>天气状况</b></td>
<td>

cflying 发表于 2022-7-1 19:59:33

本帖最后由 cflying 于 2022-7-1 20:00 编辑

Dogelike 发表于 2022-7-1 16:44
没用哎照样报错,最佳还是草率了

报错内容发出来看看,我随手试了哈,去掉tbody后没问题呀
其他的没试,反正这个错误是没了
AttributeError: 'NoneType' object has no attribute 'find_all'

Dogelike 发表于 2022-7-10 14:05:48

cflying 发表于 2022-7-1 19:50
你确定去了还是不行?我不信
错误发出来看看



好吧解决了,阿里嘎多

Dogelike 发表于 2022-7-10 14:07:24

Twilight6 发表于 2022-7-1 17:06
没有调试你整个代码,只看了你发的报错部分而已

后来的报错是原来的错误吗?如果不是那么原先的问题 ...

好吧解决了,谢谢大佬
页: [1]
查看完整版本: 懂爬虫的大佬进,问个问题