永不秃头的ssf 2019-02-14 22:05 采纳率: 0%
浏览 561
已采纳

新手做了一个随机跳转网站的爬虫,但不知道错误在哪

先贴上代码

def getInlinks(bsobj,inURL):                   #寻找网页的内链
    inURL=urlparse(inURL).scheme+"://"+urlparse(inURL).netloc
    inlinks=[]
    for link in bsobj.findALL("a",href=re.compile("^(/|.*"+inURL+")")):    
        #寻找以/开头或者包含当前URL的链接
        if link.attrs["href"] is not None:
            if link.attrs["href"] not in inlinks:
                if(link.attrs["href"].startswith('/')):
                    inlinks.append(inURL+link.attrs["href"])
                else:
                    inlinks.append(link.attrs['href'])
    return inlinks

def getOutlinks(bsobj,outURL):        #寻找网页中的外链
    outlinks=[]
    for link in bsobj.findALL("a",href=re.compile("^(http|www)((?!"+outURL+").)*$")):   #找到http,www开头的并且不包含当前URL的
        if link.attrs['href'] is not None:
            if link.attrs['href'] not in outlinks:
                outlinks.append(link.attrs['href'])
    return outlinks


def getlink(startURL):
    html=urlopen(startURL)
    bsobj=BeautifulSoup(html,"lxml")
    outlinks=getOutlinks(bsobj,urlparse(startURL).netloc)
    if (len(outlinks)==0):
        print("没有可跳转的外部网站")
        domain=urlparse(startURL).scheme+"://"+urlparse(startURL).netloc
        inlinks=getInlinks(bsobj,domain)
        return getlink(inlinks[random.randint(0,len(inlinks)-1)])
    else:
        return outlinks[random.randint(0,len(outlinks)-1)]

def followlinks(startURL):    #只想让它跳转五次,递归调用
    outlinks=getlink(startURL)
    print("将要跳转的网站是"+outlinks)
    global a
    a=a+1
    if(a<=5):
        followlinks(outlinks)
followlinks("http://www.baidu.com/")

报错的原因是:

Traceback (most recent call last):
File "C:/Users/18022863809/Desktop/python_work/爬虫.py", line 55, in
followlinks("http://www.baidu.com/")
File "C:/Users/18022863809/Desktop/python_work/爬虫.py", line 49, in followlinks
outlinks=getlink(startURL)
File "C:/Users/18022863809/Desktop/python_work/爬虫.py", line 39, in getlink
outlinks=getOut(bsobj,urlparse(startURL).netloc)
File "C:/Users/18022863809/Desktop/python_work/爬虫.py", line 26, in getOut
for
```link in bsobj.findALL("a",href=re.compile("^(http|www)((?!"+outURL+").)*$")):
TypeError: 'NoneType' object is not callable

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2019-02-15 00:10
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题