2016-07-16 2 views
1

this page에서 내용을 긁어 내려고합니다. 아래 코드를 참조하십시오. 궁금한 점이 있지만, 코드를 반복적으로 실행하는 것처럼 내 브라우저에 표시된 페이지가 동일하더라도 작업 위치의 다른 목록 (따라서 리뷰)을 계속 유지합니다. 예. 첫 번째 반복은 정확하지만 같은 시작 URL로 두 번째 스크립트를 실행하면 "University Village"및 "Remote Telework"위치가 목록에서 사라집니다 ("San Salvador"및 "Atlanta"enter)하여 목록 길이가 같음).Beautifulsoup로 스크래핑 - 표시된 페이지와 다른 내용

내가 볼 수있는 한 '숨겨진'텍스트는 없습니다. 이 모든 것이 가시적이어야하며 (첫 번째 반복에서) 무슨 일 이니? 어떻게하면 모든 내용을 가져올 수 있는지 확인할 수 있습니까 (몇 천 페이지 반복해야하므로 수동으로 폐기 된 데이터를 검토하고 싶지는 않습니다).

This question과 관련되어 있지만 여기서는 IP 문제라고 생각하지 않습니다. 첫 번째 반복에서 표시된 콘텐츠를 얻을 수 있기 때문입니다.

덧붙여 편집 : 추가 된 코드는 코드가 실제로 인식 한 코드와 똑같은 코드를 실제로 건너 뜁니다.

list_url= ["http://www.indeed.com/cmp/Microsoft/reviews?fcountry=ALL"] 

for url in list_url: 
base_url_parts = urllib.parse.urlparse(url) 
while True: 
    raw_html = urllib.request.urlopen(url).read() 
    soup = BeautifulSoup(raw_html,"lxml") 

    review_tag={'class':re.compile("cmp-review-container")} 
    reviews=soup.find_all(attrs=review_tag) 

    job_locations=[] 

    for r in reviews: 
     if r.find(attrs={'class':"cmp-reviewer-job-location"}) != None: 
      job_location=r.find(attrs={'class':"cmp-reviewer-job-location"}).get_text().strip().encode('utf-8') 
     else: 
      job_location = "." 
     job_locations.append(job_location) 

#Zip the data and write the observations to the CSV file 

    try: 
     last_link = soup.find('div', id='company_reviews_pagination').find_all('a')[-1] 
     if last_link.text.startswith('Next'): 
      next_url_parts = urllib.parse.urlparse(last_link['href']) 
      url = urllib.parse.urlunparse((base_url_parts.scheme, base_url_parts.netloc, 
      next_url_parts.path, next_url_parts.params, next_url_parts.query, 
      next_url_parts.fragment)) 
      print(url) 
     else: 
      break 
    except: 
     break 

csvfile.close() 

PS : 여기

코드 (단순화 된)이다. 이 질문을 올릴 수있는 적절한 장소가 아니면 죄송합니다. 이 경우 더 적절한 장소를 알려주십시오.

답변

0

제 생각에는의 Ajax 요청과 관련되어 있습니다. 방문했을 때 XHR 유형 요청을 찾을 수있었습니다.

Ajax 관련 웹 사이트의 경우 "What the user sees, what the crawler sees"은 매우 다릅니다. urllib 또는 요청은 페이지를 처음로드 할 때만 데이터를 방문하지만 일부 내용은 여기에서 손실 될 수 있습니다. 당신은 Ajax 요청이있는 웹 사이트를 크롤링 할 경우

, 나는 PhantomJS을 기반으로 CasperJS을 사용하는 것이 좋습니다, 그것은 사람들이 웹 사이트를 방문하고 추가 작업을 수행하는로드 필요한 모든 데이터 때까지 기다리는 것을 조롱, 그것은 또한입니다 파이썬과 관련, 확인하시기 바랍니다 here :

내가 다른 링크 scraping-with-python-selenium-and-phantomjs를 추가

이, 그것은 phantomjs과 관련이 함께 BeautifulSoup로, 일부에 유용 할 수있는 것 ======

====== UPDATE 사례.

+0

감사합니다. CasperJS를 사용하여 url을 열고 읽을 수있는 방법이 있습니까? 아직 처리 부분을 아름답게 유지하고 있습니까? 또는 ghost.py (코드의 주요 부분을 변경하지 않은 상태로 유지)를 사용하면 동일한 결과가 나타 납니까? 나는 초심자이고, 처음부터 끝내고있다, 음, 위협적인가? :) –

+0

안녕하세요 anne_t, 내 생각에 bs와 casperjs를 함께 사용하는 일반적인 방법은 Popen과 같은 단일 프로세스를 사용하여 py 내부에서 casperjs 스크립트를 호출하고 bs를 사용하여 casperjs에서 다운로드 한 html을 처리하는 것입니다. 게다가, 나는 나의 대답을 편집하고 PhantomJS와 BS와 함께 링크를 포함한다. 나는 ghost.py 부분에 대해 확신하지 못했습니다. 전에 처리하지 않았습니다. – linpingta

+0

고마워요! 나는 확실히 그것을 찾을거야! –