使用 Beautiful Soup 抓取一篇随机的维基百科文章可以进行大约 1000 次迭代,直到出现属性错误

Scraping a random Wikipedia article works for about 1000 iterations with Beautiful Soup until I get an attribute error

我在 Jupyter Notebook 中使用的代码:

import requests
from bs4 import BeautifulSoup
import requests

corpus = ""

for x in range(10000):
    URL = "https://en.wikipedia.org/wiki/Special:Random"
    page = requests.get(URL)
    html = page.text

    soup = BeautifulSoup(html)
    text = soup.p.text

    text = text.replace('[1]', '')
    text = text.replace('[2]', '')
    text = text.replace('[3]', '')
    text = text.replace('[4]', '')
    text = text.replace('[5]', '')
    text = text.replace('[6]', '')
    text = text.replace('[7]', '')
    text = text.replace('[8]', '')
    text = text.replace('[9]', '')
    text = text.strip()
    corpus += text
    print(x)

with open('Wikipedia Corpus.txt', 'w') as f:
f.write(corpus)

我得到的错误:

AttributeError                            Traceback (most recent call last)
/tmp/ipykernel_8985/763917129.py in <module>
 11 
 12     soup = BeautifulSoup(html)
 ---> 13     text = soup.p.text
 14 
 15     text = text.replace('[1]', '')

 AttributeError: 'NoneType' object has no attribute 'text'

这个错误可能是由暂时的互联网断开引起的吗?我不知道为什么这段代码在大约 1000 次迭代后停止工作。

我认为这意味着您正试图抓取的任何页面都有一个没有值的段落标记,或者甚至不包含开头的段落。将其放入 try: except: 中,以便在出现错误时可以打印网页的 url。有了它,您可以查看 html 源代码以了解导致问题的原因。除此之外,由于您正在访问随机的维基百科文章,因此我们中的任何人都无法为您提供太多帮助。每个网页的格式都不同,有时维基百科页面不包含太多数据。