使用Voyager API的废料LinkedIn公司数据
#编程 #开源 #python #scraping

什么是LinkedIn报废?

LinkedIn scraping是使用自动脚本或工具从LinkedIn网站中提取数据的过程。它涉及从个人资料,公司页面,职位发布和其他公开可用数据中收集信息。

另一方面,Web刮擦涉及通过发送HTTP请求并从HTML内容中提取特定信息来自动收集数据。

注意:但是,违反LinkedIn的服务条款可能会导致账户暂停,IP阻止或法律诉讼。

审查网站的服务条款和API使用指南对于避免法律或道德问题至关重要。

什么是Voyager的REST API?

Voyager的REST API使开发人员能够将企业应用程序与地理空间搜索平台集成在一起。它提供了一个基于Web的接口,用于探索和与Voyager的数据和服务进行交互。

Voyager提供两种类型的 Open 接口:XML http和Restful Apis。 LinkedIn developed Voyager-API,一种新的API服务,可为Web和移动应用提供更弹性的平台基于播放框架和GraphQl查询语言。

如何获得JSessionId和CSRF代币:

jSessionId:用户访问网站时,Web服务器会生成一个唯一的标识符,称为 jsessionId。

  • 通常将其保存在用户用作cookie的网络浏览器中,并与以后的请求一起发送以识别用户的会话。
  • jsessionId 可以通过在访问页面时查看浏览器开发人员工具中的cookie来获得。
  • 寻找带有“ jsessionId”或类似内容的cookie。请记住,某些网站可能会使用不同的cookie名称进行会话跟踪。

CSRF代币 CSRF 令牌(跨站点请求伪造令牌)是防止敌对网站发送未授权的请求的安全措施。

  • 执行发布,放置或删除Web服务的请求时经常有必要。
  • 获得 CSRF 令牌的方法根据网站或在线服务而有所不同。在其他情况下,令牌隐藏在网页的表单中,可以使用网络刮擦技术提取。
  • 在执行初始访问Web服务时,可以在响应标头中发送 CSRF 令牌。在这种情况下,代币可以从响应标题中提取并根据需要在后续请求中使用。

使用 Python 模块进行HTTP请求。

  1. 它导入请求库,这是一个著名的Python模块,用于执行HTTP请求。
  1. 它将用户代理字符串分配给标题变量。用户代理标识了客户端请求的客户端类型。
  1. 它定义了持有业务信息API端点URL的变量Company_link。 URL似乎是linkedin.com/voyager/api/entities/companies..的形式,其中公司的特定实体ID更改了Company_ID。
  1. 脚本然后构建requests.session()对象,该对象可以启用持久的会话和cookie设置。
  1. 它使用S.Cookies属性来设置会话所需的cookie(li_at和jsessionId)。使用LinkedIn API时,可能需要这些cookie进行身份验证或许可。
  1. 脚本设置了会话的用户代理和CSRF代币标题来模拟标准的Web浏览器请求。
  1. 它使用会话对象s.get(company_link)将http get呼叫发送到company_link url。
  1. API答案已被收到,看起来是JSON格式。
  1. 然后将JSON响应处理为Python词典,该脚本发布了字典的内容,其中包含诸如员工计数,网站URL,公司类型,行业,描述等的公司信息。
def getdatafromvoyagerlinkedin(company_id):
    headers = {"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36",
               }

    company_link = f'https://www.linkedin.com/voyager/api/entities/companies/{company_id}'

    with requests.session() as s:
        s.cookies['li_at'] = "AQEDATf5D_XXXXXXXXXXXXXXu"
        s.cookies["JSESSIONID"] = "ajax:1XXXXXXXXXXXXXX0"
        s.headers = headers
        s.headers["csrf-token"] = s.cookies["JSESSIONID"].strip('"')
        response = s.get(company_link)
        response_dict = response.json()
        return response_dict


print(getdatafromvoyagerlinkedin(16198870))
# Output
#{'employeeCountRange': '11-50',
 #'specialties': ['Web Development', 
#'Mobile App Development', 'Web Design', 
#'Node', 'Flutter', 'Ionic', 'AWS', 'Digital Ocean', 'Laravel', 'WordPress', 
#'React Native', 'React JS experts', 'PHP development', 'PrestaShop', 'OpenCart',
# 'SEO and SEM', 'Joomla'],
 #'entityUrn': 'urn:li:fs_company:16198870', 
