미리 도움을 주셔서 감사합니다. 저는 Python에 익숙하지 않고 스레딩 모듈을 사용하여 NY Daily News 사이트에서 URL을 긁어 모으려고합니다. 나는 다음을 함께 쓰고 스크립트는 폐기하고 있지만 이전보다 빠르지는 않은 것 같아서 스레딩이 발생하고 있는지 잘 모르겠습니다. 그게 있으면 알려주실 수 있습니까? 내가 말할 수 있도록 쓸 수 있을까요? 또한 스레딩에 대한 다른 팁도 있습니다.이것은 실제로 URL을 긁어 내기 위해 스레딩을 사용하고 있습니까?
감사합니다.
from bs4 import BeautifulSoup, SoupStrainer
import urllib2
import os
import io
import threading
def fetch_url():
for i in xrange(15500, 6100, -1):
page = urllib2.urlopen("http://www.nydailynews.com/search-results/search-results-7.113?kw=&tfq=&afq=&page={}&sortOrder=Relevance&selecturl=site&q=the&sfq=&dtfq=seven_years".format(i))
soup = BeautifulSoup(page.read())
snippet = soup.find_all('h2')
for h2 in snippet:
for link in h2.find_all('a'):
logfile.write("http://www.nydailynews.com" + link.get('href') + "\n")
print "finished another url from page {}".format(i)
with open("dailynewsurls.txt", 'a') as logfile:
threads = threading.Thread(target=fetch_url())
threads.start()
몇 개의 URL을 긁으려고합니까? NYDN이 자신의 사이트에서 500 개 이상의 병렬 요청을 실행하고 싶다고 생각합니까? –
이 코드는 ** 하나의 스레드 ** (메인 스레드 제외)를 사용하여 URL을 긁습니다. 그건 도움이되지 않을거야. URL 당 별도의 스레드 * 사용 *. –
URL 당 별도의 스레드를 사용하여 긁어 모으는 경우 로그 파일에 쓰기 위해 일종의 잠금을 구현해야합니다. 일종의 동시성 제어없이 별도의 스레드에서 파일에 쓸 수는 없습니다. "프로그래머가 문제를 겪었습니다."그는 프로그래머가 문제가 있다고 생각했는데, '실감 난다. 실감 난다. 문제가있다.'* –