2017-04-12 1 views
1

은 또한이 링크 목록을 일부 interesting urls : scrapy를 사용링크 목록에서 스크랩하는 방법은 무엇입니까?

start_urls = ['link1.com', 'link2.com', 'link3.com', ...,'linkN.com'] 

, 어떻게 내가 scrapy 새로운 난 그냥 하나 개의 링크에 대한이 시도하고 있기 때문에

'link1.com' 'extracted1.link.com' 
'link2.com' 'extracted2.link.com' 
'link3.com' 'extracted3.link.com' 
... 
'linkN.com' 'extractedN.link.com' 

? 얻을 수 있습니다 :

:

class ToySpider(scrapy.Spider): 
    name = "toy" 
    allowed_domains = ["https://www.example.com/"] 
    start_urls = ['link1.com'] 


    def parse(self, response): 

     for link in response.xpath(".//*[@id='object']//tbody//tr//td//span//a[2]"): 
      item = ToyItem() 
      item['link'] = link.xpath('@href').extract_first() 
      item['interesting_link'] = link 
      yield item 

그러나,이 날을 반환 이렇게 링크 NaN 반환을위한 @Granitosaurus의 대답을 시도 후

[ 
{'link': 'extracted1.link.com', 
    'name': 'link1.com'}, 
{'link': 'extracted2.link.com', 
    'name': 'link2.com'}, 
{'link': 'extracted3.link.com', 
    'name': 'link3.com'}, 
.... 
{'link': 'extractedN.link.com', 
    'name': 'linkN.com'} 
] 

UPDATE

: 나는 start_urls의 모든 요소에 대해 위의 작업을 수행하고 다음 목록을 반환 할 수 있습니까 2,653,210

가지고 있지 않다 : response.xpath(".//*[@id='object']//tbody//tr//td//span//a[2]") 내가 한 것 :

def parse(self, response): 
    links = response.xpath(".//*[@id='object']//tbody//tr//td//span//a[2]") 
    if not links: 
     item = ToyItem() 
     item['link'] = 'NaN' 
     item['name'] = response.url 
     return item 

    for links in links: 
     item = ToyItem() 
     item['link'] = links.xpath('@href').extract_first() 
     item['name'] = response.url # <-- see here 
    yield item 

    list_of_dics = [] 
    list_of_dics.append(item) 
    df = pd.DataFrame(list_of_dics) 
    print(df) 
    df.to_csv('/Users/user/Desktop/crawled_table.csv', index=False) 

그러나 012를 반환하는 대신:

'link1.com' 'NaN' 
'link2.com' 'NAN' 
'link3.com' 'extracted3.link.com' 

내가 가지고 :

'link3.com' 'extracted3.link.com' 

를 내가 반환 할 수 있습니다 방법 (*)

답변

1

당신은 당신의 거미 response.url 속성에서 크롤링 현재 URL을 검색 할 수 있습니다 다음에 대한

start_urls = ['link1.com', 'link2.com', 'link3.com', ...,'linkN.com'] 

def parse(self, response): 
    links = response.xpath(".//*[@id='object']//tbody//tr//td//span//a[2]") 
    if not links: 
     item = ToyItem() 
     item['link'] = None 
     item['name'] = response.url 
     return item 
    for links in links: 
     item = ToyItem() 
     item['link'] = links.xpath('@href').extract_first() 
     item['name'] = response.url # <-- see here 
     yield item 
+0

감사합니다 도움. 나는 또 다른 이슈를 가지고있다. 나는 몇몇 'linksN.com'에는 아무 것도 없다고 언급했다 :' ".//*[@id='object']//tbody//tr//td//span// a [2] ". 반환하는 방법 :'linkN, NaN' 그러한 인스턴스에 대한? – tumbleweed

+1

@tumbleweed 그냥 링크가 있는지 확인할 수 있습니다. 내 편집을 참조하십시오. – Granitosaurus

+0

대단히 고맙습니다. 내 업데이트를 확인해 주시겠습니까? .. 웹 사이트의 값에 NaN을 반환하는 방법을 이해하지 못했습니다. 스파이더가'응답 '을 찾지 못했습니다 – tumbleweed

관련 문제