【问题标题】:Using Selenium to scrape email addresses by checking for characters使用 Selenium 通过检查字符来抓取电子邮件地址
【发布时间】:2016-05-06 10:05:34
【问题描述】:

我一直在尝试从 Facebook 业务信息页面中抓取电子邮件地址,例如: Facebook Business Page Example

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

经过一些 html 检查后,我确实在 facebook 业务信息页面上了解到,如果页面上存在电子邮件,它将是 div 中唯一具有“@”符号的内容。所以我的下一个想法是,“如果我可以确定 html 中是否存在 @ 符号怎么办?如果是,也许我可以从中提取内容”。所以这就是我现在的立场。我试图首先通过“@”符号确定页面上是否存在电子邮件,如果存在,我想抓取使用“@”符号的内容。

我研究了以下方法:

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

为了返回一个关于页面上是否存在@符号但它不起作用的布尔值。

【问题讨论】:

  • 为什么不直接使用 Facebook 的 GraphQL 呢?它包括an emails field for Pages
  • 我应该从一开始就这样做,但现在我已经开发了大部分其他功能,我觉得我还不如完成我开始的工作
  • Facebook TOS 明确禁止抓取;被抓到时,他们会很乐意为您完成访问。
  • 我知道,它只会在有限的时间内。
  • 可惜。您只需发送至register for an access token,然后使用 GET 发送至http://graph.facebook.com/v2.5/<page_id>?fields=emails 即可将您的电子邮件列在一个页面上,或者使用http://graph.facebook.com/v2.5/?ids=<page1_id>,<page2_id>,<page_3_id>&fields=emails 一次获得多个页面的相同信息。这如此简单

标签: python facebook selenium xpath web-scraping


【解决方案1】:

不要刮。只需使用 GraphQL API。这一点都不难,用pip从GitHub安装facebook-sdk package

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

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-04-09
  • 2019-12-29
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 2013-09-07
相关资源
最近更新 更多