나는 scrapy의 CrawlSpider
스파이더 클래스를 사용하여 start_urls
목록을 반복하고 각 사이트의 내부 페이지를 크롤링하여 전자 메일 주소를 가져옵니다. 일치하는 전자 메일 목록과 함께 각 start_url에 대해 단일 (고유 한) 항목으로 파일을 내보내 려합니다. 이를 위해 make_requests_from_url
및 parse
메서드를 재정의해야하므로 응답의 메타 사전 (코드 참조)의 각 start_url 항목을 내부 페이지에 전달할 수 있습니다. 이 코드를 실행의 출력은 다음과 같습니다 그러나CrawlSpider에서 고유 항목 내보내기
www.a.com,['[email protected]']
www.a.com,['[email protected]','[email protected]']
www.a.com,['[email protected]','[email protected]','[email protected]']
, 난 단지 내보내기 파일은 위의 출력
(www.a.com,['[email protected],[email protected], [email protected]'])
에서 마지막 항목을 포함시킬는 것이 가능할까요?
코드 :
class MySpider(CrawlSpider):
start_urls = [... urls list ...]
def parse(self, response):
for request_or_item in CrawlSpider.parse(self, response):
if isinstance(request_or_item, Request):
request_or_item.meta.update(dict(url_item=response.meta['url_item']))
yield request_or_item
def make_requests_from_url(self, url):
# Create a unique item for each url. Append email to this item from internal pages
url_item = MyItem()
url_item["url"] = url
url_item["emais"] = []
return Request(url, dont_filter=True, meta = {'url_item': url_item})
def parse_page(self, response):
url_item = response.meta["url_item"]
url_item["emails"].append(** some regex of emails from the response object **)
return url_item
거미가 닫힐 때 메시지를 덤프하는 것은 어떨까요? –