0
3 단계 재귀를 구현하여 URL의 시드 목록을 생성 한 다음 각 URL에서 정보를 스크랩했습니다. 내 시스템의 모든 코어를 활용하여 크롤링 속도를 높이려면 multiprocessing을 사용하고 싶습니다. 지금까지 구현 한 크롤러 코드는 다음과 같습니다.Python에서 멀티 프로세싱을 사용하여 Scrapy를 사용하여 수백만 개의 URL을 크롤링하는 방법?
# -*- coding: utf-8 -*-
import scrapy
from scrapy.selector import HtmlXPathSelector
from scrapy.http.request import Request
from CompanyInfoGrabber.Utility.utils import getAddress, getCompanyStatus, getDirectorDetail, getRegNumber
class CompanyInfoGrabberSpider(scrapy.Spider):
name = 'CompanyDetail'
allowed_domains = ['example.com']
start_urls = ['http://example.com']
def parse(self, response):
counter = 0
print("User Agent in parse() is : ", response.request.headers['User-Agent'])
hxp = HtmlXPathSelector(response)
URL_LIST = hxp.select('//sitemapindex/sitemap/loc/text()').extract()
print("URL LIST: ", URL_LIST)
for URL in URL_LIST[:2]:
next_page = response.urljoin(URL)
yield Request(next_page, self.parse_page)
def parse_page(self, response):
print("User Agent in parse_page is : ", response.request.headers['User-Agent'])
hxp = HtmlXPathSelector(response)
# create seed list of company-url
COMPANY_URL_LIST = hxp.select('//urlset/url/loc/text()').extract()
print("Company url: ", COMPANY_URL_LIST[:20])
"""
Here I want to use multiprocessing like this
pool = Pool(processes=8)
pool.map(parse_company_detail, COMPANY_URL_LIST)
"""
for company_url in COMPANY_URL_LIST[:5]:
next_page = response.urljoin(company_url)
yield Request(next_page, self.parse_company_detail)
def parse_company_detail(self, response):
COMPANY_DATA = dict()
print("User Agent in parse_company_page() is : ", response.request.headers['User-Agent'])
hxp = HtmlXPathSelector(response)
_ABOUT_ = ''.join(hxp.xpath('normalize-space(//div[@class="panel-body"]/text())').extract())
for node in hxp.xpath('//div[@class="panel-body"]//p'):
_ABOUT_ += ''.join(node.xpath('string()').extract())
COMPANY_DATA['About'] = _ABOUT_
# Get company data.
COMPANY_DATA = getDirectorDetail(COMPANY_DATA, hxp)
print("Dictionary: ", COMPANY_DATA)
return COMPANY_DATA
어떻게 URL의 시드 목록을 크롤링하기 위해 다중 처리를 사용할 수 있습니까? 미리 감사드립니다.
업데이트 : 내 질문 this 중복되지 않습니다. 여기에는 오직 하나의 거미 만 있습니다.
감사합니다,
옴 프라 카시
(https://stackoverflow.com/questions/31087268/multiprocessing-of-scrapy-spiders-in-parallel-processes) ClémentDenoix @ –
, [병렬 프로세스의 Scrapy 거미의 멀티]의 가능한 중복 없음 그것은 중복이 아닙니다. 여기에 오직 하나의 거미 만 있습니다. –