#'websiteUrl': 'https://www.bytescrum.com', 
#'companyType': 'Privately Held', 'foundedDate': {'year': 2017}, 
#'entityInfo': {'objectUrn': 'urn:li:company:16198870',
#'trackingId': 'ymxYkL2eSUSOWQIt+Mn3xQ=='}, 
#'industries': ['Information Technology and Services'],
 #'description': 'ByteScrum taps into its strong business acumen to find solutions to the unique set of challenges and constraints imposed by each new project and delivers solutions that fill performance gaps. 
#Our founders understood for the first time how good software development services can transform the needs of entire business communities, especially emerging technologies.
# We have a proven track record of successfully meeting deadlines and executing the most complex projects within budget while consistently maintaining the highest quality.\n\nOur specialities:\n\n● Mobile app development
 #(Android and iOS)\n● Web app development (MERN, MEAN, Vue JS, PHP, Laravel, WordPress)\n● Custom Software development\n● Web designing (PSD to HTML/WordPress)\n● Api integration \n● 
#CMS development\n● Web and app service integration\n● SEO and SEM services\n\nContact Us:\nhttps://www.bytescrum.com/contact-us/', 
#'basicCompanyInfo': {'headquarters': 'Lucknow',
 #'followingInfo': {'entityUrn': 'urn:li:fs_followingInfo:urn:li:company:16198870', 
#'dashFollowingStateUrn': 'urn:li:fsd_followingState:urn:li:fsd_company:16198870', 'following': False, 'trackingUrn': 'urn:li:company:16198870', 'followingType': 'DEFAULT'},
# 'miniCompany': {'objectUrn': 'urn:li:company:16198870', 'entityUrn': 'urn:li:fs_miniCompany:16198870', 'name': 'ByteScrum Technologies Private Limited',
# 'showcase': False, 
#'active': True,
# 'logo': {'com.linkedin.common.VectorImage': {'artifacts': [{'width': 200, 'fileIdentifyingUrlPathSegment': '200_200/0/1653201669588?e=1698883200&v=beta&t=GE_5HHCt3u_xxKWDV1d3KmNBx0-AJXvIyjkIxSaXp-E',
# 'expiresAt': 1698883200000, 'height': 200}, {'width': 100, 'fileIdentifyingUrlPathSegment': '100_100/0/1653201669588?e=1698883200&v=beta&t=rbIH_vzfS4YkrOV-inNhuY9XXdbj28K9l4ZY_4-I41o', 
#'expiresAt': 1698883200000, 'height': 100}, {'width': 400, 'fileIdentifyingUrlPathSegment':
# '400_400/0/1653201669588?e=1698883200&v=beta&t=rARzTyswXT1D9vObNkCAh9ljFivi4r6T0QxC_WwLVvQ', 'expiresAt': 1698883200000, 'height': 400}], 
#'rootUrl': 'https://media.licdn.com/dms/image/C4D0BAQHzTgUzh6WpUw/company-logo_'}}, 'universalName': 'bytescrum', 'dashCompanyUrn': 'urn:li:fsd_company:16198870', 
#'trackingId': 'XXXXXXXXXXXXXXXXX'}}}

LinkedIn现在为每个公司页面提供了独特的ID,从而易于发现。一旦拥有,请在代码中替换一个数字。

linkedin.com/voyager/api/entities/companies{company id}

结论

LinkedIn scraping和Web scraping 浏览两种从LinkedIn网站获取信息的方法。虽然LinkedIn scraping关注收集公开访问的数据,但网络刮擦与使用HTTP查询和HTML解析从网站中机械提取特定信息有关。

遵循LinkedIn的服务条款对于防止潜在的处罚(例如账户暂停或法律诉讼)至关重要。 Voyager's REST API enablesCorporate申请与其地理搜索引擎集成无缝。

JSessionID是由网站服务器提供的独特标识,而CSRF代币可以防止不需要的请求。两者都可以通过Web浏览器cookie,Web刮擦工具或响应标头访问。

了解数据提取法规和道德问题在处理网络刮擦和诸如Voyager之类的API时至关重要。

如果您发现这篇文章令人兴奋,请在Learnhub Blog上找到更多令人兴奋的帖子;我们编写从Cloud computingFrontend DevCybersecurityAIBlockchain的所有技术。

ByteScrum

中剔除

资源