def stock_managers_info(stocks): # 提取信息的xpath name_xpath = "//td[@class='ccl'][1]/div/a" job_xpath = "//td[@class='ccl'][2]/div" start_xpath = "//td[@class='ccl'][3]/div" end_xpath = "//td[@class='ccl'][4]/div"
时间: 2023-12-21 21:05:43 浏览: 26
这段代码是在stock_managers_info函数中定义了四个变量,分别代表提取管理人员信息所需的xpath表达式。xpath是一种用于解析XML或HTML文档的语言,通过xpath可以方便地提取特定节点或属性的信息。
name_xpath变量代表管理人员姓名所在的xpath表达式,job_xpath变量代表管理人员职位所在的xpath表达式,start_xpath变量代表管理人员从业时间所在的xpath表达式,end_xpath变量代表管理人员离职时间所在的xpath表达式。
这些xpath表达式的具体实现需要根据具体的网页结构来确定。在这段代码中,这些xpath表达式是通过观察网页结构得到的,用于提取股票管理人员的相关信息。
相关问题
# stock_basic = pro.stock_basic() # 获取上市公司信息 stock_basic = pd.read_pickle("stock_basic.pkl") # 获取上市公司信息 stock_sample = stock_basic.sample(n=100, axis=0) # 随机抽取十家上市公司 file = "新浪财经上市公司高管任职数据.csv" df = stock_managers_info(stocks=stock_sample)
这段代码中的第一行被注释掉了,实际上是通过tushare库的pro接口获取所有上市公司信息,可以直接调用pro.stock_basic()方法。由于该方法需要在tushare官网上注册并获取token,因此这里使用了一个本地的pickle文件(stock_basic.pkl)来存储之前已经获取过的上市公司信息,以便于调试和运行。接着使用pandas库的sample()方法随机抽取了指定数量(100)的上市公司。最后调用stock_managers_info()函数,使用抽取的上市公司作为参数,获取这些公司的股票经理信息,并将其存储到一个名为“新浪财经上市公司高管任职数据.csv”的CSV文件中。
class MonitoringProcess: def __init__(self): self.conn1, self.conn2 = Pipe() self.monitor = True self.process_start(self.detection_status) def set_monitor(self): self.com_dict.monitor = False def process_start(self, func): with Manager() as manager: self.com_dict = manager.Namespace() p = Process(target=func, args=(self.com_dict,)) p.start() def detection_status(self, com_dict): # some code ... com_dict.a = 1 Process Process-2: Traceback (most recent call last): File "C:\Python38\lib\multiprocessing\managers.py", line 827, in _callmethod conn = self._tls.connection AttributeError: 'ForkAwareLocal' object has no attribute 'connection' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Python38\lib\multiprocessing\process.py", line 315, in _bootstrap self.run() File "C:\Python38\lib\multiprocessing\process.py", line 108, in run self._target(*self._args, **self._kwargs) File "F:\E\python_learn\我的框架\自动化框架2\monitoring.py", line 24, in detection_status com_dict.a = 1 File "C:\Python38\lib\multiprocessing\managers.py", line 1143, in __setattr__ return callmethod('__setattr__', (key, value)) File "C:\Python38\lib\multiprocessing\managers.py", line 831, in _callmethod self._connect() File "C:\Python38\lib\multiprocessing\managers.py", line 818, in _connect conn = self._Client(self._token.address, authkey=self._authkey) File "C:\Python38\lib\multiprocessing\connection.py", line 500, in Client c = PipeClient(address) File "C:\Python38\lib\multiprocessing\connection.py", line 702, in PipeClient _winapi.WaitNamedPipe(address, 1000) FileNotFoundError: [WinError 2] 系统找不到指定的文件。
这个错误通常是由于在多进程环境中使用了不支持共享的对象或属性导致的。`AttributeError: 'ForkAwareLocal' object has no attribute 'connection'` 错误表明在创建 `com_dict` 属性时出现了问题。
在你的代码中,你正在尝试在 `detection_status` 方法中给 `com_dict` 添加属性 `a`,但在多进程环境中,不能直接在命名空间对象上动态添加属性,因为它不是共享的。
要解决这个问题,你可以使用 `manager.dict()` 来创建一个共享的字典对象,然后在 `detection_status` 方法中使用该字典对象来添加属性。以下是修正后的示例代码:
```python
from multiprocessing import Process, Manager, Pipe
class MonitoringProcess:
def __init__(self):
self.conn1, self.conn2 = Pipe()
self.monitor = True
self.process_start(self.detection_status)
def set_monitor(self):
self.com_dict["monitor"] = False
def process_start(self, func):
with Manager() as manager:
self.com_dict = manager.dict()
p = Process(target=func, args=(self.com_dict,))
p.start()
def detection_status(self, com_dict):
# some code ...
com_dict["a"] = 1
```
在修正后的代码中,我们使用 `manager.dict()` 创建了一个共享的字典对象 `com_dict`。然后,在 `detection_status` 方法中,我们使用 `com_dict["a"] = 1` 的方式向字典中添加属性。
希望这次能够帮助你解决问题。如果还有其他疑问,请随时提问。