将信息添加到数据帧的 if 条件

2024-04-23

我需要创建一个包含以下列的数据框:

WEB | Country | Organisation

我从网站中提取这些信息:但是,有些网站的网站上没有任何信息。这导致我在更新数据框时遇到一些问题。不幸的是,该代码一次只能运行一个网站,否则会出现验证码。 请参阅下面的代码以了解各个输出:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd

    element=[]
    organisation=[]

    x=['stackoverflow.com'] # ['livevsfox.ca'] I would suggest to try first one, then the other one

    frame_dict={}

    
    element.append(x) # I am keeping this just because I'd like to consider a for loop in future
    
    chrome_options = webdriver.ChromeOptions()
                driver=webdriver.Chrome('path')
        
    response=driver.get('website/'+x) # here x should stackoverflow.com, then the other web
    
    try:
    
        wait = WebDriverWait(driver, 30)
        driver.execute_script("window.scrollTo(0, 1000)")
        
        try: 

            error = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,"section.selection div.container h2"))) # updated after answer from another post and comment below

        except: 
            continue

        # Country
        c = wait.until(EC.visibility_of_element_located((By.XPATH, "//div[text()='Company data']/../following-sibling::div/descendant::b[text()='Country']/../following-sibling::div"))).text
        country.append(c)   
        
        # Organisation
        try:
            org=wait.until(EC.visibility_of_element_located((By.XPATH, "//div[text()='Company data']/../following-sibling::div/descendant::b[text()='Organisation']/../following-sibling::div"))).text
            organisation.append(org)  
        except: 
            organisation.append("Data not available")

    except: 
      break

    driver.quit()

    frame_dict.update({'WEB': element, 'Organisation': organisation, 'Country': country}) 
    df=pd.DataFrame.from_dict(frame_dict)

该代码应该执行以下操作:

  • for x = stackoverflow.com(这只是工作网址的示例),打开chrome;如果有信息,则提取有关组织和国家的信息;如果没有,则将“Missing”添加到数据框中;退出铬;
  • for x = livevsfox.ca,打开chrome;如果有信息,则提取有关组织和国家的信息;如果没有,则添加“缺失”Organisation and Country列;退出铬。

那么预期的输出将是:

WEB                      Country      Organisation
stackoverflow.com          US       Stack Exchange, Inc.
livevsfox.ca             Missing       Missing

livevsfox.ca事实上,返回以下消息:

Sorry, livevsfox.ca could not be found or reached (error code 404)

当我查找 stackoverflow.com 时没有出现该消息。 由于 stackoverflow.com 有国家和组织,我可以在数据框中添加此信息,但我不能对 livevsfox.ca 执行相同的操作。 我认为可能的解决方案如下:

  • 检查是否h2 class元素包含上面的消息("Sorry, x could not be found or reached (error code 404)") :这意味着网络没有检测到信息;
  • 如果网络没有信息,则添加Missing (or NA,由您决定)在数据框中;
  • 否则,网络将在数据框中添加信息(所有者和国家/地区)。

我希望你能提供一些帮助。


我已经找到了解决这个问题的方法。

首先,我检测到h2 class元素如下:

  message = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,"section.section div.container h2"))).text

然后,我检查是否message包含特定文本;例如。

if 'Sorry,' in message:

如果是,那么我将该值附加到我将添加到数据框中的列表:

 organisation.append('Missing') 
 country.append('Missing')

Code:

try:

      message = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,"section.section div.container h2"))).text
      if 'Sorry,' in message: 
                    
        organisation.append('Missing') 
        country.append('Missing')
except: 
      continue
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将信息添加到数据帧的 if 条件 的相关文章

