鱼C论坛

 找回密码
 立即注册
查看: 3798|回复: 7

[已解决]请问一下出现这个AttributeError错误的原因是什么啊?

[复制链接]
发表于 2017-4-26 15:06:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
搞不明白为什么会报错 本来没有报错的   好像我修改了headers里的内容后   就开始报错   然而我看不出来哪里错了
AttributeError: 'NoneType' object has no attribute 'find_all'

全部的代码如下:

import requests
from bs4 import BeautifulSoup
import os

headers = {     
'Accept':'image/webp,image/*,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate, sdch',
'Accept-Language':'zh-CN,zh;q=0.8',
'Cache-Control':'max-age=0',
'Connection':'keep-alive',
'Cookie':'doctaobaocookie=1; BDTUJIAID=9ee8f54aeff07ddda45cb8fe54da96ff; Hm_lvt_d86954201130d615136257dde062a503=1492607061; Hm_lpvt_d86954201130d615136257dde062a503=1492607073',
'Host':'image68.360doc.com',
'Referer':'http://www.360doc.com/content/14/0221/14/13773668_354483683.shtml',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'
}

all_url = 'http://www.360doc.com/content/14/0221/14/13773668_354483683.shtml'  
start_html = requests.get(all_url,headers=headers)  

Soup = BeautifulSoup(start_html.text, 'lxml')
all_a = Soup.find('ul', class_='tklist').find_all('a')
all_img = Soup.find('ul', class_='tklist').find_all('img')
for a in all_a:
    title = a.get_text()
    href = a['href']

for img in all_img:
    img_alt = img['alt']
    img_url = img['src']
    print(img_alt,img_url)
   
    path = str(img_alt).strip()
    os.makedirs(os.path.join("D:\plants", path))
    os.chdir("D:\plants\\"+path)
   
    name = img_url[-9:-4]
    imgs = requests.get(img_url, headers=headers)
    f = open(name+'.jpg', 'ab')
    f.write(imgs.content)
    f.close()
最佳答案
2017-4-26 17:49:02
麦克雷 发表于 2017-4-26 17:38
确实打印出  None  呢。。。。可是抓取的方法应该没有错吧??请问 为什么抓不到呢?

至于为什么没有抓取到这个标签,具体我不知道,毕竟我也没试过,不知道你的请求是否有错
但我建议你打印一下你请求的网页源代码,看看是不是跟你在网页上见到的一样,如果不一样,那又2个可能:
1,请求的headers是有要求的,需要附带一些值,虽然你加了值,但是可能你加的根本不可用(比如cookie,这种值很可能是变动的,你直接复制一个可能不能用)
2,数据是JS加载的,你请求不到
打印一下原码就知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-26 16:14:21 | 显示全部楼层
all_a = Soup.find('ul', class_='tklist').find_all('a')

find以后是没有办法find_all的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-26 16:59:57 | 显示全部楼层
这说明你Soup.find('ul', class_='tklist')和Soup.find('ul', class_='tklist')中有的是空值,空值是没有find_all属性的,所以你要检查这个地方找到的是不是空值
建议使用try..语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-26 17:15:17 | 显示全部楼层
gopythoner 发表于 2017-4-26 16:59
这说明你Soup.find('ul', class_='tklist')和Soup.find('ul', class_='tklist')中有的是空值,空值是没有fi ...

请问一下   有空值是什么意思啊??意思是说在那个网站找不到    类名为tklist 的 ul   吗??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-26 17:17:45 | 显示全部楼层
麦克雷 发表于 2017-4-26 17:15
请问一下   有空值是什么意思啊??意思是说在那个网站找不到    类名为tklist 的 ul   吗??

是的,你可以打印一下,就知道是不是这样了
比如这句all_a = Soup.find('ul', class_='tklist').find_all('a')
你先这样test = Soup.find('ul', class_='tklist')
然后print(test)看看是不是有空值,肯定是有的是空值,所以无法使用find_all
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-26 17:38:06 | 显示全部楼层
gopythoner 发表于 2017-4-26 17:17
是的,你可以打印一下,就知道是不是这样了
比如这句all_a = Soup.find('ul', class_='tklist').find_al ...

确实打印出  None  呢。。。。可是抓取的方法应该没有错吧??请问 为什么抓不到呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-26 17:49:02 | 显示全部楼层    本楼为最佳答案   
麦克雷 发表于 2017-4-26 17:38
确实打印出  None  呢。。。。可是抓取的方法应该没有错吧??请问 为什么抓不到呢?

至于为什么没有抓取到这个标签,具体我不知道,毕竟我也没试过,不知道你的请求是否有错
但我建议你打印一下你请求的网页源代码,看看是不是跟你在网页上见到的一样,如果不一样,那又2个可能:
1,请求的headers是有要求的,需要附带一些值,虽然你加了值,但是可能你加的根本不可用(比如cookie,这种值很可能是变动的,你直接复制一个可能不能用)
2,数据是JS加载的,你请求不到
打印一下原码就知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-4-26 17:53:37 | 显示全部楼层
gopythoner 发表于 2017-4-26 17:49
至于为什么没有抓取到这个标签,具体我不知道,毕竟我也没试过,不知道你的请求是否有错
但我建议你打印 ...

好的  非常感谢  我估计是你说的第一种情况  我去调试一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-18 05:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表