BeautifulSoup爆出莫名错误
import requestsfrom bs4 import BeautifulSoup
import time
global headers
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0'}
#主程序
def get_proxy():
#爬取目标,免费代理IP网站
url1='https://www.kuaidaili.com/free'
#快代理爬虫程序
kuaidaili(url1)
def kuaidaili(url):
proxies=[]
for page in range(1,4):
link=url+'/inha/%d/' % page
response=requests.get(link,headers=headers)
soup=BeautifulSoup(response.text,'html.parser')
iplist=soup.find(attrs={'class':'table table-bordered table-striped'}).tbody
print(iplist)
if __name__=='__main__':
get_proxy()
为啥说是莫名错误呢,就真的很莫名其妙,kuaidaili()函数内,使用BeautifulSoup抓取IP列表,如下,print(iplist)是成功了的,即抓取成功了,但却报了一个AttributeError: 'NoneType' object has no attribute 'tbody',不解,只有快代理这一家网站有这个错误,其他代理网站我试着爬取了,同样的代码,就改了class名,却成功了,真的迷,求解!
iplist=soup.find(attrs={'class':'table table-bordered table-striped'}).tbody
print(iplist)
报错截图如下:
luxiaolan6373 发表于 2020-9-4 18:15
第二页开始,应该是不让访问,速度太快,加点延迟
import bs4,requests,time
def getIP(page):
url=f'https://www.kuaidaili.com/free/inha/{page}/'
res=requests.get(url)
soup=bs4.BeautifulSoup(res.text,'html.parser')
soup=soup.find('tbody')
soup=soup.find_all('tr')
for item in soup:
d=dict.fromkeys(('ip','port'))
d['ip']=item.td.text
d['port'] = item.td.next_sibling.next_sibling.text
print(d)
for i in range(4):
getIP(i+1)
time.sleep(1)
完美解决你的问题,给个最佳答案吧 本帖最后由 疾风怪盗 于 2020-9-4 17:08 编辑
你看下第二页,soup打印出来是-10,那肯定是没有tbody了
试了几次,有时正常响应,有时就报错
https://www.kuaidaili.com/free/inha/1/
<Response >
https://www.kuaidaili.com/free/inha/2/
<Response >
https://www.kuaidaili.com/free/inha/3/
<Response >
https://www.kuaidaili.com/free/inha/4/
<Response >
https://www.kuaidaili.com/free/inha/5/
<Response >
你为啥不直接 find('tbody')这不直接完事了 luxiaolan6373 发表于 2020-9-4 18:00
你为啥不直接 find('tbody')这不直接完事了
或者直接 find_all('td',data-title="IP") 和 find_all('td',data-title="PORT") luxiaolan6373 发表于 2020-9-4 18:03
或者直接 find_all('td',data-title="IP") 和 find_all('td',data-title="PORT")
import bs4,requests
def getIP(page):
url=f'https://www.kuaidaili.com/free/inha/{page}/'
res=requests.get(url)
soup=bs4.BeautifulSoup(res.text,'html.parser')
soup=soup.find('tbody')
soup=soup.find_all('tr')
for item in soup:
d=dict.fromkeys(('ip','port'))
d['ip']=item.td.text
d['port'] = item.td.next_sibling.next_sibling.text
print(d)
getIP(1)
{'ip': '175.42.68.49', 'port': '9999'}
{'ip': '122.234.91.192', 'port': '9000'}
{'ip': '182.34.103.5', 'port': '9999'}
{'ip': '121.232.148.205', 'port': '9000'}
{'ip': '114.231.45.60', 'port': '9999'}
{'ip': '123.149.137.17', 'port': '9999'}
{'ip': '171.11.179.18', 'port': '9999'}
{'ip': '119.254.94.93', 'port': '44665'}
{'ip': '123.163.27.179', 'port': '9999'}
{'ip': '220.249.149.229', 'port': '9999'}
{'ip': '125.108.100.114', 'port': '9000'}
{'ip': '36.248.132.117', 'port': '9999'}
{'ip': '125.108.73.169', 'port': '9000'}
{'ip': '123.57.77.187', 'port': '8118'}
{'ip': '183.195.106.118', 'port': '8118'} luxiaolan6373 发表于 2020-9-4 18:07
import bs4,requests
def getIP(page):
楼主的第一页是可以的,问题不在于查找数据的方法
后面几页循环时,就没有响应了,没有返回数据,而且刷新了几次貌似是随机的,这个才是问题所在 luxiaolan6373 发表于 2020-9-4 18:07
import bs4,requests
def getIP(page):
第二页开始,应该是不让访问,速度太快,加点延迟 疾风怪盗 发表于 2020-9-4 18:09
楼主的第一页是可以的,问题不在于查找数据的方法
后面几页循环时,就没有响应了,没有返回数据,而且刷 ...
我知道的,我解决了,就是加点延迟的问题请看我最后的答案 luxiaolan6373 发表于 2020-9-4 18:22
我知道的,我解决了,就是加点延迟的问题请看我最后的答案
看到了,学习了,没想到可以加个延迟就好了,我看楼主写的时候也import time了,但是没用到 luxiaolan6373 发表于 2020-9-2 22:42
import bs4,requests,time
def getIP(page):
非常感谢,这两天没时间碰电脑,今天才看见,问题已解决{:10_254:}
页:
[1]