0

beautifulsoup를 사용하여 웹 스크래핑을 수행하고 구문 분석 된 데이터를 CSV 파일에 성공적으로 저장했지만 다중 처리를 사용하기 위해 프로세스의 속도를 높이고 싶습니다. 그러나 스크립트에서 다중 처리를 적용한 후에는 아무런 차이가 없습니다. 여기파이썬 웹 스크랩에서 돌연변이 처리가 작동하지 않음

rootPath = '....' 
urlp1 = "https://www.proteinatlas.org/" 

try: 
    df1 = pd.read_csv(rootPath + "cancer_list1_2(1).csv", header=0); 
except Exception as e: 
    print("File " + f + " doesn't exist") 
    print(str(e)) 
    sys.exit() 

cancer_list = df1.as_matrix().tolist() 
# [["bcla_gene","beast+cancer"], ...] 

URLs = [] 
for cancer in cancer_list: 

    urlp2 = "/pathology/tissue/" + cancer[1] 
    f = cancer[0] 

    try: 
     df1 = pd.read_csv(rootPath + f + ".csv", header=0); 
    except Exception as e: 
     print("File " + f + " doesn't exist") 
     print(str(e)) 
     sys.exit() 
    ... # list of urls 

def scrap(url,output_path): 
    page = urlopen(URL) 
    soup = BeautifulSoup(page, 'html.parser') 
    item_text = soup.select('#scatter6001 script')[0].text 
    table = soup.find_all('table',{'class':'noborder dark'}) 
    df1 = pd.read_html(str(table),header = 0) 
    df1 = pd.DataFrame(df1[0]) 
    Number = soup.find('th',text = "Number of samples").find_next_sibling("td").text 


... 
#function of scraping 



if __name__ == "__main__": 

    Parallel(n_jobs=-1)(scrap(url,output_path) for url in URLs) 

그냥 코드를 업데이트 내 코드와 문제는 이제 CPU 사용률은 처음에 100 %에 도달 할 수 있지만, 곧 1 %로 떨어질 것입니다. 나는 그것에 대해 아주 혼란스러워합니다.

+0

하나의 스레드 만 시작하고 다중 프로세스는 시작하지 않습니다. – georgexsh

답변

0

코드에 아무런 세부 정보가없는 경우 : joblib 모듈을 사용하면 도움이 될 수 있습니다.

의사 코드 :

import joblib 

if __name__ == "__main__": 
     URLs = ["URL1", "URL2", "URL2", ...] 
     Parallel(n_jobs=-1)(scrap(url,output_path) for url in URLs) 

어떤 코드가 어떤 def:if __name__ == "__main__": -branch 외부에서 실행하지 않는 경우 JOBLIB 만 작동하기 때문에 코드를 리팩토링하는 것이 필요할 수있다.

n_jobs=-1은 시스템의 코어 수와 동일한 수의 프로세스를 시작합니다. 자세한 내용은 joblib의 documentation을 참조하십시오.

셀렌/geckodriver와 함께이 방법을 사용하면 컴퓨터에 따라 1 시간 미만 만에 10k 개의 URL 풀을 다룰 수 있습니다 (일반적으로 64GB RAM이있는 octacore 시스템에서 40-50 프로세스를 엽니 다).

+0

공유해 주셔서 감사합니다. 제안 된대로 코드를 수정 한 후에 모든 CPU가 사용되는 것을 볼 수 있지만 시작시에만 발생합니다. 프로그램을 실행할 때 CPU 사용률은 100 %이지만 곧 1 %로 떨어집니다. 이 문제를 해결하는 방법을 알고 있습니까? 감사. –

+0

질문을 편집하여 현재의 업데이트 된 코드의 환원적인 예가 포함되도록하십시오. – sudonym

+0

코드를 업데이트하기 만하면 언제든지 체크 아웃 할 수 있습니다. 감사 –