python蜜汁报错,简直太奇怪了,大佬求救~

直接上图

图片说明

前249个没问题,循环来的为什么最后一个就有问题?
最后一步不肯走报错了

然后我试了一下协程爬取:

from gevent import monkey
monkey.patch_all()
import requests,time,gevent
from gevent.queue import Queue
start=time.time()
url_list={'https://www.baidu.com/',
'https://www.sina.com.cn/',
'http://www.sohu.com/',
'https://www.qq.com/',
'https://www.163.com/',
'http://www.iqiyi.com/',
'https://www.tmall.com/',
'http://www.ifeng.com/'
}
work=Queue()
for url in url_list:
    work.put_nowait(url)
def pa():
    while not work.empty():
        url=work.get_nowait()
        res=requests.get(url)
        print(url,work.qsize(),res.status_code)
task_list=[]
for i in range(2):
    task=gevent.spawn(pa)
    task_list.append(task)
gevent.joinall(task_list)
end=time.time()
print(end-start)

错误就一大堆了。

图片说明

简单的爬取就可以过:

import requests
from bs4 import BeautifulSoup
headers={'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
url='http://www.weather.com.cn/weather/101281905.shtml'
res=requests.get(url,headers=headers)
res.encoding='utf-8'
bs=BeautifulSoup(res.text,'html.parser')
lis=bs.find(class_='t clearfix').find_all('li')
for li in lis:
    day=li.find('h1')
    how=li.find(class_='wea')
    num=li.find(class_='tem')
    print('日期:'+day.text+'\n天气:'+how.text+'\n温度:'+num.text+'\n---------------')

图片说明

已试,用selenium没发现问题

然而当我运行以下代码时:

from gevent import monkey
monkey.patch_all()
import gevent,requests, bs4, csv
from gevent.queue import Queue
work = Queue()
url_1 = 'http://www.boohee.com/food/group/{type}?page={page}'
for x in range(1, 4):
    for y in range(1, 4):
        real_url = url_1.format(type=x, page=y)
        work.put_nowait(real_url)
url_2 = 'http://www.boohee.com/food/view_menu?page={page}'
for x in range(1,4):
    real_url = url_2.format(page=x)
    work.put_nowait(real_url)
print(work)

结果是一片空
图片说明

2个回答

你的一个属性text没有定义,或是相应对象的包没有导入进来

因为最后一项排名没有推荐语,你可以通过res.text查看,排名250的影片没有标签span且class属性为‘inq'的节点(如span class="inq">此处为推荐语<"),这个时候你通过titles.find 来获取的就是Nonetype,自然就会报 nonetype没有text属性的错误。
修改建议:
通过titles.find 获取到元素后,先判断是否为nonetype,否则给默认值,如:titles.find('span', class_='inq'); tes=tes.text if tes else ""

Sy_Faker
Sy_Faker 第一个用try解决了,谢谢你
6 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问