2016-05-13 8 views
0

私はウェブサイト(許可を得て)からレストランのリストを拝借しています。問題があります。ウェブサイトからのhtml pythonスクラップは、ソースコード内のhtmlとは異なります。サイト上のレストランの半分以下は、Pythonのhtmlにあります。これは私のコードは次のようになります。スクラップしたHTMLはソースコードとどのように違うのですか?

import requests 
from bs4 import BeautifulSoup 
from tempfile import TemporaryFile 
import xlwt 

url = 'https://www.example.com' 

r = requests.get(url) 
data = BeautifulSoup(r.text) 
soup = data.find_all('span',{'class':'restaurant_name'}) 
print soup 

今、私はそれがincovenientだけど、私は会社が私をさせないので、HTMLを表示することはできません。私は、あなたが一般的に、pythonでダウンロードしたhtmlがソースコードのものとどのように異なっているのか、そして私がそれについて何ができるのかを知っているかどうかは疑問です。

ありがとうございます!

+1

、このいずれかをチェックし、あなたがこれを他にどのような方法を比較していますか?あなたのブラウザのDOMインスペクタを見ていますか?これはサイトの現在の状態*を示し、初期のソースは表示しません。サイトがAJAXを介してデータを読み込む場合、その2つのことはかなり異なる場合があります。 – deceze

+1

レストランを動的に追加するためにJavascriptが採用される可能性はありますか? –

+0

はいブラウザのインス​​ペクタを見ています!私は違いがあることを知らなかった!サイトの現在の状態をダウンロードするにはどうすればよいですか? – titusflex

答えて

2

この目的でSeleniumを使用できます。あなたのブラウザと同じように、実行時にWebページをレンダリングします。あなたは、firefox、chrome、phantomjsでSeleniumを使うことができます。

セレン

私たちは、サイトのほとんどは、現代のJavaScriptフレームワークで構成されていて、基本的には完全に私たちのウェブページをレンダリングするために、セレンを使用しています。主に、Webサイトの異なるページからデータを収集するためのクローラ/スクラップを開発する際に使用されます。また、SeleniumはWebオートメーションでも使用されます。

セレンの詳細はこちらhttp://selenium-python.readthedocs.io/ また、私は初心者向けのSleniumに関するブログ記事を持っています。あまりにhttp://blog.hassanmehmood.com/creating-your-first-crawler-in-python/

import urllib 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

profile_link = 'http://hassanmehmood.com' 


class TitleScrapper(object): 

    def __init__(self): 

     fp = webdriver.FirefoxProfile() 
     fp.set_preference("browser.startup.homepage_override.mstone", "ignore") #Avoid startup screen 
     fp.set_preference("startup.homepage_welcome_url.additional", "about:blank") 

     self.driver = webdriver.Firefox(firefox_profile=fp) 
     self.driver.set_window_size(1120, 550) 

    def scrape_profile(self): 
     self.driver.get(profile_link) 
     print self.driver.title 
     self.driver.close() 

    def scrape(self): 
     self.scrape_profile() 


if __name__ == '__main__': 
    scraper = TitleScrapper() 
    scraper.scrape() 
3

単語で、javascript。基本HTMLページをダウンロードしていますが、ブラウザではなく、ブラウザが実行するjavascriptコードをダウンロードして実行しているわけではありません。最近、非常に小さなHTMLページから始まり、スクリプティングを使用してサーバーから追加のデータを動的にロードして表示しています。

+2

サイトの現在の状態はどうやってダウンロードできますか? – titusflex

+1

@titusflex上記の答えを確認するには、セレンを使用する必要があります –

関連する問題