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

Python 使用Selenium通过检查字符刮取电子邮件地址,python,facebook,selenium,xpath,web-scraping,Python,Facebook,Selenium,Xpath,Web Scraping,我一直在尝试从Facebook的商业信息页面中删除电子邮件地址,例如: 但是在正确地确定XPath时遇到了一些问题。后来我了解到Facebook的商业信息页面没有一致的xpath。XPath因企业而异,这意味着我目前使用XPath的想法行不通 然而,经过一些html检查后,我确实了解到,在facebook的商业信息页面上,如果页面上有电子邮件,那么它将是div中唯一带有@符号的内容。因此,我的下一个想法是,如果我能够确定html中是否存在@符号,该怎么办?如果是的话,也许我可以从中提取内容。这

我一直在尝试从Facebook的商业信息页面中删除电子邮件地址,例如:

但是在正确地确定XPath时遇到了一些问题。后来我了解到Facebook的商业信息页面没有一致的xpath。XPath因企业而异,这意味着我目前使用XPath的想法行不通

然而,经过一些html检查后,我确实了解到,在facebook的商业信息页面上,如果页面上有电子邮件,那么它将是div中唯一带有@符号的内容。因此,我的下一个想法是,如果我能够确定html中是否存在@符号,该怎么办?如果是的话,也许我可以从中提取内容。这就是我现在的立场。我试图首先通过@符号确定该电子邮件是否存在于页面上,如果存在,我想删除使用@符号的内容

为此,我研究了以下方法:

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

以返回一个布尔值,判断@符号是否出现在页面上,但它不起作用。

不要刮取。只需使用GraphQLAPI。这一点都不难,从GitHub安装带有pip的:

然后,要获取应用程序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'])))

为什么不直接使用Facebook的GraphQL呢?它包括。我从一开始就应该这样做,但现在我已经开发了大多数其他功能,我觉得我最好还是完成我启动的Facebook TOS特别禁止刮擦;当你被抓到的时候,他们会很乐意帮你完成访问。我知道,这只会是一段有限的时间。遗憾。你所需要的就是,然后用一个“到达”按钮http://graph.facebook.com/v2.5/?fields=emails 要获得一页的电子邮件列表,请使用http://graph.facebook.com/v2.5/?ids=,,&字段=一次获取多个页面的相同信息的电子邮件。这太容易了。
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'])))
>>> 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