您的位置 首页 > 数码极客

『如何登陆facebook』如何登陆instagram

为了演示浏览器和API的使用,我们将会研究Facebook的网站。目前,从月活用户数维度来看,Facebook是世界上最大的社交网络之一,因此其用户数据非常有价值。

1 网站

图1所示为Packt出版社的Facebook页面。

当你查看该页的源代码时,可以找到最开始的几篇日志,但是后面的日志只有在浏览器滚动时才会通过AJAX加载。另外,Facebook还提供了一个移动端界面,正如第1章所述,这种形式的界面通常更容易抓取。该页面在移动端的展示形式如图9.6所示。


图1


图2


当我们与移动端网站进行交互,并使用浏览器工具查看时,会发现该界面使用了和之前相似的结构来处理AJAX事件,因此该方法无法简化抓取。虽然这些AJAX事件可以被逆向工程,但是不同类型的Facebook页面使用了不同的AJAX调用,而且依据我的过往经验,Facebook经常会变更这些调用的结构,所以抓取这些页面需要持续维护。因此,如第5章所述,除非性能十分重要,否则最好使用浏览器渲染引擎执行JavaScript事件,然后访问生成的HTML页面。

下面的代码片段使用Selenium自动化登录Facebook,并跳转到给定页面的URL。

from selenium import webdriver def get_driver(): try: return webdriver.PhantomJS() except: return webdriver.Firefox() def facebook(username, password, url): driver = get_driver() driver.get(';) driver.find_element_by_id('email').send_keys(username) driver.find_element_by_id('pass').send_keys(password) driver.find_element_by_id('loginbutton').submit() driver.implicitly_wait(30) # wait until the search box is available, # which means it has successfully logged in search = driver.find_element_by_name('q') # now logged in so can go to the page of interest driver.get(url) # add code to scrape data of interest here ...

然后,可以调用该函数加载你感兴趣的Facebook页面,并使用合法的Facebook邮箱和密码,抓取生成的HTML页面。

2 Facebook API

如第1章所述,抓取网站是在其数据没有给出结构化格式时的最末之选。而Facebook确实为绝大多数公共或私有(通过你的用户账号)数据提供了API,因此我们需要在构建加强的浏览器抓取之前,首先检查一下这些API提供的访问是否已经能够满足需求。

首先要做的事情是确定通过API哪些数据是可用的。为了解决该问题,我们需要先查阅其API文档。开发者文档的网址为,在这里给出了所有不同类型的API,包括图谱 API,该API中包含了我们想要的信息。如果你需要构建与Facebook的其他交互(通过API或SDK),可以随时查阅该文档,该文档会定期更新并且易于使用。

此外,根据文档链接,我们还可以使用浏览器内的图谱 API探索工具,其地址为。如图3所示,探索工具是用来测试查询及其结果的很好的地方。


图3


在这里,我可以搜索API,获取PacktPub的Facebook页面ID。图谱探索工具还可以用来生成访问口令,我们可以用它来定位API。

想要在Python中使用图谱API,我们需要使用具有更高级请求的特殊访问口令。幸运的是,有一个名为facebook-sdk()的维护良好的库可以供我们使用。我们只需通过pip安装它即可。

pip install facebook-sdk

下面是使用Facebook的图谱API从Packt出版社页面中抽取数据的代码示例。

In [1]: from facebook import GraphAPI In [2]: access_token = '....' # insert your actual token here In [3]: graph = GraphAPI(access_token=access_token, version='2.7') In [4]: gra('PacktPub') Out[4]: {'id': '204603129458', 'name': 'Packt'}

我们可以看到和基于浏览器的图谱探索工具相同的结果。我们可以通过传递想要抽取的额外信息,来获得页面中的更多信息。要确定使用哪些信息,我们可以在图谱文档中看到页面中所有可用的字段,文档地址为/graph-api/reference/page/。使用关键字参数fields,我们可以从API中抽取这些额外可用的字段。

In [5]: gra('PacktPub', fields='about,events,feed,picture') Out[5]: {'about': 'Packt provides software learning resources, from eBooks to video courses, to everyone from web developers to data scientists.', 'feed': {'data': [{'created_time': '2017-03-27T10:30:00+0000', 'id': '204603129458_109459', 'message': "We've teamed up with CBR Online to give you a chance to win 5 tech eBooks - enter by March 31! ;}, ... 'id': '204603129458', 'picture': {'data': {'is_silhouette': False, 'url': ' 2357248532027065_n.png?oh=d0a26e6c8a00cf7e6ce957ed2065e430&oe=59660265'}}}

我们可以看到该响应是格式良好的Python字典,我们可以很容易地进行解析。

图谱API还提供了很多访问用户数据的其他调用,其文档可以从Facebook的开发者页面中获取,网址为/graph-api。根据所需数据的不同,你可能还需要创建一个Facebook开发者应用,从而获得可用时间更长的访问口令。

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“如何登陆facebook,如何登陆instagram,如何登陆facebook账号,如何登陆wifi路由器,如何登陆faced,book,如何登陆别人的腾讯视频”边界阅读