2017-09-10 5 views
2

リクエストやBeautifulSoupに慣れようとしていますので、私はミニプロジェクトをしました。ウェブサイトのHTMLがPythonのリクエストライブラリが提供するHTMLと異なるのはなぜですか?

  • ShoeName#1日#1
  • ShoeName#2日#2
  • ShoeName#3:私はそうのようなフット・ロッカーのリリースカレンダー (https://www.footlocker.com/release-dates/)に靴を表示するプログラムを作成しようとしています

    import requests as req 
    from bs4 import BeautifulSoup 
    
    def main(): 
        url = "https://www.footlocker.com/release-dates/" 
        resp = req.get(url) 
    
        soup = BeautifulSoup(resp.content, "html.parser") 
        print(soup) 
    
    :日#3
  • ShoeName#4日#4

は、これまでのところ私はこれを持っています

しかし、BeautifulSoupを解析するためにHTMLを読み込むと、Webサイトでinspect要素を直接使用すると、靴の日付と名前を含む情報を含むHTMLコードが表示されません。これは、Javascriptによって靴の情報を含むHTMLが生成されたためです。もしそうなら、どうすればリクエストでロードできますか?

ありがとうございます。

+3

を学ぶと 'Selenium'を使用しています。 – DyZ

答えて

0

、あなたのマシンにインストールされているセレンを持っている場合は、そうでなければ大丈夫だ、それをインストール:dataでどのように項目のデモは次のようになります。ここにあなたが行く方法です。

from selenium import webdriver 
from bs4 import BeautifulSoup 

driver = webdriver.Chrome() 
driver.get("https://www.footlocker.com/release-dates/") 
soup = BeautifulSoup(driver.page_source, "lxml") 
driver.quit() 
for item in soup.select(".day"): 
    shoe = item.select_one(".productName").get_text() 
    date = item.select_one(".date").get_text() 
    print(shoe,date) 

部分的な結果:

Jordan Retro 1 HI OG 1Aug 
Kids' Jordan Retro 1 HI OG 1Aug 
Jordan Retro 1 HI OG 1Aug 
Kids' Jordan Retro 1 HI OG 1Aug 
Nike Kobe A.D. NXT 1Aug 
Nike Dualtone Racer 1Aug 
0

あなたはrequestsでそれをロードすることはできません、あなたがしてロードするためにそれを使用する必要がありますすることができますどのようにそれを使用して、一度、selenium一緒ChromeDriver(または他のブラウザ)であり、あなたも使用する必要はありません解析するジョブのbs4:すべての製品の名前が<div class="productImage"></div>タグであるので

from selenium import webdriver 

driver = webdriver.Chrome() 
driver.get("https://www.footlocker.com/release-dates/") 

names = driver.find_elements_by_class_name("productName") 
names = [name.text for name in names] 
days = driver.find_elements_by_class_name("days") 
days = [day.text for day in days] 
months = driver.find_elements_by_class_name("month") 
months = [month.text for month in months] 

dates = list(zip(days, months)) 
data = list(zip(names, dates)) 

は、それがすべて取得するには.find_elements_by_class_nameを持つすべての要素、後で使用リスト内包の構文をつかむのは簡単です所望の要素のテキスト。同じプロセスを使用して、すべての日付と月のテキストを検索します。

これらはすべて解析時に並べ替えられるため、zipを使用すると、タプルの1つの大きなリストにそれらをまとめて保存することができます。

>>> data[:10] 
[('Jordan Retro 1 HI OG', ('1', 'Aug')), ("Kids' Jordan Retro 1 HI OG", ('1', 'Aug')), ('Jordan Retro 1 HI OG', ('1', 'Aug')), ("Kids' Jordan Retro 1 HI OG", ('1', 'Aug')), ('Nike Kobe A.D. NXT', ('1', 'Aug')), ('Nike Dualtone Racer', ('1', 'Aug')), ('Nike Duelist Racer', ('1', 'Aug')), ('Jordan Super.Fly 2017', ('3', 'Aug')), ("Kids' Jordan Super.Fly 2017", ('3', 'Aug')), ('Nike Air VaporMax Flyknit', ('3', 'Aug'))] 
関連する問題