I\xc2\xb4m 尝试对网站进行多处理抓取,在其中我获取要从中获取信息的所有节点的列表,然后生成一个池,这样它就不会并行地逐一获取数据。我的代码如下:
\n\nfrom selenium import webdriver\nfrom selenium.webdriver.common.by import By\nfrom selenium.webdriver.support.ui import WebDriverWait\nfrom selenium.webdriver.support import expected_conditions as EC\nimport multiprocessing\n\ndef ResPartido(node):\n\n ft=node.find_element_by_css_selector(\'.status\').text\n if ft.strip()!=\'FT\': return\n hora=node.find_element_by_css_selector(\'.time\').text\n names=list()\n for nam in node.find_elements_by_xpath(\n \'.//td[contains(@style,"text-align")]/a[contains(@id,"team")]\'):\n name=nam.text\n if \'(N)\' in name:\n name=name.split(\'(N)\')[0]\n names.append(name)\n score=node.find_element_by_css_selector(\'.red\')\n\n return [hora,name,score.text]\n\nif __name__ == "__main__":\n\n browser=webdriver.Chrome()\n SOME CODE\n nodes=browser.find_elements_by_xpath(\n \'//tr[contains(@align,"center")]/following-sibling::tr[.//div[contains(@class,"toolimg")]]\')\n p = multiprocessing.Pool()\n\n p.map(ResPartido,nodes) <---Here is the error\n .......\n\n >>AttributeError: Can\'t pickle local object \'_createenviron.<locals>.encodekey\'\nRun Code Online (Sandbox Code Playgroud)\n\n我的 python 终端出现错误的图像
\n\n
检查文档,它说列表是可选择的对象,并且在主函数之前声明的函数也是如此,所以我不\xc2\xb4t明白使用多处理时我做错了什么。
\n所以,我的代码如下
import undetected_chromedriver.v2 as uc2
options = uc2.ChromeOptions()
browser=uc2.Chrome(options=options,enable_cdp_event=True,executable_path='/home/pablo/Escritorio/chromedriver')
Run Code Online (Sandbox Code Playgroud)
它会抛出以下错误
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot connect to chrome at 127.0.0.1:34959
from session not created: This version of ChromeDriver only supports Chrome version 100
Current browser version is 99.0.4844.84
Run Code Online (Sandbox Code Playgroud)
现在第一次发生这种情况时,我只是通过在 ubuntu 中运行来更新 chrome
sudo apt-get update
sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)
现在如果我这样做
google-chrome --version
>>Google Chrome 100.0.4896.60
Run Code Online (Sandbox Code Playgroud)
然而,完全相同的错误正在发生。为什么它指向不再存在的 chrome 版本?
我有一个 Raspberry Pi3,我的目标是在那里运行多个 python3 脚本作为专用服务器。到目前为止,我已经使用 pip3 安装了以下软件包
-numpy -pandas -scipy -python-Levenshtein -fuzzywuzzy
还有其他几个我认为与此案无关。问题是,当我实际运行脚本时,出现以下错误
File "/usr/lib/python3/dist-packages/thonny/backend.py", line 305, in _custom_import
module = self._original_import(*args, **kw)
File "/home/pi/.local/lib/python3.5/site-packages/scipy/special/__init__.py", line 641, in <module>
from ._ufuncs import *
File "/usr/lib/python3/dist-packages/thonny/backend.py", line 305, in _custom_import
module = self._original_import(*args, **kw)
ImportError: libf77blas.so.3: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
在行中
import scipy.stats as sp
Run Code Online (Sandbox Code Playgroud)
我已经谷歌搜索,到目前为止我尝试过
sudo apt-get install libatlas-base-dev
Run Code Online (Sandbox Code Playgroud)
这给了我一长串错误,例如 dpkg Warning: file is missing from package file list 'libdom4j-java'
丢失文件的列表很长,它是西班牙语的,但您可以通过包名了解其要点
Seleccionando el paquete …Run Code Online (Sandbox Code Playgroud) 好的,所以我一直打算使用 Telethon 用 Python 在电报上自动化一些事情,但我不确定我是否理解它的要点。
首先,您需要一个 api_id 和一个 api_hash。为此,您转到my.telegram并转到 API 开发工具。在那里你会收到一个代码到你的电报安卓手机,提交后,你会收到一个唯一的 id/hash。第一个问题,您发送此代码是为了生成一个需要的应用程序吗?
现在在python中,您可以按如下方式启动客户端。
from telethon import TelegramClient
api_id=12345
api_hash='abcdef12345ghij'
client=TelegramClient('name of the session',api_id,api_hash)
Run Code Online (Sandbox Code Playgroud)
您可以尝试连接客户端,但它可能会导致未授权或手机未注册,因此您可以使用 start ,这将决定是登录还是注册。在start中可以设置的参数中,有一个是force_sms (bool, optional)强制电报共享短信注册登录所需的代码。我的问题是,如果电话没有注册,还有什么其他方式可以使用电报?我的意思是,他们无法将其发送到移动应用程序,因为该手机没有。
如果电话未注册是可能的,这是否意味着您获得 ID/哈希的电话不一定与您创建客户端的电话相同?
由于此方法有回调,您可以输入发送到手机的代码并连接到电报。
另一种连接客户端的方法是使用StringSession. 我找到了这段代码:
from telethon.sync import TelegramClient
from telethon.sessions import StringSession
# Generating a new one
with TelegramClient(StringSession(), api_id, api_hash) as client:
print(client.session.save())
# Converting SQLite (or any) to StringSession
with TelegramClient(name, api_id, api_hash) as client:
print(StringSession.save(client.session))
# Usage
string = '1aaNk8EX-YRfwoRsebUkugFvht6DUPi_Q25UOCzOAqzc...'
with TelegramClient(StringSession(string), …Run Code Online (Sandbox Code Playgroud)