Puisque Twitter ne fournit pas d'API autour des signets, j'ai essayé d'obtenir tous les signets en utilisant Selenium.
environnement
CentOS Linux release 7.7.1908
Python 3.6.8
google-chrome Installez en vous référant à cet article. ChromeDriver Faites attention à la version à installer. Si vous le mettez négligemment, cela ne fonctionnera pas correctement. Consultez le site ChromeDriver et pip install avec la version spécifiée.
Exemple
# google-chrome --version
Google Chrome 78.0.3904.108
# pip install chromedriver-binary==78.0.3904.105
# pip show chromedriver-binary
Name: chromedriver-binary
Version: 78.0.3904.105.0
# chromedriver-path
/usr/lib/python3.6/site-packages/chromedriver_binary (Nécessaire plus tard)
Selenium
# pip install selenium
J'ai ajouté beaucoup d'options, mais --headless
et --no-sandbox
peuvent suffire.
Dans mon environnement, j'ai une exception sans --headless
.
executable_path spécifie le résultat du chromedriver-path ci-dessus.
J'ai enregistré une capture d'écran pour confirmation.
test.py
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
options = Options()
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--disable-infobars')
options.add_argument('--disable-extensions')
options.add_argument('--disable-gpu')
options.add_argument('--headless')
driver = webdriver.Chrome(chrome_options=options, executable_path='/usr/lib/python3.6/site-packages/chromedriver_binary/chromedriver')
driver.get('https://www.google.com/')
time.sleep(3.0)
driver.save_screenshot('screenshot.png')
driver.close()
driver.quit()
option.add_argument('--user-data-dir='+os.path.abspath('profile'))
Si vous spécifiez le profil à utiliser avec l'option ci-dessus, le cookie y est enregistré, vous n'avez donc pas à vous connecter à chaque fois que le programme est exécuté. Dans cet état, exécutez la connexion Twitter une seule fois dans cet article. Même si vous pensez que vous vous êtes connecté avec succès, cela peut s'arrêter à la page de confirmation de votre adresse e-mail, donc je pense que c'est une bonne idée d'utiliser le mode interactif pour vérifier l'écran et l'URL.
Les éléments du Tweet sont ajoutés / supprimés de manière dynamique en fonction du défilement dans la chronologie et les signets Twitter.
Dans le programme suivant
Récupérez l'url du tweet chargé → Faites défiler de sorte que le tweet du bas soit en haut de la page → Attendez que la page charge le tweet
L'URL de tous les tweets est obtenue en répétant.
def get_list():
driver.get('https://twitter.com/i/bookmarks')
time.sleep(10.0)
status_urls = []
container_xpath = '//*[@id="react-root"]/div/div/div/main/div/div/div/div[1]/div/div[2]/section/div/div/div'
container = driver.find_element_by_xpath(container_xpath) #Élément vertical contenant plusieurs tweets
end_count = 0
while True:
divs = container.find_elements_by_xpath('./div')
for div in divs:
if len(div.find_elements_by_tag_name('img')) == 0:
end_count += 1
break
status_url = div.find_element_by_xpath('./div/article/div/div[2]/div[2]/div[1]/div[1]/a').get_attribute('href')
status_urls.append(status_url)
if end_count > 8:
break
driver.execute_script('arguments[0].scrollIntoView();', divs[-1]) # must check length
print(len(status_urls))
time.sleep(15.0)
return list(set(status_urls)) #Comme la duplication se produit dans la méthode d'acquisition, elle est rendue unique en la définissant une fois.
Lorsque vous revenez à la limite du signet, le tweet n'est pas stocké dans l'élément du bas, vous pouvez donc juger si vous avez défilé jusqu'à la fin par div.find_elements_by_tag_name ('img')
.
Peu importe le temps que cela prend, je veux donc tous les obtenir, c'est donc un code redondant en dormant et en spécifiant le nombre de fois.
Si vous trouvez quelque chose qui ne va pas, veuillez commenter.
Jusqu'à l'exécution de Selenium + Python sur CentOS7-Qiita Si vous souhaitez garder le site connecté lors de la prochaine exécution sur Selenium Bot pour répondre depuis la connexion Twitter avec Python Selenium --Qiita
Recommended Posts