【问题标题】:why is the loop for webscraping returning an error为什么网络抓取的循环返回错误
【发布时间】:2021-12-17 11:21:54
【问题描述】:
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 教程学习如何抓取网页。我的代码行与教程中显示的完全相同,但在我运行它时会返回错误。我完全迷路了

【问题讨论】:

  • edit您的问题并发布您遇到的错误和回溯的全文
  • print(des)print(summ)?

标签: python web-scraping beautifulsoup nonetype


【解决方案1】:

您的第一个问题是打印不存在的变量 print(des),第二件事是您尝试抓取的页面上并非每个 <article> 标记都包含带有 youtube 链接的 <iframe>,所以您在这种情况下需要跳过循环中的迭代:

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()

【讨论】:

  • 非常感谢您的解释。代码有效!!我仍然对 youtube 教程中的同一行代码有效这一事实有点好奇。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 2020-12-30
  • 1970-01-01
  • 2020-12-07
相关资源
最近更新 更多