2016-07-16 4 views
1

this pageのコンテンツを掻き取ろうとしています。下のコードを参照してください。しかし、コードを繰り返し実行するかのように、ブラウザの表示ページが同じであっても、私は職場の別のリスト(したがって、レビュー)を取得し続けます。 など。最初の反復は正しいですが、同じ開始URLを使用してスクリプトを2回実行すると、「University Village」と「Remote Telework」の場所がリストから消えます(「San Salvador」と「Atlanta」は入力するのでリスト同じ長さである)。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

私の意見では、それはyour target urlのAjaxリクエストと関連しています。私が訪れたときに、XHRタイプのリクエストがいくつか見つかりました。

Ajax関連のWebサイトでは、"What the user sees, what the crawler sees"はかなり異なっています。 urllibまたはリクエストは、最初にページを読み込んだときにのみデータを参照し、一部のコンテンツはここで損失する可能性があります。

あなたはAjaxリクエストでウェブサイトをクロールする場合は、私はPhantomJSに基づいてCasperJSを、使用することをお勧めします、それは人々がウェブサイトを訪問するものあざけり、そしてあなたが必要とするすべてのデータは、さらに仕事をするためにロードされるまで待機します、それはまたですpythonと関連し、======

here :)

====== UPDATEを確認してください、私はそれがphantomjsと関連しています別のリンクscraping-with-python-selenium-and-phantomjsを追加し、一緒にbeautifulsoup、およびいくつかのために有用である可能性がありますケース。

+0

ありがとうございました。 CasperJSを使用してURLを開いて読み取る方法はありますか?あるいは、もし私がghost.py(コードのメイン部分を変更しないでください)を使用するのであれば、同じ結果が得られますか? 私は初心者であり、始まっています、ええと、威圧していますか? :) –

+0

こんにちはanne_t、私の意見では、bsとcasperjsを一緒に使用する一般的な方法は、popenのような単一のプロセスを使用してcasperjsスクリプトをpy内で呼び出し、bsを使用してcasperjsによってダウンロードされたhtmlを処理することです。また、私は自分の答えを編集し、PhantomJSとbsとのリンクを組み込んでいます。私はghost.pyの部分についてはわかりません、私は前にそれを扱っていませんでした:) – linpingta

+0

ありがとう!私は間違いなくそれを探します! –

関連する問題