2014-11-28 2 views
2

Scrapy for Python으로 스크래퍼를 코딩하려고합니다. 이 시점에서 나는 웹 페이지의 이름과 페이지 내의 모든 아웃 바운드 링크를 얻으려고합니다.Scrapy에서 응답 요소를 루프하는 방법은 무엇입니까?

from scrapy.spider import Spider 
from scrapy import Selector 
from socialmedia.items import SocialMediaItem 

class MySpider(Spider): 
    name = 'smm' 
    allowed_domains = ['*'] 
    start_urls = ['http://en.wikipedia.org/wiki/Social_media'] 
    def parse(self, response): 
     items =[] 
     for link in response.xpath("//a"): 
      item = SocialMediaItem() 
      item['title'] = link.xpath('text()').extract() 
      item['link'] = link.xpath('@href').extract() 
      items.append(item) 
      yield items 

는 사람이 결과를 얻을하는 데 도움 수 : 출력은 내가이 코드를 만든이

 {'link': [u'Link1'], 'title': [u'Page title']} 

같은 사전되어야 하는가? 이 페이지의 코드를 변경했습니다. http://mherman.org/blog/2012/11/05/scraping-web-pages-with-scrapy/

비추천 기능이없는 코드를 업데이트했습니다. 정말 고마워요! 대니

답변

2

만약 내가 제대로 이해하고

, 당신은 링크와 추출물 링크 및 모든 타이틀을 반복합니다.

//a XPath를 통해 모든 a 태그를 확인하고 text()@href 추출 :

def parse(self, response): 
    for link in response.xpath("//a"): 
     item = SocialMediaItem() 
     item['title'] = link.xpath('text()').extract() 
     item['link'] = link.xpath('@href').extract() 
     yield item 

이 수율 : 또한

{'link': [u'#mw-navigation'], 'title': [u'navigation']} 
{'link': [u'#p-search'], 'title': [u'search']} 
... 
{'link': [u'/wiki/Internet_forum'], 'title': [u'Internet forums']} 
... 

를, 거기에 있습니다 Link Extractors 내장 Scrapy로 :

LinkExtractors are objects whose only purpose is to extract links from web pages (scrapy.http.Response objects) which will be eventually followed.

+0

감사 alecxe. 'yield'를 사용할 때이 오류가 발생합니다. 2014-11-28 18 : 31 : 30 + 0100 [smm] 오류 : Spider가 Request, BaseItem 또는 None을 반환해야합니다. 를 참조하십시오. 'return'을 사용할 때 오류는 발생하지 않지만 파일에는 아무 것도 저장하지 않습니다. 어떻게 링크 추출기를 사용 하시겠습니까? 코드를 업데이트했습니다. –

+0

@DaniValverde 제공 한 정확한'parse()'메서드를 사용하십시오. 오류가 발생하지 않습니다. – alecxe

+0

감사합니다 alecxe, 내가 그것을 사용 처음 오류가 발생했습니다. –

관련 문제