#python #pandas #multithreading #selenium #beautifulsoup
Вопрос:
Я написал код для проверки фрагмента текста на основе соскобленной информации, используя приведенный ниже код. Однако я не знаю, как выполнить многопоточное выполнение. Я действительно ценю любое предложение по решению этой проблемы.
Заранее спасибо.
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
import time
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
'referer': 'https://www.google.com/'
}
data = {'RefNo': [2001, 2002,2003,2004],
'link': ['https://www.google.com/search?amp;q=Python', 'https://www.google.com/search?amp;q=Java','https://www.google.com/search?amp;q=Visual Basic','https://www.google.com/search?amp;q=c']
}
df = pd.DataFrame (data, columns = ['RefNo','link'])
for index, row in df.iloc[0:].iterrows():
dr = webdriver.Chrome("/Users/synup/Desktop/Python/chromedriver")
dr.get(row['link'])
soup = BeautifulSoup(dr.page_source, 'html.parser')
for content in soup.find_all('div',attrs={"data-attrid":"subtitle"}):
if (content.text=='Programming language'):
print(row['RefNo'],row['link'])
dr.quit()
Комментарии:
1. Вы можете использовать concurrent.futures: docs.python.org/3/library/concurrent.futures.html .
2. Вот пример:
with ThreadPoolExecutor() as executor: future = executor.submit(function, parameters) print(future.result()) #prints the output
3. Спасибо @Kral. Я пробовал это, но я не знаю, как передать 2 столбца фрейма данных.
4. Вы можете попытаться передать их в виде tupe или списка:
executor.submit(function, [df])
. Я полагаю, что функция отправки также допускает несколько аргументов, таких как:submit(fn, /, *args, **kwargs)
5. Спасибо, что это сработало!