2017-11-14 5 views
0

Im 사이트에서 크롤링 중입니다. LinkExtractor를 사용하여 링크에서 링크를 크롤링하고 응답 상태를 확인합니다.이미지 포함 src to LinkExtractor Scrapy CrawlSpider

또한 링크 추출기를 사용하여 이미지 src를 사이트에서 가져오고 싶습니다. 코드가 있는데 사이트 URL과 잘 작동하지만 이미지를 가져올 수 없습니다. 콘솔에 로그온하지 않을 것이기 때문입니다.

handle_httpstatus_list = [404,502] 
# allowed_domains = [''mydomain'] 

start_urls = ['somedomain.com/'] 

http_user = '###' 
http_pass = '#####' 

rules = (
    Rule(LinkExtractor(allow=('domain.com',),canonicalize = True, unique = True), process_links='filter_links', follow = False, callback='parse_local_link'), 
    Rule(LinkExtractor(allow=('cdn.domain.com'),tags = ('img',),attrs=('src',),canonicalize = True, unique = True), follow = False, callback='parse_image_link'), 
) 

def filter_links(self,links): 
    for link in 

def parse_local_link(self, response): 
    if response.status != 200: 
     item = LinkcheckerItem() 
     item['url'] = response.url 
     item['status'] = response.status 
     item['link_type'] = 'local' 
     item['referer'] = response.request.headers.get('Referer',None) 
     yield item 

def parse_image_link(self, response): 
    print "Got image link" 
    if response.status != 200: 
     item = LinkcheckerItem() 
     item['url'] = response.url 
     item['status'] = response.status 
     item['link_type'] = 'img' 
     item['referer'] = response.request.headers.get('Referer',None) 
     yield item 

답변

1

내가 2 년 이상 Scarpy을 이용하여 제가 항상 대신 start_urls의 시작된다고 URL에 start_requests() 방법 및 LinkExtractor

대신 위의 혼란지고를 사용하여 간단하게이

class MySpider(scrapy.Spider): 
    name = "myspider" 

    def start_requests(self): 

     urls_to_scrape = ["abc.com", "abc.com2"] 

     for url in urls_to_scrape: 

      yield Request(url=url, callback=self.my_callback) 


    def my_callback(self, response): 

     for img in response.css("img"): 

      image_here = img.css("::attr(src)").extract_first() 
를 사용
+0

이것은 좋은 생각입니다. CrazySpider의 CrawlSpider 기능을 시험해보고 싶었습니다. 다른 한편으로, 페이지에서 모든 링크 또는 HREF를 가져 오는 것과 비슷한 방법이 있습니까? –

+0

예, 현재 코드가 모든 img 태그를 긁어 모으고 있습니다. 임의의 셀렉터를 사용하여 주어진 페이지에서 무엇이든 긁을 수 있습니다. – Umair

+0

흠, 내 사이트의 모든 가능한 URL을 크롤링하고 콜백을 구현하는 방법에 대한 아이디어가 있습니까? 오류? –