python - 在 HTML 源代码中找不到该属性,但 Python 程序运行正常
问题描述
我正在抓取一个 YouTube 页面并在网上找到一个开放的程序代码。代码运行并返回正确的结果。但是,当我逐句学习代码时,我发现我在源代码中找不到该属性。我在页面源代码中搜索它,检查元素视图并将原始代码复制并粘贴到 word 中。我无处可寻。
这怎么发生的?
以下代码:
soup=BeautifulSoup(result.text,"lxml")
# cannot find yt-lockup-meta-info anywhere......
view_element=soup.find_all("ul",class_="yt-lockup-meta-info")
totalview=0
for objects in view_element:
view_list=obj.findChildren()
for element in view_list:
if element.string.endwith("views"):
videoviews=element.text.replace("views","").replace(",","")
totalview=totalview+int(videoviews)
print(videoviews)
print("----------------------")
print("Total_Views"+str(totalview))
我搜索的属性是“yt-lockup-meta-info”。
页面来源在这里。
原始页面。
解决方案
我看到了一些问题,如果我看到完整的代码,我认为可能会解决这些问题。然而,有一些事情需要在这个块中修复。
例如,此行应为:
for obj in view_element:
代替:
for objects in view_element:
遍历“view_element”时,您只引用了一个“obj”,而不是多个对象。
此外,如果有可以直接搜索的课程,则无需搜索“视图”一词。
以下是我将如何解决这个问题。希望这可以帮助。
#Go to website and convert page source to Soup
response = requests.get('https://www.youtube.com/results?search_query=web+scraping+youtube')
soup = BeautifulSoup(response.text, 'lxml')
f.close()
videos = soup.find_all('ytd-video-renderer') #Find all videos
total_view_count = 0
for video in videos:
video_meta = video.find('div', {'id': 'metadata'}) #The text under the video title
view_count_text = video_meta.find_all('span', {'class': 'ytd-video-meta-block'})[0].text.replace('views', '').strip() #The view counter
#Converts view count to integer
if 'K' in view_count_text:
video_view_count = int(float(view_count_text.split('K')[0])*1000)
elif 'M' in view_count_text:
video_view_count = int(float(view_count_text.split('M')[0])*1000000)
elif 'B' in view_count_text:
video_view_count = int(float(view_count_text.split('B')[0])*1000000000)
else:
video_view_count = int(view_count_text)
print(video_view_count)
total_view_count += video_view_count
print(total_view_count)
推荐阅读
- javascript - 更改图表的位置
- laravel - 让 Laravel “Hello World” 运行的最简单方法是什么?
- python-3.x - 如何获取小部件项的值以显示在 TextArea 中并将值转换为字典
- java - 错误:无法执行目标 org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy 405,
- python - 日期时间输出的差异
- svelte - 使用保留字作为道具名称
- spacy - 链接法国 Spacy 模型但未能加载它
- c++ - 是否可以找出两个模板参数之间的表达式类型?
- javascript - 如何使用 Proxy 显示 Promise 内部插槽值?
- c - macos Mojave `DYLD_INSERT_LIBRARIES` 分段错误