为什么用于网页抓取的for循环运行时返回错误?
错误排查及修复方案
你代码里共有3处直接导致运行报错的问题,对应修复逻辑如下:
- 变量名不匹配:你给摘要内容赋值的变量名为
summ,后续打印时调用了不存在的变量des,会触发NameError,直接把打印语句的变量改为summ即可。 - iframe行报错:不是所有
article节点下都包含类为youtube-player的iframe元素,当对应元素不存在时,find()方法会返回None,直接取["src"]属性会触发TypeError,需要先判断iframe元素是否存在再执行后续视频链接提取逻辑。 - 链接格式错误:生成YouTube访问链接时你少写了双斜杠,
https:youtube.com需改为https://youtube.com。 - 额外语法修正:你代码中
class_="youtube-player"是HTML转义后的错误写法,实际代码直接用普通双引号包裹类名即可。
修正后可正常运行的完整代码
from bs4 import BeautifulSoup import requests as r d = 'https://coreyms.com' da = r.get(d).text corey = BeautifulSoup(da, 'lxml') for article in corey.find_all('article'): hd = article.h2.a.text print(hd) summ = article.find('div', class_='entry-content').p.text print(summ) # 先校验iframe是否存在再提取属性 vid_tag = article.find('iframe', class_="youtube-player") if vid_tag: vid = vid_tag["src"] 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) else: print("当前文章无嵌入YouTube视频") print()
内容的提问来源于stack exchange,提问作者saad1s
相关产品推荐
相关产品推荐

