2017-10-14 1 views
0

lorsque j'utilise la bibliothèque sélénium pour trouver la longueur de la chaîne associée dans la page de chaîne YouTube, il me donne 12, mais quand j'utilise la bibliothèque des demandes pour trouver la longueur, il me donne 0. Je veux utiliser les demandes s'il vous plaît donnez-moi la meilleure solution. ici est mon code,Demandes vs Selenium Python

//Requests 

import requests 
from bs4 import BeautifulSoup 
import time 
r = requests.get("https://www.youtube.com/channel/UCoykjkkJxsz7JukJR7mGrwg/about") 
soup = BeautifulSoup(r.content, 'html.parser') 
bb = soup.find_all("ytd-mini-channel-renderer",class_="style-scope ytd-vertical-channel-section-renderer") 
print(len(bb)) 


//selenium 

from selenium import webdriver 
from bs4 import BeautifulSoup 
import time 
driver = webdriver.Chrome(chrome_path) 
driver.get("https://www.youtube.com/channel/UCoykjkkJxsz7JukJR7mGrwg/about") 
soup = BeautifulSoup(driver.page_source, 'html.parser') 
bb = soup.find_all("ytd-mini-channel-renderer",class_="style-scope ytd-vertical-channel-section-renderer") 
print(len(bb)) 

Répondre

0

Chaque fois que j'ai rencontré un problème comme celui-ci, il a été parce que JS est la création des données que je recherchais. Si tel est le cas, vous ne pourrez probablement pas utiliser les requêtes car il ne peut pas gérer le JS. Si vous accédez à cette page youtube dans un navigateur, vous pouvez voir que "ytd-mini-channel-renderer" existe si vous l'examinez, mais si vous affichez la source, vous obtenez 0 résultat. Le code que vous pouvez voir depuis "view source" est ce que les requêtes obtiennent.

+0

ouais c'est vrai! mais je sais que le sélénium est lent par rapport aux demandes –

+0

je veux faire ces choses en utilisant les demandes –

+0

Malheureusement, je ne pense pas qu'une solution de contournement soit possible avec seulement des requêtes. Quelque chose doit être capable de lancer le javascript. Vous pourriez essayer d'utiliser PhantomJS car il est peut-être plus rapide que le chrome. – SuperStew