2017-10-21 52 views
0

J'apprends le web scraping en utilisant python mais je ne peux pas obtenir le résultat désiré. Ci-dessous mon code et la sortieWeb Scraping Python (BeautifulSoup, demandes)

Code

import bs4,requests 
url = "https://twitter.com/24x7chess" 
r = requests.get(url) 
soup = bs4.BeautifulSoup(r.text,"html.parser") 
soup.find_all("span",{"class":"account-group-inner"}) 
[] 

Voici ce que je cherchais à gratter

https://i.stack.imgur.com/tHo5S.png

Je continue à obtenir un tableau vide. S'il vous plaît aidez.

+0

Pourquoi n'êtes-vous pas utiliser Twitter API officiel? La mise au rebut sur le Web n'est pas idéale pour Twitter. – Saharsh

+0

En fait, je viens de commencer avec cela et c'est pourquoi je vais pour plus d'un chemin complet plutôt que de se concentrer uniquement sur Twitter API –

Répondre

0

Essayez ceci. Il vous donnera les articles que vous recherchez probablement. Selenium avec BeautifulSoup est facile à manipuler. Je l'ai écrit de cette façon. C'est ici.

from bs4 import BeautifulSoup 
from selenium import webdriver 

driver = webdriver.Chrome() 

driver.get("https://twitter.com/24x7chess") 
soup = BeautifulSoup(driver.page_source,"lxml") 
driver.quit() 
for title in soup.select("#page-container"): 
    name = title.select(".ProfileHeaderCard-nameLink")[0].text.strip() 
    location = title.select(".ProfileHeaderCard-locationText")[0].text.strip() 
    tweets = title.select(".ProfileNav-value")[0].text.strip() 
    following = title.select(".ProfileNav-value")[1].text.strip() 
    followers = title.select(".ProfileNav-value")[2].text.strip() 
    likes = title.select(".ProfileNav-value")[3].text.strip() 
    print(name,location,tweets,following,followers,likes) 

Sortie:

akul chhillar New Delhi, India 214 44 17 5 
+0

Merci beaucoup. J'ai commencé à utiliser Selenium et cela fonctionne comme par magie –

+0

Si cela fonctionne, assurez-vous de marquer cela comme une réponse. Merci. – SIM

+0

Puis-je également utiliser la méthode find_all ici au lieu d'utiliser select? –

1

Des sites comme Twitter chargent dynamiquement le contenu, ce qui dépend parfois du navigateur que vous utilisez, etc. En raison du chargement dynamique, certains éléments de la page sont chargés paresseusement, ce qui signifie que le DOM est gonflé dynamiquement. en fonction des actions de l'utilisateur, le tag que vous inspectez dans votre navigateur inspecter l'élément, est inspecté le HTML entièrement dynamiquement gonflé, mais la réponse que vous obtenez en utilisant les requêtes, est gonflée HTML, ou un simple DOM attendant de charger les éléments dynamiquement sur le actions de l'utilisateur qui, dans votre cas, lors de la récupération du module de requêtes est None.

Je vous suggère d'utiliser le pilote web selenium pour graver des pages web javascript dynamiques.

+0

Salut. Merci d'avoir pris le temps. J'ai remarqué quelque chose que je peux gratter seulement les données qui sont là dans la source de vue et pas les données que j'inspecte sur le site Web. Pourriez-vous s'il vous plaît regarder dans ceci? –

+0

@akulchhillar avec des demandes que vous pouvez seulement chercher le DOM statique, pour le cas d'utilisation requis, vous devez utiliser le module ['selenium'] (http://selenium-python.readthedocs.io/) – ZdaR

+0

Merci. J'apprends le sélénium ces jours-ci. à propos, que se passe-t-il si j'utilise urllib pour mettre au rebut des sites Web dynamiques? –