首页 > 解决方案 > 使用 pyhhon 登录 facebook 后获取当前生日

问题描述

我决定尝试在 python 中创建一个简单的网络爬虫脚本。作为一个小挑战,我决定创建一个脚本,它能够让我登录到 facebook 并获取侧面显示的当前生日。我设法编写了一个脚本,可以让我登录到我的 facebook,但是我不知道如何获取显示的生日。

这是我的密码。

from selenium import webdriver 
from time import sleep 
from webdriver_manager.chrome import ChromeDriverManager 
from selenium.webdriver.chrome.options import Options 

usr = 'EMAIL'
pwd = 'PASSWORD'

driver = webdriver.Chrome(ChromeDriverManager().install()) 
driver.get('https://www.facebook.com/') 
print ("Opened facebook") 
sleep(1) 

username_box = driver.find_element_by_id('email') 
username_box.send_keys(usr) 
print ("Email Id entered") 
sleep(1) 

password_box = driver.find_element_by_id('pass') 
password_box.send_keys(pwd) 
print ("Password entered") 

login_box = driver.find_element_by_id('u_0_b') 
login_box.click() 

print ("Login Sucessfull")



print ("Fetched needed data") 
input('Press anything to quit') 
driver.quit() 
print("Finished") 

这是我第一次创建这种类型的脚本。我的假设是我应该遍历“jsc_c_3d”div 元素的子元素,直到我到达显示的生日。此外,每次刷新页面时,此元素的 id 都会更改。谁能告诉我这是如何完成的,或者这是否是我应该继续解决这个问题的正确方法?期望元素后的生日 div:

<div class="" id="jsc_c_3d">
    <div class="j83agx80 cbu4d94t ew0dbk1b irj2b8pg">
        <div class="qzhwtbm6 knvmm38d"><span class="oi732d6d ik7dh3pa d2edcug0 qv66sw1b c1et5uql 
        a8c37x1j muag1w35 enqfppq2 jq4qci2q a3bd9o3v knj5qynh oo9gr5id hzawbc8m" dir="auto">
            <strong>Bobi Mitrevski</strong>
            and 
            <strong>Trajce Tusev</strong> have birthdays today.</span></div></div></div>

标签: pythonweb-scraping

解决方案


你是正确的,你需要遍历内部元素jsc_c_3d来提取你想要的生日。然而,如果 id 值是动态的,那么这整个automated web-scraping就是一个问题,以至于它每次都会改变。在这种情况下,文本解析器bs4可以完成这项工作。

使用这种bs4方法,您只需从中提取相关div标签DOM,然后您就可以解析数据以获得所需的内容。

更一般地说,这个问题可以使用以下方法来解决,Facebook-API这可能很简单

import facebook

token = 'a token' # token omitted here, this is the same token when I use in https://developers.facebook.com/tools/explorer/ 
graph = facebook.GraphAPI(token)
args = {'fields' : 'birthday,name' }
friends = graph.get_object("me/friends",**args)

推荐阅读