Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Webscraping:如何循环许多url请求? 导入请求 从bs4导入BeautifulSoup 卢尔=”https://www.erkunde-die-welt.de/laender-hauptstaedte-welt/" Lpage=requests.get(LURL) Lsoup=BeautifulSoup(Lpage.content'html.parser') Lx=Lsoup.find_all(class=“column-2”) a=[] 对于Lx中的Lx: a、 追加(Lx.text) a、 移除(“土地”) j=0 对于范围内的i(len(a)): b=a[j] URL=”https://de.wikipedia.org/wiki/“+b page=请求.get(URL) soup=BeautifulSoup(page.content,'html.parser') l=汤。查找(class=“firstHeading”) zr=soup.find(class=“wikitable infobox InfoboxStatat float right”) z=zr.findAll(“tr”) a=“” 对于z中的z: a=a+z h=a.find(“Hauptstadt”) lol=a[h:-1] lol=lol.replace(“Hauptstadt”和“”) lol=lol.strip() fg=lol.find(“\n”) lol=lol[0:fg] lol=lol.strip() j=j+1 打印(lol) 打印(l.text)_Python_Beautifulsoup - Fatal编程技术网

Python Webscraping:如何循环许多url请求? 导入请求 从bs4导入BeautifulSoup 卢尔=”https://www.erkunde-die-welt.de/laender-hauptstaedte-welt/" Lpage=requests.get(LURL) Lsoup=BeautifulSoup(Lpage.content'html.parser') Lx=Lsoup.find_all(class=“column-2”) a=[] 对于Lx中的Lx: a、 追加(Lx.text) a、 移除(“土地”) j=0 对于范围内的i(len(a)): b=a[j] URL=”https://de.wikipedia.org/wiki/“+b page=请求.get(URL) soup=BeautifulSoup(page.content,'html.parser') l=汤。查找(class=“firstHeading”) zr=soup.find(class=“wikitable infobox InfoboxStatat float right”) z=zr.findAll(“tr”) a=“” 对于z中的z: a=a+z h=a.find(“Hauptstadt”) lol=a[h:-1] lol=lol.replace(“Hauptstadt”和“”) lol=lol.strip() fg=lol.find(“\n”) lol=lol[0:fg] lol=lol.strip() j=j+1 打印(lol) 打印(l.text)

Python Webscraping:如何循环许多url请求? 导入请求 从bs4导入BeautifulSoup 卢尔=”https://www.erkunde-die-welt.de/laender-hauptstaedte-welt/" Lpage=requests.get(LURL) Lsoup=BeautifulSoup(Lpage.content'html.parser') Lx=Lsoup.find_all(class=“column-2”) a=[] 对于Lx中的Lx: a、 追加(Lx.text) a、 移除(“土地”) j=0 对于范围内的i(len(a)): b=a[j] URL=”https://de.wikipedia.org/wiki/“+b page=请求.get(URL) soup=BeautifulSoup(page.content,'html.parser') l=汤。查找(class=“firstHeading”) zr=soup.find(class=“wikitable infobox InfoboxStatat float right”) z=zr.findAll(“tr”) a=“” 对于z中的z: a=a+z h=a.find(“Hauptstadt”) lol=a[h:-1] lol=lol.replace(“Hauptstadt”和“”) lol=lol.strip() fg=lol.find(“\n”) lol=lol[0:fg] lol=lol.strip() j=j+1 打印(lol) 打印(l.text),python,beautifulsoup,Python,Beautifulsoup,这是代码。它获取每个国家的名称并将其打包到一个列表中。之后,该程序循环浏览该国的维基百科页面,获取该国的首都并打印出来。它适用于所有国家。但在一个国家/地区完成并再次启动代码后,它会停止do work,并出现以下错误: Traceback(最近一次调用last):文件“main.py”,第19行,在 z=zr.findAll(“tr”)AttributeError:'NoneType'对象没有属性'findAll' 错误消息实际上是在告诉您发生了什么。代码行 z = zr.findAll("tr

这是代码。它获取每个国家的名称并将其打包到一个列表中。之后,该程序循环浏览该国的维基百科页面,获取该国的首都并打印出来。它适用于所有国家。但在一个国家/地区完成并再次启动代码后,它会停止do work,并出现以下错误:

Traceback(最近一次调用last):文件“main.py”,第19行,在
z=zr.findAll(“tr”)AttributeError:'NoneType'对象没有属性'findAll'

错误消息实际上是在告诉您发生了什么。代码行

