9.2 Facebook
目前,从月活用户数维度来看,Facebook是世界上最大的社交网络之一,因此其用户数据非常有价值。
9.2.1 网站
图9.5所示为Packt出版社的Facebook页面,其网址为https://www. facebook.com/PacktPub 。
图9.5
当你查看该页的源代码时,可以找到最开始的几篇日志,但是后面的日志只有在浏览器滚动时才会通过AJAX加载。另外,Facebook还提供了一个移动端界面,正如第1章所述,这种形式的界面通常更容易抓取。该页面在移动端的网址为https://m.facebook.com/PacktPub ,如图9.6所示。
图9.6
当我们与移动端网站进行交互,并使用Firebug查看时,会发现该界面使用了和之前相似的结构用于处理AJAX事件,因此该方法实际上无法简化抓取。虽然这些AJAX事件可以被逆向工程,但是不同类型的Facebook页面使用了不同的AJAX调用,而且依据我的过往经验,Facebook经常会变更这些调用的结构,所以抓取这些页面需要持续维护。因此,如第5章所述,除非性能十分重要,否则最好使用浏览器渲染引擎执行JavaScript事件,然后访问生成的HTML页面。
下面的代码片段使用Selenium自动化登录Facebook,并跳转到给定页面的URL。
from selenium import webdriver def facebook(username, password, url): driver = webdriver.Firefox() driver.get('https://www.facebook.com') driver.find_element_by_id('email').send_keys(username) driver.find_element_by_id('pass').send_keys(password) driver.find_element_by_id('login_form').submit() driver.implicitly_wait(30) # wait until the search box is available, # which means have successfully logged in search = driver.find_element_by_id('q') # now logged in so can go to the page of interest driver.get(url) # add code to scrape data of interest here ...
然后,可以调用该函数加载你感兴趣的Facebook页面,并抓取生成的HTML页面。
9.2.2 API
如第1章所述,抓取网站是在其数据没有给出结构化格式时的最末之选。而Facebook提供了一些数据的API,因此我们需要在抓取之前首先检查一下Facebook提供的这些访问是否已经满足需求。下面是使用Facebook的图形API从Packt出版社页面中抽取数据的代码示例。
>>> import json, pprint >>> html = D('http://graph.facebook.com/PacktPub') >>> pprint.pprint(json.loads(html)) {u'about': u'Packt Publishing provides books, eBooks, video tutorials, and articles for IT developers, administrators, and users.', u'category': u'Product/service', u'founded': u'2004', u'id': u'204603129458', u'likes': 4817, u'link': u'https://www.facebook.com/PacktPub', u'mission': u'We help the world put software to work in new ways, through the delivery of effective learning and information services to IT professionals.', u'name': u'Packt Publishing', u'talking_about_count': 55, u'username': u'PacktPub', u'website': u'http://www.PacktPub.com'}
该API调用以JSON格式返回数据,我们可以使用json 模块将其解析为Python的dict 类型。然后,我们可以从中抽取一些有用的特征,比如公司名、详细信息以及网站等。
图形API还提供了很多访问用户数据的其他调用,其文档可以从Facebook的开发者页面中获取,网址为https://developers.facebook.com/ docs/graph-api 。不过,这些API调用多数是设计给与已授权的Facebook用户交互的Facebook应用的,因此在抽取他人数据时没有太大用途。要想得到更加详细的信息,比如用户日志,仍然需要爬虫。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论