Webscraper,' NoneType'对象为字符串TypeError。什么是创建非类型,我该如何解决?

时间:2017-09-13 16:48:13

标签: python web-scraping web-crawler typeerror nonetype

我有一些代码会返回以下错误:

TypeError:无法转换' NoneType'反对意图

我已经看过其他人遇到同样类型的错误并在此处提出问题:

据我所知,错误的原因可能会有很大差异,具体取决于代码中NoneType的原因。我见过的许多案例对我没有帮助,因为很明显(或者由用户明确说明)导致NoneType的原因以及可能的解决方案。我是Python的新手,我无法解决代码中创建错误的问题。

我正在尝试为托管文本的网站创建一个基本的网络浏览器。我想要它做的是创建一个链接到这些文本的URL列表,以及每个文本的标题。这是我的原始代码:

import requests
from bs4 import BeautifulSoup

# Running this returns only links at the top of the page and from the tab bar.
# No links to Irish language texts are returned.
# Causes TypeError: Can't convert 'NoneType' object to str implicitly

def celt_crawl(max_pages):
    url = 'http://celt.ucc.ie/irlpage.html'
    source_code =  requests.get(url)
    plain_text = source_code.text
    soup = BeautifulSoup(plain_text)
    for link in soup.findAll('a'):
        # Next line causes error by creating 'NoneType'
        href = "http://celt.ucc.ie/" + link.get('href')
        name = link.string
        print(href)
        print(name)
        # The name of the tab bar link is returned where present.
        # This should ideally print the name of the relevant text.

celt_crawl (1)

我用注释标记了问题。

我试图以两种方式解决问题。首先我假设link.get('href')可能通过返回空值导致问题,然后我假设它可能是name = link.string。我尝试了以下两个if语句来修复它,但两者都返回相同的TypeError。

修复1。

if link.get('href') is None:
    pass
else:
    print(href)
    print(name)

修复2。

href = "http://celt.ucc.ie/" + link.get('href')
name = link.string
if name is None:
    pass
else:
    print(href)
    print(name)

我假设名称或href返回一个空值并导致代码在遇到这种情况时中断,导致TypeError和问题,只返回标签栏的URL,而不是我实际想要的文本链接。

如果有人能提供解释/解决方案,我真的很感激。

编辑以包含堆栈跟踪:

Traceback (most recent call last):
  File "C:\Users\admd9\Desktop\Coding\Python\Web Crawlers\Web Crawler CELT.py", line 22, in <module>
    celt_crawl (1)
  File "C:\Users\admd9\Desktop\Coding\Python\Web Crawlers\Web Crawler CELT.py", line 15, in celt_crawl
    href = "http://celt.ucc.ie/" + link.get('href')
TypeError: Can't convert 'NoneType' object to str implicitly
>>> 

0 个答案:

没有答案