2014-09-27 3 views
1

전자 상거래 사이트 (이 경우 Flipkart)의 웹 페이지에 나열된 모든 제품의 제목을 스크랩하려고합니다. 이제 내가 긁어 모으는 제품은 사용자가 입력 한 키워드에 따라 달라집니다. 나는 제품을 입력 한 경우 일반적인 URL이 생성 'XYZXYZ'이 될 것입니다 : 이제동적 전자 상거래 웹 페이지의 데이터 스크랩

http://www.flipkart.com/search?q=XYXXYZ&as=off&as-show=on&otracker=start 

, 템플릿으로이 링크를 사용하여, 나는 기반으로 특정 웹 페이지에 나열된 모든 제품의 제목을 폐기하는 다음 스크립트를 썼다 입력 된 키워드 :

import requests 
from bs4 import BeautifulSoup 

def flipp(k): 
    url = "http://www.flipkart.com/search?q=" + str(k) + "&as=off&as-show=on&otracker=start" 
    ss = requests.get(url) 
    src = ss.text 
    obj = BeautifulSoup(src) 
    for e in obj.findAll("a", {'class' : 'lu-title'}): 
     title = e.string 
     print unicode(title) 

h = raw_input("Enter a keyword:") 
print flipp(h) 

그러나 위 스크립트는 None을 출력으로 반환합니다. 각 단계에서 디버깅을 시도했을 때 requests 모듈이 웹 페이지의 소스 코드를 가져올 수 없다는 것을 발견했습니다. 여기에서 무슨 일이 벌어지고있는 것 같습니까?

+0

당신은 어떤 오류를 확인합니까? – alecxe

+0

아니요, 함수는 None 만 반환합니다. –

답변

1

이 트릭,

import requests 
from bs4 import BeautifulSoup 
import re 

def flipp(k): 
    url = "http://www.flipkart.com/search?q=" + str(k) + "&as=off&as-show=on&otracker=start" 
    ss = requests.get(url) 
    src = ss.text 
    obj = BeautifulSoup(src) 
    for e in obj.findAll("a",class_=re.compile("-title")): 
     title = e.text 
     print title.strip() 

h = raw_input("Enter a keyword:") # I used 'Python' here 
print flipp(h) 

Out[1]: 
Think Python (English) (Paperback) 
Learning Python (English) 5th Edition (Hardcover) 
Python in Easy Steps : Makes Programming Fun ! (English) 1st Edition (Paperback) 
Python : The Complete Reference (English) (Paperback) 
Natural Language Processing with Python (English) 1st Edition (Paperback) 
Head First Programming: A learner's guide to programming using the Python language (English) 1st Edition (Paperback) 
Beginning Python (English) (Paperback) 
Programming Python (English) 4Th Edition (Hardcover) 
Computer Science with Python Language Made Simple - (Class XI) (English) (Paperback) 
HEAD FIRST PYTHON (English) (Paperback) 
Raspberry Pi User Guide (English) (Paperback) 
Core Python Applications Programming (English) 3rd Edition (Paperback) 
Write Your First Program (English) (Paperback) 
Programming Computer Vision with Python (English) 1st Edition (Paperback) 
An Introduction to Python (English) (Paperback) 
Fundamentals of Python: Data Structures (English) (Paperback) 
Think Complexity (English) (Paperback) 
Foundations of Python Network Programming: The comprehensive guide to building network applications with Python (English) 2nd Edition (Soft Cover) 
Python Programming for the Absolute Beginner (English) (Paperback) 
EXPERT PYTHON PROGRAMMING BEST PRACTICES FOR DESIGNING,CODING & DISTRIBUTING YOUR PYTHON 1st Edition (Paperback) 
None 
+0

이 솔루션은 없음도 반환합니다. 또한 소스 코드에서 'pu-title'이라는 클래스를 찾을 수 없습니다. –

+0

이 코드는 나를 위해 완벽하게 작동합니다. 우리는 무언가를 잘못 연결하고 있습니다. –

+0

'java'및 'python'을 (를) 입력하려고 시도한 키워드를 알려주십시오. 스크립트는 없음을 반환합니다. 그리고 웹 페이지의 소스 코드에서 'pu-title'이라는 이름의 클래스를 찾을 수 없었습니다. findAll 함수 내부에서 매개 변수를 어떻게 산출하는지 설명 할 수 있습니까? –

0

flipp에는 return 문이 없으므로, return 문이없는 경우 모든 파이썬 함수의 기본 반환 값은 None입니다.

결과가없는 키워드를 사용하고 있지만 해당 스크립트로 페이지를 다시 가져올 수 있습니다.

+0

여기에 return 문이 없다는 것이 문제라고 생각하지 않습니다. 아마존에서 데이터를 추출하기 위해 유사한 크롤러를 작성 했으므로 잘 작동합니다. –

+0

@ManasChaturvedi 괜찮습니다.하지만이 코드에서는 함수에서 아무 것도 반환하지 않으므로 'None'을 얻게됩니다. 사실, 당신이 '없음'을 얻는 이유가 그것이 문제가 아니라고 주장 할 수있는 방법을 모르겠습니다. –

+0

'print title'을 'return title'으로 바꾸 었다고 생각하면, 그 웹 페이지의 첫 번째 제품 제목이 표시되고 그 다음에 루프가 종료 될 것으로 예상하고있었습니다. 그러나, 나는 아직도 내 결과에 없음을 얻는다. –

관련 문제