z = zr.findAll("tr")
正在引发属性错误,因为非类型对象没有
findAll
属性。您正试图在zr上调用
findAll
,假设变量始终是一个BeautifulSoup对象,但它不会。如果此行:

zr = soup.find(class_="wikitable infobox infoboxstaat float-right")
在html中找不到与这些类匹配的对象,zr将设置为
None
。所以,在你想要刮的一页上,发生了这样的事情。您可以使用try/except语句对其进行编码,如下所示:

for i in range(len(a)):
    b = a[j]
    URL = "https://de.wikipedia.org/wiki/"+b
    page = requests.get(URL)
    try:
        soup = BeautifulSoup(page.content, 'html.parser')
        l = soup.find(class_="firstHeading")
        zr = soup.find(class_="wikitable infobox infoboxstaat float-right")
        z = zr.findAll("tr")
        a=""
        #don't do this! should be 'for i in z' or something other variable name
        for z in z:
            a=a+z.text
            h=a.find("Hauptstadt")
            lol=a[h:-1]
            lol=lol.replace("Hauptstadt", "")
            lol=lol.strip()
            fg=lol.find("\n")
            lol=lol[0:fg]
            lol=lol.strip()
            j=j+1
            print(lol)
            print(l.text)
    except:
        pass

在本例中,任何没有正确html标记的页面都将被跳过。

错误消息实际上是在告诉您发生了什么。代码行

z = zr.findAll("tr")
正在引发属性错误,因为非类型对象没有
findAll
属性。您正试图在zr上调用
findAll
,假设变量始终是一个BeautifulSoup对象,但它不会。如果此行:

zr = soup.find(class_="wikitable infobox infoboxstaat float-right")
在html中找不到与这些类匹配的对象,zr将设置为
None
。所以,在你想要刮的一页上,发生了这样的事情。您可以使用try/except语句对其进行编码,如下所示:

for i in range(len(a)):
    b = a[j]
    URL = "https://de.wikipedia.org/wiki/"+b
    page = requests.get(URL)
    try:
        soup = BeautifulSoup(page.content, 'html.parser')
        l = soup.find(class_="firstHeading")
        zr = soup.find(class_="wikitable infobox infoboxstaat float-right")
        z = zr.findAll("tr")
        a=""
        #don't do this! should be 'for i in z' or something other variable name
        for z in z:
            a=a+z.text
            h=a.find("Hauptstadt")
            lol=a[h:-1]
            lol=lol.replace("Hauptstadt", "")
            lol=lol.strip()
            fg=lol.find("\n")
            lol=lol[0:fg]
            lol=lol.strip()
            j=j+1
            print(lol)
            print(l.text)
    except:
        pass

在本例中,任何没有正确html标记的页面都将被跳过。

非类型表示您的行
zr=soup.find(class=“wikitable infobox infoboxstat float right”)
没有返回任何内容

错误在这个循环中:

  for Lx in Lx:
      a.append(Lx.text)
在那里你不能用同一个名字。请尝试使用此循环,并让我知道它是如何运行的:

  for L in Lx:
         a.append(Lx.text)

“NoneType”表示您的行
zr=soup.find(class=“wikitable infobox InfoboxStatat float right”)
没有返回任何内容

错误在这个循环中:

  for Lx in Lx:
      a.append(Lx.text)
在那里你不能用同一个名字。请尝试使用此循环,并让我知道它是如何运行的:

  for L in Lx:
         a.append(Lx.text)

您将国家列表存储在名为
a
的变量中,然后在脚本中使用其他值重写该变量。这会打乱你的迭代。预防此类问题的两个好方法:

