2017-12-31 37 views
0

URL 목록을 가져 와서 크롤링하는 "Scrapy"패키지로 스파이더를 만들려고합니다. 나는 stackoverflow에 대한 답변을 검색했지만 문제를 해결할 수있는 것을 찾을 수 없습니다. 에서Python - Scrapy - URL 목록을 가져와 크롤링하는 크롤러 만들기

  • : 나는 인쇄 self.start_urls 동안 인쇄 다음과 같은 정보를 얻을

    Spider = Try(urls = [r"https://www.example.com"]) 
    process = CrawlerProcess({ 
    'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)' 
    }) 
    
    process.crawl(Spider) 
    process.start() 
    

    :

    class Try(scrapy.Spider): 
        name = "Try" 
    
        def __init__(self, *args, **kwargs): 
         super(Try, self).__init__(*args, **kwargs) 
         self.start_urls = kwargs.get("urls") 
         print(self.start_urls) 
    
        def start_requests(self): 
         print(self.start_urls) 
         for url in self.start_urls: 
          yield Request(url , self.parse) 
    
        def parse(self, response): 
         d = response.xpath("//body").extract() 
    

    내가 거미를 크롤링 할 때 다음과 같이

    내 스크립트입니다 화면에 인쇄 된 __init__ 기능은 다음과 같습니다. [r "https://www.example.com "] (거미에게 전달됨). 화면에 인쇄 된 start_requests 기능에

  • 입니다 : 없음

가 왜 없음을 얻을 수 있습니까? 이 문제에 접근 할 수있는 또 다른 방법이 있습니까? 또는 거미의 수업에 실수가 있습니까?

주어진 도움을 주셔서 감사합니다! 내가

process.crawl(Try, urls=[r"https://www.example.com"]) 

을 실행하면 내가 예상대로

+0

목록에 다른 이름을 사용하여 시작시 URL 유지 - 'self.start_urls'는'치료 '에서 사용되므로 제거 할 수 있습니다. 만약 당신이'self.start_urls'에'__init__'에 URL을 넣었다면 그것들을 사용할 것이고'start_requests'를 사용할 필요가 없을까요? – furas

+0

'process.crawl'은'from_crawler'를 호출 할 때 매개 변수없이 새로운 Try 객체를 생성합니다. 치료 소스 ​​코드의 크롤러 클래스를 참조하십시오. https://github.com/scrapy/scrapy/blob/master/scrapy/crawler.py#L101-L102 – matiskay

답변

0

다음은 Tryurls을 보낼 수 있습니다. 심지어 나는 start_requests이 필요하지 않습니다. 내가

spider = Try(urls = ["https://www.example.com"]) 

process.crawl(spider) 

를 사용하는 경우가 urls없이 Try 새로운 실행 한 후 목록이 비어처럼

import scrapy 

class Try(scrapy.Spider): 

    name = "Try" 

    def __init__(self, *args, **kwargs): 
     super(Try, self).__init__(*args, **kwargs) 
     self.start_urls = kwargs.get("urls") 

    def parse(self, response): 
     print('>>> url:', response.url) 
     d = response.xpath("//body").extract() 

from scrapy.crawler import CrawlerProcess 

process = CrawlerProcess({ 
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)' 
}) 
process.crawl(Try, urls=[r"https://www.example.com"]) 
process.start() 

는하지만 그것은 본다.

1

process.crawl에 스파이더 클래스를 사용하고 거기에 urls 매개 변수를 전달하는 것이 좋습니다. self.start_urls의 값을 할당 한 후 어디로

import scrapy 
from scrapy.crawler import CrawlerProcess 
from scrapy import Request 


class Try(scrapy.Spider): 
    name = 'Try' 

    def __init__(self, *args, **kwargs): 
     super(Try, self).__init__(*args, **kwargs) 
     self.start_urls = kwargs.get("urls") 

    def start_requests(self): 
     for url in self.start_urls: 
      yield Request(url , self.parse) 

    def parse(self, response): 
     d = response.xpath("//body").extract() 

process = CrawlerProcess({ 
    'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)' 
}) 

process.crawl(Try, urls=[r'https://www.example.com']) 
process.start() 
0

그래서, 누군가는 알고있다?

process.crawl (시도)를 사용할 때 - 치료가 새로운 Try 스파이더 객체를 만드나요?

관련 문제