python 파충류 프레임 워 크 scrapy 실전 의 등반 경 동상 점 진급 편

7352 단어 scrapy경 동파충
머리말
이전 글 에 서 는 링크 를 어떻게 얻 고 인 자 를 어떻게 얻 는 지 에 대해 설명 하 였 습 니 다.자세 한 내용 은python 경 동상 점 등반을 보 세 요.본 고 는 python 파충류 프레임 워 크 scrapy 를 이용 하여 경 동 쇼핑 몰 을 어떻게 오 르 는 지 상세 하 게 소개 하 겠 습 니 다.다음은 더 이상 말 하지 않 겠 습 니 다.상세 한 소 개 를 살 펴 보 겠 습 니 다.
코드 상세 설명
1.우선 구조 요청 을 해 야 합 니 다.여기 서 사용scrapy.Request합 니 다.이 방법 은 기본적으로 start 를 호출 합 니 다.urls 구조 요청,기본 요청 을 바 꾸 려 면 이 방법 을 다시 불 러 와 야 합 니 다.이 방법의 반환 값 은 교체 가능 한 대상 이 어야 합 니 다.일반적으로 yield 로 되 돌아 와 야 합 니 다.
코드 는 다음 과 같 습 니 다:

def start_requests(self):
 for i in range(1,101):
 page=i*2-1 #       url page,    
 url=self.start_url+str(page)
 yield scrapy.Request(url,meta={'search_page':page+1},callback=self.parse_url) #    meta         ,      response.meta['search-page']    
다음은 웹 페이지 를 분석 하 는 것 입 니 다.위 에서 보 듯 이 여기 의 해석 반전 함 수 는 parse 입 니 다.url,따라서 이 함수 에서 웹 페이지 를 분석 합 니 다.여기 서도 위 에서 말 한 것 처럼 이 url 은 앞의 절반 에 불과 한 정 보 를 얻 었 습 니 다.만약 에 뒤의 절반 의 정 보 를 얻 으 려 면 다시 요청 하 는 방법 도 있 습 니 다.여기 서 주의해 야 할 것 은 바로 하나의 기술 입 니 다.보통 한 데이터 의 배열 을 먼저 분석 하고 첫 번 째 숫자 를 급히 꺼 내지 않 으 려 면 먼저 if 문 구 를 사용 하여 판단 해 야 합 니 다.만약 에[]를 얻 으 면[0]을 직접 꺼 내 면 잘못 보고 할 수 있 기 때 문 입 니 다.이것 은 단지 잘못 보 고 를 피 하 는 방법 일 뿐이다.
코드 는 다음 과 같 습 니 다:

def parse_url(self,response):
 if response.status==200: #        
 # print response.url
 pids = set() #              id,       ajax   url  
 try:
 all_goods = response.xpath("//div[@id='J_goodsList']/ul/li") #             ,           
 for goods in all_goods: #       
 # scrapy.shell.inspect_response(response,self) #         ,           
 items = JdSpiderItem() #        
 img_url_src = goods.xpath("div/div[1]/a/img/@src").extract() #             [],        [0]
 img_url_delay = goods.xpath(
  "div/div[1]/a/img/@data-lazy-img").extract() #             ,            [0]
 price = goods.xpath("div/div[3]/strong/i/text()").extract() #  
 cloths_name = goods.xpath("div/div[4]/a/em/text()").extract()
 shop_id = goods.xpath("div/div[7]/@ data-shopid").extract()
 cloths_url = goods.xpath("div/div[1]/a/@href").extract()
 person_number = goods.xpath("div/div[5]/strong/a/text()").extract()
 pid = goods.xpath("@data-pid").extract()
 # product_id=goods.xpath("@data-sku").extract()
 if pid:
  pids.add(pid[0])
 if img_url_src: #   img_url_src  
  print img_url_src[0]
  items['img_url'] = img_url_src[0]
 if img_url_delay: #              ,    url
  print img_url_delay[0]
  items['img_url'] = img_url_delay[0] #           ,    
 if price:
  items['price'] = price[0]
 if cloths_name:
  items['cloths_name'] = cloths_name[0]
 if shop_id:
  items['shop_id'] = shop_id[0]
  shop_url = "https://mall.jd.com/index-" + str(shop_id[0]) + ".html"
  items['shop_url'] = shop_url
 if cloths_url:
  items['cloths_url'] = cloths_url[0]
 if person_number:
  items['person_number'] = person_number[0]
 # if product_id:
 # print "************************************csdjkvjfskvnk***********************"
 # print self.comments_url.format(str(product_id[0]),str(self.count))
 # yield scrapy.Request(url=self.comments_url.format(str(product_id[0]),str(self.count)),callback=self.comments)
 #yield scrapy.Request                        
 yield items
 except Exception:
 print "********************************************ERROR**********************************************************************"
 yield scrapy.Request(url=self.search_url.format(str(response.meta['search_page']),",".join(pids)),callback=self.next_half_parse) #    ,     ajax     ,      ,           pid        ,           
