2017-10-05 2 views
-1
import scrapy 


class Pttscrapper2Spider(scrapy.Spider): 
    name = 'PTTscrapper2' 
    allowed_domains = ['https://www.ptt.cc'] 
    start_urls = ['https://www.ptt.cc/bbs/HatePolitics/index.html/'] 
    handle_httpstatus_list = [400, 302] 

    def parse(self, response): 
     urls = response.css('div.r-ent > div.title > a::attr(href)').extract() 
     for thread_url in urls: 
      url = response.urljoin(thread_url) 
      yield scrapy.Request(url=url, callback=self.parse_details) 

     next_page_url = response.css('a.wide:nth-child(2)::attr(href)').extract_first() 
     if next_page_url: 
      next_page_url = response.urljoin(next_page_url) 
      yield scrapy.Request(url=next_page_url, callback=self.parse)    


    def parse_details(self, response): 
     yield { 
       'title' : response.xpath('//head/title/text()').extract(), 
       'stance' : response.xpath('//*[@id="main-content"]/div[@class="push"]/span[1]/text()').extract(), 
       'userid' : response.xpath('//*[@id="main-content"]/div[@class="push"]/span[2]/text()').extract(), 
       'comment' : response.xpath('//*[@id="main-content"]/div[@class="push"]/span[3]/text()').extract(), 
       'time_of_post' : response.xpath('//*[@id="main-content"]/div[@class="push"]/span[4]/text()').extract(), 
     } 
나는 시도하고 웹 사이트를 크롤링 위의 거미를 사용하고

,하지만 난 거미를 실행할 때, 나는이 메시지를 얻을 :Scrapy 크롤링 처리하는 방법 (302) 상태,

> 2017-10-05 23:14:27 [scrapy.core.engine] INFO: Spider opened 
> 2017-10-05 23:14:27 [scrapy.extensions.logstats] INFO: Crawled 0 pages 
> (at 0 pages/min), scraped 0 items (at 0 items/min) 2017-10-05 23:14:27 
> [scrapy.extensions.telnet] DEBUG: Telnet console listening on 
> 127.0.0.1:6023 2017-10-05 23:14:28 [scrapy.downloadermiddlewares.cookies] DEBUG: Received cookies from: 
> <302 https://www.ptt.cc/bbs/HatePolitics/index.html/> Set-Cookie: 
> __cfduid=d3ca57dcab04acfaf256438a57c547e4a1507216462; expires=Fri, 05-Oct-18 15:14:22 GMT; path=/; domain=.ptt.cc; HttpOnly 
> 
> 2017-10-05 23:14:28 [scrapy.core.engine] DEBUG: Crawled (302) <GET 
> https://www.ptt.cc/bbs/HatePolitics/index.html/> (referer: None) 
> 2017-10-05 23:14:28 [scrapy.core.engine] INFO: Closing spider 
> (finished) 

내가 생각한 것은 거미가 색인의 하위 포럼에 액세스 할 수 없다는 것입니다. 선택기가 올바른 위치를 가리키고 request.urljoin이 정확한 절대 URL을 생성하지만 페이지의 하위 포럼에 액세스 할 수없는 것으로 보이는 지 테스트했습니다. 누군가가 왜 거미가 링크에 액세스 할 수 없는지 말할 수 있다면 좋을 것입니다!

+0

에서

class Pttscrapper2Spider(scrapy.Spider): name = 'PTTscrapper2' allowed_domains = ['www.ptt.cc'] start_urls = ['https://www.ptt.cc/bbs/HatePolitics/index.html'] 

로그 일 것이다? 해당 오류 코드를 처리하지 않고 제거해야합니다. –

+0

handle_httpstatus를 제거했지만 이제 오류가 발생합니다. 잘못된 URL로 안내됩니다. 'code' 2017-10-06 00:46:33 [scrapy.downloadermiddlewares.redirect] 디버그 : (302)를 에서 2017-10-06 00:46:36 [scrapy.core.engine] DEBUG : 크롤링 됨 (404) < GET https://www.ptt.cc/bbs/HatePolitics/index.html/index.html> (referer : None) 'code' – BladeEntity

답변

0

스크레이퍼에 2 가지 문제가 있습니다. start_urls에서 index.html/에 후행 슬래시를 추가했는데 이것이 잘못되었습니다. 다음 allowed_domains은 URL이 아닌 도메인 이름을 사용합니다.

변경 아래에 코드를 시작하고`handle_httpstatus_list`을 넣어 가지고 왜 실행

2017-10-06 13:16:15 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.ptt.cc/bbs/HatePolitics/M.1507268600.A.57C.html> (referer: https://www.ptt.cc/bbs/HatePolitics/index.html) 
2017-10-06 13:16:15 [scrapy.core.scraper] DEBUG: Scraped from <200 https://www.ptt.cc/bbs/HatePolitics/M.1507268600.A.57C.html> 
{'title': ['[黑特] 先刪文,洪慈庸和高潞那個到底撤案了沒? - 看板 HatePolitics - 批踢踢實業坊'], 'stance': ['推 ', '→ ', '噓 ', '→ ', '→ '], 'userid': ['ABA0525', 'gerund', 'AGODFATHER', 'laman45', 'victoryman'], 'comment': [': 垃圾不分藍綠黃', ': 垃圾靠弟傭 中華民國內最沒資格當立委的爛貨', ': 說什麼東西你個板啊', ': 有確定再說', ': 看起來應該是撤了'], 'time_of_post': ['10/06 13:43\n', '10/06 13:50\n', '10/06 13:57\n', '10/06 13:59\n', ' 10/06 15:27\n']} 
2017-10-06 13:16:15 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.ptt.cc/bbs/HatePolitics/M.1507275599.A.657.html> (referer: https://www.ptt.cc/bbs/HatePolitics/index.html)