1

OldNavyのWebページで製品のURLをスクラップしようとしています。しかし、それは全部ではなく製品リストの一部分を与えるだけです(例えば、8以上の方法があるときは8つのURLしか与えません)。私は誰かが助けて問題の原因を特定することを望んでいました。ページからすべての情報を取得していますBeautifulSoup

from bs4 import BeautifulSoup 
from selenium import webdriver 
import html5lib 
import platform 
import urllib 
import urllib2 
import json 


link = http://oldnavy.gap.com/browse/category.do?cid=1035712&sop=true 
base_url = "http://www.oldnavy.com" 

driver = webdriver.PhantomJS() 
driver.get(link) 
html = driver.page_source 
soup = BeautifulSoup(html, "html5lib") 
bigDiv = soup.findAll("div", class_="sp_sm spacing_small") 
for div in bigDiv: 
    links = div.findAll("a") 
    for i in links: 
    j = j + 1 
    productUrl = base_url + i["href"] 
    print productUrl 
+0

このコードは動作しません - あなたは 'j'で' "" 'とエラーなしのURLを持っています。質問をする前にコードをチェックしてください。 – furas

答えて

1

このページでは、要素をロードするためにJavaScriptを使用しますが、それはあなたがページを下にスクロールしたときにのみロードします。

だからあなたもページをスクロールする必要が"lazy loading"

と呼ばれます。

from selenium import webdriver 
from bs4 import BeautifulSoup 
import time 

link = "http://oldnavy.gap.com/browse/category.do?cid=1035712&sop=true" 
base_url = "http://www.oldnavy.com" 

driver = webdriver.PhantomJS() 
driver.get(link) 

# --- 

# scrolling 

lastHeight = driver.execute_script("return document.body.scrollHeight") 
#print(lastHeight) 

pause = 0.5 
while True: 
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 
    time.sleep(pause) 
    newHeight = driver.execute_script("return document.body.scrollHeight") 
    if newHeight == lastHeight: 
     break 
    lastHeight = newHeight 
    #print(lastHeight) 

# --- 

html = driver.page_source 
soup = BeautifulSoup(html, "html5lib") 

#driver.find_element_by_class_name 

divs = soup.find_all("div", class_="sp_sm spacing_small") 
for div in divs: 
    links = div.find_all("a") 
    for link in links: 
    print base_url + link["href"] 

アイデア:https://stackoverflow.com/a/28928684/1832058

関連する問題