鱼C论坛

 找回密码
 立即注册
查看: 2851|回复: 11

[已解决]BeautifulSoup爆出莫名错误

[复制链接]
发表于 2020-9-2 22:42:21 | 显示全部楼层 |阅读模式
10鱼币
import requests
from 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)
报错截图如下:

微信截图_20200902224202.png

最佳答案
2020-9-2 22:42:22
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)
完美解决你的问题,给个最佳答案吧

最佳答案

查看完整内容

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 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-2 22:42:22 | 显示全部楼层    本楼为最佳答案   
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)
完美解决你的问题,给个最佳答案吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2020-9-4 16:34:19 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-4 16:54:54 | 显示全部楼层
本帖最后由 疾风怪盗 于 2020-9-4 17:08 编辑

你看下第二页,soup打印出来是-10,那肯定是没有tbody了
试了几次,有时正常响应,有时就报错

https://www.kuaidaili.com/free/inha/1/
<Response [200]>
https://www.kuaidaili.com/free/inha/2/
<Response [200]>
https://www.kuaidaili.com/free/inha/3/
<Response [503]>
https://www.kuaidaili.com/free/inha/4/
<Response [200]>
https://www.kuaidaili.com/free/inha/5/
<Response [503]>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-4 18:00:42 | 显示全部楼层
你为啥不直接 find('tbody')这不直接完事了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-4 18:03:21 | 显示全部楼层
luxiaolan6373 发表于 2020-9-4 18:00
你为啥不直接 find('tbody')这不直接完事了

或者直接 find_all('td',data-title="IP") 和 find_all('td',data-title="PORT")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-4 18:07:00 | 显示全部楼层
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'}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-4 18:09:42 | 显示全部楼层
luxiaolan6373 发表于 2020-9-4 18:07
import bs4,requests

def getIP(page):

楼主的第一页是可以的,问题不在于查找数据的方法
后面几页循环时,就没有响应了,没有返回数据,而且刷新了几次貌似是随机的,这个才是问题所在
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-4 18:15:19 | 显示全部楼层
luxiaolan6373 发表于 2020-9-4 18:07
import bs4,requests

def getIP(page):

第二页开始,应该是不让访问,速度太快,加点延迟
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-4 18:22:17 | 显示全部楼层
疾风怪盗 发表于 2020-9-4 18:09
楼主的第一页是可以的,问题不在于查找数据的方法
后面几页循环时,就没有响应了,没有返回数据,而且刷 ...

我知道的,我解决了,就是加点延迟的问题请看我最后的答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-4 18:25:48 | 显示全部楼层
luxiaolan6373 发表于 2020-9-4 18:22
我知道的,我解决了,就是加点延迟的问题请看我最后的答案

看到了,学习了,没想到可以加个延迟就好了,我看楼主写的时候也import time了,但是没用到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-6 20:00:54 | 显示全部楼层
luxiaolan6373 发表于 2020-9-2 22:42
import bs4,requests,time

def getIP(page):

非常感谢,这两天没时间碰电脑,今天才看见,问题已解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 20:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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