将打开关闭的 Google Chrome 浏览器添加到 Selenium linkedin_scraper 代码中

2024-05-09

我正在尝试抓取一些知名人士的 LinkedIn 个人资料。该代码获取一堆 LinkedIn 个人资料 URL,然后使用Selenium and scrape_linkedin收集信息并将其作为 .json 文件保存到文件夹中。

我遇到的问题是 LinkedIn 自然会阻止抓取工具收集一些个人资料。我总是能够获取 URL 列表中的第一个配置文件。我将其归结为以下事实:它会打开一个新的 Google Chrome 窗口,然后转到 LinkedIn 页面。 (不过,在这一点上我可能是错的。)

我想做的是在 for 循环中添加一行,该行打开一个新的 Google Chrome 会话,一旦抓取工具收集了数据,就关闭 Google Chrome 会话,以便在循环中的下一次迭代中它将打开一个新的新的 Google Chrome 会话。

来自包网站here https://github.com/austinoboyle/scrape-linkedin-selenium它指出:

driver {selenium.webdriver}: driver type to use
default: selenium.webdriver.Chrome

查看 Selenium 包网站here https://selenium-python.readthedocs.io/getting-started.html#simple-usage I see:

driver = webdriver.Firefox()
...
driver.close()

所以Selenium确实有一个close() option.

如何在 for 循环中添加打开和关闭 Google Chrome 浏览器?

我尝试过其他方法来尝试收集数据,例如更改time.sleep()到 10 分钟,改变scroll_increment and scroll_pause但在收集第一个配置文件后,它仍然不会下载整个配置文件。

Code:

from datetime import datetime
from scrape_linkedin import ProfileScraper
import pandas as pd
import json
import os
import re
import time

my_profile_list = ['https://www.linkedin.com/in/williamhgates/', 'https://www.linkedin.com/in/christinelagarde/', 'https://www.linkedin.com/in/ursula-von-der-leyen/']
# To get LI_AT key
# Navigate to www.linkedin.com and log in
# Open browser developer tools (Ctrl-Shift-I or right click -> inspect element)
# Select the appropriate tab for your browser (Application on Chrome, Storage on Firefox)
# Click the Cookies dropdown on the left-hand menu, and select the www.linkedin.com option
# Find and copy the li_at value
myLI_AT_Key = 'INSERT LI_AT Key'
with ProfileScraper(cookie=myLI_AT_Key, scroll_increment = 50, scroll_pause = 0.8) as scraper:
    for link in my_profile_list:
        print('Currently scraping: ', link, 'Time: ', datetime.now())
        profile = scraper.scrape(url=link)
        dataJSON = profile.to_dict()
        
        profileName = re.sub('https://www.linkedin.com/in/', '', link)
        profileName = profileName.replace("?originalSubdomain=es", "")
        profileName = profileName.replace("?originalSubdomain=pe", "")
        profileName = profileName.replace("?locale=en_US", "")
        profileName = profileName.replace("?locale=es_ES", "")
        profileName = profileName.replace("?originalSubdomain=uk", "")
        profileName = profileName.replace("/", "")
        
        with open(os.path.join(os.getcwd(), 'ScrapedLinkedInprofiles', profileName + '.json'), 'w') as json_file:
            json.dump(dataJSON, json_file)
            time.sleep(10)
            
print('The first observation scraped was:', my_profile_list[0:])
print('The last observation scraped was:', my_profile_list[-1:])
print('END')

这是打开和关闭选项卡/浏览器的方法。

from datetime import datetime
from scrape_linkedin import ProfileScraper
import random                       #new import made
from selenium import webdriver      #new import made
import pandas as pd
import json
import os
import re
import time



    
my_profile_list = ['https://www.linkedin.com/in/williamhgates/', 'https://www.linkedin.com/in/christinelagarde/',
                   'https://www.linkedin.com/in/ursula-von-der-leyen/']

myLI_AT_Key = 'INSERT LI_AT Key'

