马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
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=[content.text.strip() for content in cols]
#append往列表中加入新的元素,attrs['class'][0]获取的是class属性的
tbody_id.append(tr.attrs['class'][0])
e.append(col)
data=pd.DataFrame(e,columns=[content.text.strip() for content in txt.find_all('th')],index=tbody_id)
data.to_excel('C:/Users/Administrator/Desktop/data.excel')
请问我这段代码为什么一直报错
AttributeError: 'NoneType' object has no attribute 'find_all'
是因为response有长度限制,没有爬完全部代码吗?
tbody 这个标签是浏览器自动加上的,你右击网页源代码会发现没有 tbody 标签
所以爬虫这里代码不需要在 tbody 下查找 tr ,直接查找 tr 标签即可,否则就会因为查找不到 tbody 标签而返回 None
解决方法,将代码中的:tbody_val = txt.tbody.find_all('tr') 改为 tbody_val = txt.find_all('tr') 即可
|