首页 > 解决方案 > 在 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”。

页面来源在这里

原始页面

标签: pythonhtmlweb-crawler

解决方案


我看到了一些问题,如果我看到完整的代码,我认为可能会解决这些问题。然而,有一些事情需要在这个块中修复。

例如,此行应为:

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)

推荐阅读