for link in my_profile_list:

    my_driver = webdriver.Chrome()  #if you don't have Chromedrive in the environment path then use the next line instead of this
    #my_driver = webdriver.Chrome(executable_path=r"C:\path\to\chromedriver.exe")
    #sending our driver as the driver to be used by srape_linkedin
    #you can also create driver options and pass it as an argument
    ps = ProfileScraper(cookie=myLI_AT_Key, scroll_increment=random.randint(10,50), scroll_pause=0.8 + random.uniform(0.8,1),driver=my_driver)  #changed name, default driver and scroll_pause time and scroll_increment made a little random
    print('Currently scraping: ', link, 'Time: ', datetime.now())
    profile = ps.scrape(url=link)       #changed name
    dataJSON = profile.to_dict()

    profileName = re.sub('https://www.linkedin.com/in/', '', link)
    profileName = profileName.replace("?originalSubdomain=es", "")
    profileName = profileName.replace("?originalSubdomain=pe", "")
    profileName = profileName.replace("?locale=en_US", "")
    profileName = profileName.replace("?locale=es_ES", "")
    profileName = profileName.replace("?originalSubdomain=uk", "")
    profileName = profileName.replace("/", "")

    with open(os.path.join(os.getcwd(), 'ScrapedLinkedInprofiles', profileName + '.json'), 'w') as json_file:
        json.dump(dataJSON, json_file)
        time.sleep(10 + random.randint(0,5))    #added randomness to the sleep time
    #this will close your browser at the end of every iteration
    my_driver.quit()


print('The first observation scraped was:', my_profile_list[0:])
print('The last observation scraped was:', my_profile_list[-1:])
print('END')

该刮刀默认使用Chrome作为浏览器,还可以自由选择您想要在所有可能的地方使用的浏览器,例如CompanyScraper, ProfileScraper, etc.

