使用headless浏览器在Linkedin上搜索公共可用的工作

linkedin-jobs-scraper的Python项目详细描述


linkedin工作刮板

Scrape public available jobs on Linkedin using headless browser. For each job, the following fields are extracted: job_id, link, apply_link, title, company, place, description, description_html, date, seniority_level, job_function, employment_type, industries.

目录

要求

安装

安装程序包:

pip install linkedin-jobs-scraper

使用

^{pr2}$

匿名与身份验证会话

默认情况下,scraper将以匿名模式运行(不需要身份验证)。在某些环境中(如AWS或Heroku) 但这可能是不可能的。您可能会遇到以下错误消息:

Scraper failed to run in anonymous mode, authentication may be necessary for this environment.

在这种情况下,唯一可用的选项是使用经过身份验证的会话运行。所需步骤如下:

  1. 使用您选择的帐户登录LinkedIn。在
  2. 打开Chrome开发工具:

  1. 转到选项卡Application,然后从左面板选择Storage->;Cookies->;https://www.linkedin.com。在 主视图定位名为li_at的行并从列Value复制内容。在

  1. 使用步骤3中获得的值设置环境变量LI_AT_COOKIE,然后正常运行应用程序。 示例:
LI_AT_COOKIE=<your li_at cookie value here> python your_app.py

速率限制

在执行过程中,您可能会遇到以下速率限制警告:

[429] Too many requests. You should probably increase scraper "slow_mo" value or reduce concurrency.

这意味着您超过了服务器允许的每秒请求数(尤其是在 在速率限制更严格的情况下使用经过身份验证的会话)。您可以通过以下方法克服此问题:

  • slow_mo参数尝试更高的值(这将减慢scraper的执行)。在
  • 减少max_workers的值以限制并发。我建议在authenticated中使用不超过一个worker 模式。在

过滤器

可以使用以下筛选器自定义查询:

  • 相关性:
    • RELEVANT
    • RECENT
  • 时间:
    • DAY
    • WEEK
    • MONTH
    • ANY
  • 类型:
    • FULL_TIME
    • PART_TIME
    • TEMPORARY
    • CONTRACT
  • 经验水平:
    • INTERNSHIP
    • ENTRY_LEVEL
    • ^{cd22}
    • MID_SENIOR
    • DIRECTOR

有关详细信息,请参见以下示例:

fromlinkedin_jobs_scraper.queryimportQuery,QueryOptions,QueryFiltersfromlinkedin_jobs_scraper.filtersimportRelevanceFilters,TimeFilters,TypeFilters,ExperienceLevelFiltersquery=Query(query='Engineer',options=QueryOptions(locations=['United States'],optimize=False,limit=5,filters=QueryFilters(relevance=RelevanceFilters.RECENT,time=TimeFilters.MONTH,type=[TypeFilters.FULL_TIME,TypeFilters.INTERNSHIP],experience=[ExperienceLevelFilters.INTERNSHIP,ExperienceLevelFilters.MID_SENIOR],)))

公司过滤器

也可以使用LinkedIn上的上市公司工作网址按公司进行筛选。要找到此url,您必须:

  1. 使用您选择的帐户登录LinkedIn。在
  2. 转到你感兴趣的公司的LinkedIn页面(例如https://www.linkedin.com/company/google)。在
  3. 单击左菜单中的jobs。在

  1. 向下滚动并找到See all jobsSee jobs按钮。在

  1. 右键单击并复制链接地址(或导航链接并从地址栏复制)。在
  2. 将链接地址粘贴到代码中,如下所示:
query=Query(options=QueryOptions(filters=QueryFilters(# Paste link belowcompany_jobs_url='https://www.linkedin.com/jobs/search/?f_C=1441%2C17876832%2C791962%2C2374003%2C18950635%2C16140%2C10440912&geoId=92000000',)))

测井

可以使用命名空间li:scraper检索包记录器。默认级别是INFO。 可以使用环境变量LOG_LEVEL或在代码中更改记录器级别:

importlogging# Change root logger level (default is WARN)logging.basicConfig(level=logging.DEBUG)# Change package logger levellogging.getLogger('li:scraper').setLevel(logging.DEBUG)# Optional: change level to other loggerslogging.getLogger('urllib3').setLevel(logging.WARN)logging.getLogger('selenium').setLevel(logging.WARN)

许可证

MIT License

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用jsoup获取标题属性   将非常大的变量从Java应用程序传递到Javascript   java lwjgl在创建字体对象时冻结   java Anylogic无法解析或不是字段   使用Java SWT在透明图像上绘制图形   java在ArrayList中查找<String>   库存管理系统上的java更新按钮不工作,MySQL,Netbeans   正则表达式如何在java中查找较大字符串中字符串s的匹配项   java在另一个片段中使用Firestore回调   java Spring AOP和AspectJ使用相同的方法   java@xmlanyement和@xmlementrefs   java Swing转换比例变更单错位   java解析XML后,应该使用哪种数据结构来存储XML的不同标记值   使用Java/Spring引导的云本地BuildPack/Paketo:如何配置不同的JDK下载uri(例如,无法访问github.com)