为什么网络抓取循环返回错误

why is the loop for webscraping returning an error

from bs4 import BeautifulSoup
import requests as r
d='https://coreyms.com'
da=r.get(d).text 
print(da)
corey=BeautifulSoup(da,'lxml') 
print(corey.prettify())

for article in corey.find_all('article'): 

    hd=article.h2.a.text
    print(hd) 

    summ=article.find('div',class_='entry-content').p.text 
    print(des)

    vid=article.find('iframe',class_="youtube-player")["src"] #upon inspection, this line of code is not running correctly in the loop. Am i missing something?

    splt_vd_link=vid.split('/')[4] 
    splt_vd_link=splt_vd_link.split('?')[0]
 
    y_link=f'https:youtube.com/watch?v={splt_vd_link}'
    print(y_link)

    print()

我正在按照 YouTube 教程学习如何抓取网页。我的代码行与教程中显示的完全相同,但它 returns 是一个错误,因为我 运行 它。我完全迷路了

您的第一个问题是打印不存在的变量 print(des),第二个问题是并非您尝试 抓取 页面上的每个 <article> 标签包含 <iframe> 和 youtube link 因此在这种情况下您需要跳过循环中的迭代:

if vid is None:
    continue

完整的工作代码:

from bs4 import BeautifulSoup
import requests as r
d='https://coreyms.com'
da=r.get(d).text 
print(da)
corey=BeautifulSoup(da,'lxml') 
print(corey.prettify())

for article in corey.find_all('article'): 

    vid=article.find('iframe',class_="youtube-player")
    if vid is None:
        continue
    vid = vid["src"]

    hd=article.h2.a.text
    print(hd) 

    summ=article.find('div',class_='entry-content').p.text

    splt_vd_link=vid.split('/')[4] 
    splt_vd_link=splt_vd_link.split('?')[0]
 
    y_link=f'https:youtube.com/watch?v={splt_vd_link}'
    print(y_link)

    print()