我刚刚更改了在初始化时传递的默认参数ProfileScrapper()类并让您的驱动程序运行浏览器并关闭它而不是默认浏览器,按照您的要求在等待/睡眠间隔中添加一些随机时间(您可以根据您的需要调整它。您可以更改Random Noise我已经增加了你的舒适度。

没有必要使用scrape_in_parallel()正如我在评论中所建议的,但如果您愿意,您可以定义浏览器实例的数量(num_instances)你想与你自己的驱动程序字典一起运行,也有它自己的选项(在另一个字典中):

from scrape_linkedin import scrape_in_parallel, CompanyScraper
from selenium import webdriver

driver1 = webdriver.Chrome()
driver2 = webdriver.Chrome()
driver3 = webdriver.Chrome()
driver4 = webdriver.Chrome()

my_drivers = [driver1,driver2,driver3,driver4]
companies = ['facebook', 'google', 'amazon', 'microsoft', ...]

driver_dict = {}
for i in range(1,len(my_drivers)+1):
    driver_dict[i] = my_drivers[i-1]

#Scrape all companies, output to 'companies.json' file, use 4 browser instances
scrape_in_parallel(
    scraper_type=CompanyScraper,
    items=companies,
    output_file="companies.json",
    num_instances=4,
    driver= driver_dict
)

它是开源代码,并且由于它仅用 Python 编写,因此您可以非常轻松地理解源代码。这是一个非常有趣的刮刀,谢谢你让我知道它!

NOTE:
正如 GitHub 问题选项卡中所述,此模块中有一些未解决的问题。如果我是你,如果这不能正常工作,我会等待更多的分叉和更新。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将打开关闭的 Google Chrome 浏览器添加到 Selenium linkedin_scraper 代码中 的相关文章

  • 从框架中获取可调用对象

    给定框架对象 由sys getframe http docs python org library sys html sys getframe 例如 我可以获得底层的可调用对象吗 代码解释 def foo frame sys getfram
  • 从 Python 中的 message_from_string() 获取发件人地址

    有人可以告诉我如何在Python中从email message from string 获取发件人地址吗 谢谢 我试过 message email message from string email text from message Fr
  • Django 营业时间

    我想添加诊所的营业时间 我已经对此进行了调查在 Django 中实现 开放时间 的任何现有解决方案 https stackoverflow com questions 8128143 any existing solution to imp
  • 用于读取类似 CSV 行的 Python 正则表达式

    我想解析传入的类似 CSV 的数据行 值用逗号分隔 逗号周围可能有前导和尾随空格 并且可以用 或 引用 例如 这是有效的行 data1 data2 data3 data4 data5 但这是格式错误的 data1 data2 da ta3
  • 在 ubuntu 中卸载 python 模块

    我必须删除一个名为 django 的 python 模块 一种流行的模块 因为我安装了错误的版本 1 3 py 2 6 中的 beta 如何卸载这个模块 请解释一下 因为我只在 Windows 中使用过 python 而从未在 Ubuntu
  • FastAPI UploadFile 与 Flask 相比慢

    我创建了一个端点 如下所示 app post report upload def create upload files files UploadFile File try with open files filename wb as wf
  • 如何用pygame画一条虚线?

    我需要在坐标系上绘制正弦波和余弦波 就像在this https i stack imgur com DGI8g png图片 除了没能代表以外 我所有的工作都做得很好虚线和曲线与 pygame 一致 我有与我需要的类似的东西 但我怎样才能让它
  • 清理 MongoDB 的输入

    我正在为 MongoDB 数据库程序编写 REST 接口 并尝试实现搜索功能 我想公开整个 MongoDB 接口 我确实有两个问题 但它们是相关的 所以我将它们放在一篇文章中 使用 Python json 模块解码不受信任的 JSON 是否
  • 在Python中,如何通过去掉括号和大括号来打印Json

    我想以一种很好的方式打印 Json 我想去掉方括号 引号和大括号 只使用缩进和行尾来显示 json 的结构 例如 如果我有一个像这样的 Json A A1 1 A2 2 B B1 B11 B111 1 B112 2 B12 B121 1
  • 按升序对数字字符串列表进行排序

    我创建了一个SQLite https en wikipedia org wiki SQLite数据库有一个存储温度值的表 第一次将温度值按升序写入数据库 然后 我将数据库中的温度值读入列表中 然后将该列表添加到组合框中以选择温度 效果很好
  • Flask 和 Reactjs 抛出 JSX 转换错误

    我已经开始将 ReactJS 与 Python Flask 后端结合使用 通过 Flask 渲染模板时 我在 Chrome 控制台中收到以下客户端错误 错误 找不到模块 jstransform visitors es6 templates
  • 如何在使用 Flask for Python 3 的同时使用 Bootstrap 4?

    我检查过 发现默认安装时 Flask Bootstrap 原生使用 Bootstrap 3 3 7 但实际上我想通过使用 Flask Bootstrap 包在我的项目中使用 Bootstrap 4 任何有关如何更新它或类似内容的帮助将不胜感
  • numpy 向量化而不是 for 循环

    我用 Python 写了一些代码 运行良好 但速度很慢 我认为是由于 for 循环 我希望可以使用 numpy 命令加速以下操作 让我定义目标 假设我有一个 2D numpy 数组all CMs尺寸row x col 例如考虑一个6x11数
  • 哈希 freezeset 与排序元组

    在 Python 中 给定一组可比较的 可散列的元素s 散列是否更好frozenset s or tuple sorted s 这取决于你在做什么 创建一个更快frozenset 比排序tuple but frozenset占用的内存比tu
  • PySpark DataFrame 上分组数据的 Pandas 式转换

    如果我们有一个由一列类别和一列值组成的 Pandas 数据框 我们可以通过执行以下操作来删除每个类别中的平均值 df DemeanedValues df groupby Category Values transform lambda g
  • 我应该在哪里对对象和字段进行 django 验证?

    我正在创建一个 Django 应用程序 它使用 Django Rest Framework 和普通的 django views 作为用户的入口点 我想对模型的独立字段以及整个对象进行验证 例如 字段 根据正则表达式函数输入的车牌是否正确 与
  • 从 SUDS 中的 SOAP 响应中提取 Cookie

    我必须使用具有多种服务的 API 所有这些都需要来自下面的身份验证的 JSESSION cookie 然而 当我调用下一个服务时 它不会保留 cookie 因此会拒绝它们 from suds client import Client url
  • 从函数在 python 3 中创建全局变量

    我想知道为什么在函数结束后我无法访问变量 variable for raw data 代码是这样的 def htmlfrom Website URL import urllib request response urllib request
  • 阻止 BeautifulSoup 将我的 XML 标签转换为小写

    我正在使用 BeautifulStoneSoup 来解析 XML 文档并更改一些属性 我注意到它会自动将所有 XML 标签转换为小写 例如我的源文件有
  • 如何从 Anaconda 更新 Pandas 以及最后是否可以使用 eclipse

    我已经使用以下文档通过 Anaconda 安装了 Python http www kevinsheppard com images 0 09 Python introduction pdf http www kevinsheppard co

随机推荐

  • 漏洞利用开发 - GETS 和 Shellcode

    试图了解更多有关利用开发和构建 shellcode 的信息 但遇到了一个我不明白背后原因的问题 为什么我无法运行 execve bin sh 等 shellcode 并生成可以与之交互的 shell 另一方面 我可以创建一个反向 bind
  • 实体框架在连接后返回不同的记录

    考虑我们有这两个实体和一个自定义对象 public class Entiy1 public int Id get set public int DestinationId get set public string Name get set
  • CSS 未在 Spring Boot 中加载

    我是 spring 框架工作和 spring boot 的新手 我正在尝试使用 CSS javascript js 添加静态 html 文件 文件结构是 我的 html 文件头看起来像这样
  • 静态文件配置不正确

    我已经在 Heroku 上部署了简单的博客应用程序 它运行在Django 1 8 4 我在静态文件方面遇到了一些问题 当打开我的应用程序时 我看到Application Error页面 所以我尝试调试它并发现当我提交到 Heroku 时它无
  • 用于开发/生产环境的备用 grunt.js 任务

    我真的很希望能够拥有一个开发 grunt 文件并使用相同的文件作为脚本的生产版本 我已经尝试过建议 但是当尝试调用 dev prod 参数时 我的脚本将会失败 我相信答案是针对旧版本的 grunt 或者可能是我正在使用的插件 module
  • Pip install 导致此错误“ cl.exe' failed with exit code 2 ”

    我已经阅读了有关此错误的所有其他问题 但令人沮丧的是 没有一个给出有效的解决方案 如果我跑pip install sentencepiece在命令行中 它给出了以下输出 src sentencepiece sentencepiece wra
  • Swift 4 使用随机密钥解码嵌套 JSON [重复]

    这个问题在这里已经有答案了 我是 Swift 4 的新手 正在尝试从 Wikipedia API 解码此 JSON 我正在努力定义一个结构 因为我发现的所有示例 教程都仅嵌套 1 2 层深度 除此之外 当其中一个密钥是随机的时 如何解码数据
  • 为什么 Internet Explorer 不喜欢这个 jQuery?

    在调试一些在 IE 中不起作用的 jQuery 时 我发现了以下错误消息 var item item itemArray itemIndex find a text trim Object doesn t support this prop
  • AngularJS - 转到上一个/下一个模式

    我正在使用 Angular 构建一个应用程序 其中有一个项目列表 使用 ng repeat 通过单击每个项目 我可以打开一个模式以查看更详细的描述 现在 为了切换到另一个模式 我必须关闭前一个模式 转到列表 然后单击打开另一个模式 我想在单
  • Rails 资产 - 保留许可证注释

    如何防止 Uglifier 删除某些文件中的某些注释 我希望缩小和压缩代码 但我也希望许可注释保持不变 来自 uglifyJS 的文档 nc or no copyright 默认情况下 uglifyjs 将在生成的代码中保留初始评论标记 假
  • 如何制作 HTML/CSS/JS 变色背景(如 Kahoot.it 那样)

    如何使用 html 和 css 以及可能的 javascript 制作类似于 waht 的颜色变化 褪色背景https kahoot it https kahoot it has 你应该学会检查和获取 keyframes bgcolor 0
  • 如何修改 GNUPlot 创建的饼图

    Input 我有一个myfile csv包含以下信息的文件 Shift Percentage Day Shift 39 94 Night Shift 60 06 GNU绘图处理 The myfile csv文件被送入pie chart ge
  • Android 可检查子菜单选项

    所以我有一个用于选项菜单项的子菜单 我想要一个可检查条目的列表 用户可以根据需要选择 取消选择多个条目 我无法解决的唯一问题是如何防止单击其中一个复选框时关闭选项菜单 我看到 PerformShortcut 有一个 FLAG PERFORM
  • 无法在 mysql 表中的值中使用破折号(-)[重复]

    这个问题在这里已经有答案了 我一直在尝试从 python 将数据插入 MYSQL 表 我的sql表中的字段是id token start time end time和no of trans 我想存储使用生成的令牌uuid4在令牌栏中 但由于
  • MVC Owin Identity 2 CheckPasswordAsync() 将不会执行

    我有两个问题似乎彼此相关 并且 stackoverflow 中的其他重复项都不能回答我的问题 First当 的时候PasswordSignInAsync方法执行它永远不会停止或抛出任何异常它只是继续执行 var result await S
  • iPhone模拟器的屏幕截图应用程序[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想知道有没有什么好的推荐iPhone模拟器截图的应用程序 我尝试过 iPhone 屏幕截图裁剪器等应
  • Windows 服务器上的 .htaccess 文件

    我进行了研究 发现我的 htaccess 文件无法在我的新 Windows 服务器上运行 我发现我应该使用 web config 我尝试了一下 但没有任何效果 然后我发现我可以使用 htaccess 文件 但我必须将其命名为其他名称 例如
  • 使用 with 的热切加载模型,但给它起了另一个名字 - Laravel 5.2

    是否可以使用 with 方法来使用预加载 但给它另一个名称 就像是 gt with documents as product documents documents as categories 我有一个可以是产品或类别的文档表 急切加载可以
  • Python 小数.InvalidOperation 错误

    当我运行这样的东西时 我总是收到此错误 from decimal import getcontext prec 30 b 2 3 Decimal b Error Traceback most recent call last File Te
  • 将打开关闭的 Google Chrome 浏览器添加到 Selenium linkedin_scraper 代码中

    我正在尝试抓取一些知名人士的 LinkedIn 个人资料 该代码获取一堆 LinkedIn 个人资料 URL 然后使用Selenium and scrape linkedin收集信息并将其作为 json 文件保存到文件夹中 我遇到的问题是