2.상기 코드 의 마지막 부분 에서 알 수 있 듯 이 마지막 으로 ajax 로 딩 한 웹 페이지 를 분석 하 는 것 입 니 다.여기 서 호출 된 nexthalf_parse 함 수 는 앞의 웹 페이지 를 분석 하 는 것 과 마찬가지 로 여기 서 주의해 야 할 것 은 앞에서 정 의 된 데이터 가 검색 되 지 않 으 면 사용 할 수 없다 는 것 입 니 다yield items.items 를 meta 를 통 해 다음 반전 함수 로 계속 보완 해 야 합 니 다yield items.여 기 는 필요 없습니다.
코드 는 다음 과 같 습 니 다:

#         
 def next_half_parse(self,response):
 if response.status==200:
 print response.url
 items=JdSpiderItem()
 #scrapy.shell.inspect_response(response,self) #y     
 try:
 lis=response.xpath("//li[@class='gl-item']")
 for li in lis:
  cloths_url=li.xpath("div/div[1]/a/@href").extract()
  img_url_1=li.xpath("div/div[1]/a/img/@src").extract()
  img_url_2=li.xpath("div/div[1]/a/img/@data-lazy-img").extract()
  cloths_name=li.xpath("div/div[4]/a/em/text()").extract()
  price=li.xpath("div/div[3]/strong/i/text()").extract()
  shop_id=li.xpath("div/div[7]/@data-shopid").extract()
  person_number=li.xpath("div/div[5]/strong/a/text()").extract()
  if cloths_url:
  print cloths_url[0]
  items['cloths_url']=cloths_url[0]
  if img_url_1:
  print img_url_1[0]
  items['img_url']=img_url_1
  if img_url_2:
  print img_url_2[0]
  items['img_url']=img_url_2[0]
  if cloths_name:
  items['cloths_name']=cloths_name[0]
  if price:
  items['price']=price[0]
  if shop_id:
  items['shop_id']=shop_id[0]
  items['shop_url']="https://mall.jd.com/index-" + str(shop_id[0]) + ".html"
  if person_number:
  items['person_number']=person_number[0]
  yield items #      ,        ,    yield items
 except Exception:
 print "**************************************************"
3.물론 여 기 는 설정 요청 풀,my sql 저장 소 를 사 용 했 습 니 다.ip 대 리 를 사용 하지 않 았 습 니 다.이것 은 제 앞의 블 로그 에서 다시 말 했 습 니 다.여 기 는 더 이상 군말 하지 않 겠 습 니 다.
소스 코드 보고 싶 으 신 분.
여 기 를 클릭 하 세 요.  또는로 컬 다운로드
잔재주
  • 사람들 은 왜 자신의 파충류 가 중간 에 끊 어 지면 다시 기어 오 르 기 시작 하 는 지,왜 끊 어 진 곳 에서 부터 기어 오 르 지 못 하 는 지 불평 할 것 이다.여기에 설정 파일 settings.py 에JOBDIR=file_name을 추가 하 는 방법 을 제공한다.여기 filename 은 파일 이름 입 니 다
  • 설치 다운로드 지연 방지 ban:DOWNLOAD_DELAY = 2:매번 간격 설정RANDOMIZE_DOWNLOAD_DELAY = True:이것 은 무 작위 설정 지연 시간 이 설정 한 시간의 0.5-1.5 배 사이 입 니 다.이렇게 하면 더욱 효과적으로 ban 을 방지 할 수 있 습 니 다.보통 세트 로 사용 합 니 다
  • ROBOTSTXT_OBEY = False:robots.txt 파일 을 따 르 지 않 는 다 는 뜻 입 니 다.기본 값 은 True 가 따 르 는 것 입 니 다.여 기 는 False
  • 로 바 꿉 니 다.
  • CONCURRENT_REQUESTS:최대 요청 수 를 설정 합 니 다.여기 서 기본 적 인 것 은 16 입 니 다.우 리 는 자신의 컴퓨터 설정 에 따라 크게 바 꾸 어 요청 속 도 를 가속 화 할 수 있 습 니 다
  • 총결산
    이상 은 이 글 의 모든 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 python 사용 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기