随机推荐

  • 在 ubuntu 上使用 Kurento 安装错误

    我已经浏览了 Stackoverflow 上的所有 Kurento 问题 之前似乎没有出现过这个错误 我已经根据安装指南安装了 Kurento 媒体服务器和 java 客户端示例 我正在运行媒体服务器 当我去运行客户端应用程序时 问题就出现
  • Scapy 和 rdpcap 函数

    我在用着rdpcapScapy 的函数读取 PCAP 文件 我还使用中描述的模块Scapy 中 HTTP 支持的链接 http blog sbarbeau fr 2011 06 http support in scapy html在我的例子
  • 无法导入...(没有所需的模块提供包)

    我正在关注本教程 https www martin helmich de en blog kubernetes crd client html 我初始化我的项目并通过以下方式获取依赖项 go mod init github com mart
  • 如何在 AWS Step Functions 中的数组内使用 jsonPath

    我正在编写一个 AWS 步骤函数 对于其中一个步骤 我希望调用一个接受数组作为输入之一的 lambda 但是 如果我尝试将 JsonPath 传递到数组中 我会得到 The value for the field arrayField mu
  • 将 Session 变量传递给名为 PHP 脚本的 ajax

    在我的 PHP 脚本中使用会话时 我想将会话变量传递给 PHP 调用的脚本 但是会话变量没有被调用 因为在 HTML 代码之后无法使用 session start 函数 我正在使用简单的 Javascript AJAX 请给我路径 我认为您
  • NSCollectionView:仅接受项目之间的拖动,而不接受拖动

    我有一个NSCollectionView已实施且工作良好 然而 当 拖动项目来重新排列它们 我只想接受拖动 物体之间 当前的行为是您可以在对象之间拖动 它会打开一个 空间 而且over一个东西 我希望下面的图片能更好地说明问题 例如 将项目
  • Jquery DatePicker 颜色周日红

    有没有办法在 Jquery Datepicker 中将星期日的颜色更改为红色 something datepicker beforeShowDay function date if date toString indexOf Sun 1 r
  • 创建默认为纪元时间的字段

    我需要为表创建一个时间戳字段 该表的行需要在一定时间后过期 如果我使用以下内容 timestamp TIMESTAMP DEFAULT NOW 它以人类可读的格式显示时间 如果我可以用纪元时间来显示时间 这样我就可以用秒来计算 那就容易多了
  • GetWindowTextA、GetWindowText 在编辑控件上返回空值

    我正在尝试从 C Java 的外部窗口列出并获取编辑控件的内容 不幸的是没有成功 当我调用 GetWindowText 或 GetWindowTextA 时 它在编辑控件上返回空值 我知道 GetWindowText GetWindowTe
  • 如何动态覆盖 Angular2 可注入服务?

    我有一个可注入服务 HttpRequestService 当没有服务器时我想用 MockHttpRequestService 替换它 因为我正在开发模式下运行 npm start 这个 MockHttpRequestService 将发回非
  • 网页编码,设置矛盾[重复]

    这个问题在这里已经有答案了 如果一个网页有 但http标头有 Content Type text html charset UTF 8 那么假设什么编码呢 在 HTML5 中 优先级定义为 用户浏览器设置 字节顺序标记 HTTP 标头 or
  • 片段交易动画完成后执行操作

    我想在动画完成后设置按钮可见性 这就是所谓的动画 android support v4 app FragmentTransaction fAnimation this getActivity getSupportFragmentManage
  • 消除具有反向关系且无主键的元组

    我试图根据下面的问题插入所有关系 我已经得到了从 A 到 C 的所有关系 根据下面的问题 但就我而言 我还得到了 C 与 A 的朋友 的记录 据我理解问题陈述 没有重复的友谊 我必须将友谊插入为 A 到 C 而不是反之亦然 要么我对问题理解
  • 错误“DocumentNotFoundError:找不到查询的文档”{_id:xxx}

    我克隆了对象 preventivo 当我运行此代码时 出现以下错误 节点 24548 UnhandledPromiseRejectionWarning 未处理的承诺拒绝 拒绝ID 1 DocumentNotFoundError 在模型 pr
  • 使用 Flask-Login 在 Flask 中获取“str”对象没有属性“is_authenticated”

    我正在尝试使用 Flask Login 设置 Flask 登录 我有一个供用户使用的 CouchDB 客户文档有一个称为 用户 的对象 class User UserMixin def init self user self name us
  • 包含 php 类时未找到该类

    我在 php 中有一个名为 SEO URL 的类 在那堂课上的某个时刻我有这个 class name cPath SEO URL return class name href 我得到 Fatal error Class cPath SEO
  • “仅”在暂存文件上运行 eslint

    我正在尝试使用预提交挂钩在提交发生之前检测 eslint 错误 我正在使用哈士奇和 lint staged 但它对 src 中的所有文件运行 lint 命令 而不仅仅是对暂存文件运行 lint 命令 这是我的 package json 文件
  • Android 的 BitmapFactory 解码函数

    我遇到问题 decodeStream功能 File cacheMap new File context getCacheDir test GIF if cacheMap exist FileInputStream is new FileIn
  • 并行调用一系列 Promise,但按顺序解决它们,而不等待其他 Promise 解决

    我有一系列的承诺 我想并行调用 但同步解析 我编写了这段代码来完成所需的任务 但是 我需要创建自己的对象QueryablePromise包裹原生Promise我可以同步检查它的已解决状态 有没有更好的方法来完成这个不需要特殊对象的任务 请注
  • 将信息添加到数据帧的 if 条件

    我需要创建一个包含以下列的数据框 WEB Country Organisation 我从网站中提取这些信息 但是 有些网站的网站上没有任何信息 这导致我在更新数据框时遇到一些问题 不幸的是 该代码一次只能运行一个网站 否则会出现验证码 请参