使用Selenium通过检查字符来刮取电子邮件地址

时间:2016-01-28 20:36:24

标签: python facebook selenium xpath web-scraping

我一直试图从Facebook商业信息页面中删除电子邮件地址,例如: Facebook Business Page Example

但是在正确确定XPath时遇到了一些麻烦。后来我才知道Facebook的商业信息页面没有一致的xpath。 XPath因企业而异,这意味着我目前使用XPath的想法不会起作用。

enter image description here

经过一些html检查后,我确实在facebook商业信息页面上了解到,如果页面上有电子邮件,它将成为div中唯一具有" @的内容。 "符号。所以我的下一步是,"如果我能确定html中是否存在@符号怎么办?如果是的话,也许我可以从那个"中提取内容。这就是我现在所处的位置。我试图首先通过" @"确定电子邮件是否出现在页面上。符号,如果它存在,我想刮掉使用" @"的内容。符号。

我研究了以下方法:

email = driver.getPageSource().contains("@")

为了返回一个布尔值,关于@符号是否出现在页面上但是它没有用。

1 个答案:

答案 0 :(得分:1)

不要刮。只需使用GraphQL API即可。这并不难,请使用pip从GitHub安装facebook-sdk package

pip install git+https://github.com/pythonforfacebook/facebook-sdk.git 

然后register and configure your app获取应用ID和密码,然后运行以下代码:

from facebook import GraphAPI

APP_ID = '<your_app_id>'
APP_SECRET = '<your_app_secret>'

graph = GraphAPI(version=2.5)
graph.access_token = graph.get_app_access_token(APP_ID, APP_SECRET)

# sequence of page ids you want to retrieve emails for
pages = ('page1_id', 'page2_id', 'page3_id')

objects = graph.get_objects(pages, fields='name,emails')

for page in objects.values():
    print('{}: {}'.format(page['name'], ', '.join(page['emails'])))

这可以在您的Selenium应用旁边完成,无需进一步重组。

示例页面的演示:

>>> pages = ('alliancejjsandiego',)
>>> objects = graph.get_objects(pages, fields='emails,name')
>>> for page in objects.values():
...     print('{}: {}'.format(page['name'], ', '.join(page['emails'])))
...
Alliance Jiu-Jitsu San Diego: info@alliancesandiego.com