for i in range(len(a)):
    b = a[j]
    URL = "https://de.wikipedia.org/wiki/"+b
    page = requests.get(URL)
    try:
        soup = BeautifulSoup(page.content, 'html.parser')
        l = soup.find(class_="firstHeading")
        zr = soup.find(class_="wikitable infobox infoboxstaat float-right")
        z = zr.findAll("tr")
        a=""
        #don't do this! should be 'for i in z' or something other variable name
        for z in z:
            a=a+z.text
            h=a.find("Hauptstadt")
            lol=a[h:-1]
            lol=lol.replace("Hauptstadt", "")
            lol=lol.strip()
            fg=lol.find("\n")
            lol=lol[0:fg]
            lol=lol.strip()
            j=j+1
            print(lol)
            print(l.text)
    except:
        pass
  • 使用更有意义的变量名
  • 在Python代码上使用
    mypy
  • 我花了一点时间尝试对代码进行一些基本的清理,至少让您通过第一个bug;国家列表现在被称为
    countries
    ,而不是
    a
    ,这可以防止您覆盖它,我将极其混乱的
    I/j/a/b
    迭代替换为国家中国家的一个非常简单的
    循环。我还去掉了所有只使用过一次的变量,这样我就不用为它们取更好的名字了。我认为还有更多的工作要做,但我不知道这个内部循环在做什么,甚至不想尝试修复它。祝你好运

    import requests
    from bs4 import BeautifulSoup
    
    countries = [x.text for x in BeautifulSoup(
        requests.get(
            "https://www.erkunde-die-welt.de/laender-hauptstaedte-welt/"
        ).content,
        'html.parser'
    ).find_all(class_="column-2")]
    countries.remove("Land")
    
    for country in countries:
        soup = BeautifulSoup(
            requests.get(
                "https://de.wikipedia.org/wiki/" + country
            ).content,
            'html.parser'
        )
        heading = soup.find(class_="firstHeading")
        rows = soup.find(
            class_="wikitable infobox infoboxstaat float-right"
        ).findAll("tr")
        a = ""
        for row in rows:
            a += row.text
            h = a.find("Hauptstadt")
            lol = a[h:-1]
            lol = lol.replace("Hauptstadt", "")
            lol = lol.strip()
            fg = lol.find("\n")
            lol = lol[0:fg]
            lol = lol.strip()
            print(lol)
            print(heading.text)
    

    您将国家列表存储在名为
    a
    的变量中,然后在脚本中使用其他值重写该变量。这会打乱你的迭代。预防此类问题的两个好方法:

    for i in range(len(a)):
        b = a[j]
        URL = "https://de.wikipedia.org/wiki/"+b
        page = requests.get(URL)
        try:
            soup = BeautifulSoup(page.content, 'html.parser')
            l = soup.find(class_="firstHeading")
            zr = soup.find(class_="wikitable infobox infoboxstaat float-right")
            z = zr.findAll("tr")
            a=""
            #don't do this! should be 'for i in z' or something other variable name
            for z in z:
                a=a+z.text
                h=a.find("Hauptstadt")
                lol=a[h:-1]
                lol=lol.replace("Hauptstadt", "")
                lol=lol.strip()
                fg=lol.find("\n")
                lol=lol[0:fg]
                lol=lol.strip()
                j=j+1
                print(lol)
                print(l.text)
        except:
            pass
    
  • 使用更有意义的变量名
  • 在Python代码上使用
    mypy
  • 我花了一点时间尝试对代码进行一些基本的清理,至少让您通过第一个bug;国家列表现在被称为
    countries
    ,而不是
    a
    ,这可以防止您覆盖它,我将极其混乱的
    I/j/a/b
    迭代替换为国家中国家的一个非常简单的
    循环。我还去掉了所有只使用过一次的变量,这样我就不用为它们取更好的名字了。我认为还有更多的工作要做,但我不知道这个内部循环在做什么,甚至不想尝试修复它。祝你好运

    import requests
    from bs4 import BeautifulSoup
    
    countries = [x.text for x in BeautifulSoup(
        requests.get(
            "https://www.erkunde-die-welt.de/laender-hauptstaedte-welt/"
        ).content,
        'html.parser'
    ).find_all(class_="column-2")]
    countries.remove("Land")
    
    for country in countries:
        soup = BeautifulSoup(
            requests.get(
                "https://de.wikipedia.org/wiki/" + country
            ).content,
            'html.parser'
        )
        heading = soup.find(class_="firstHeading")
        rows = soup.find(
            class_="wikitable infobox infoboxstaat float-right"
        ).findAll("tr")
        a = ""
        for row in rows:
            a += row.text
            h = a.find("Hauptstadt")
            lol = a[h:-1]
            lol = lol.replace("Hauptstadt", "")
            lol = lol.strip()
            fg = lol.find("\n")
            lol = lol[0:fg]
            lol = lol.strip()
            print(lol)
            print(heading.text)
    

    好吧,到底是什么问题?你做过调试吗?好的,到底是什么问题?您调试过吗?非常感谢。你是对的,这个代码真的是一团糟。令人尴尬的是,我没有注意到我意外地覆盖了变量a。无论如何,非常感谢您花时间查看这段混乱的代码并注意到失败。现在它的工作是.PS。对不起,我的英语不好。非常感谢。你是对的,这个代码真的是一团糟。令人尴尬的是,我没有注意到我意外地覆盖了变量a。无论如何,非常感谢您花时间查看这段混乱的代码并注意到失败。现在它的工作是.PS。对不起,我英语不好