2017-09-26 132 views
0

我的目標是從鏈接中獲取特定標籤的數量,我想要抓取的。我手動檢查了標籤的數量,我的代碼找不到所有的標籤。BeautifulSoup找不到所有標籤

我試過不同的解析器,如「html.parser」,「html5lib」和「lxml」,但每次都會發生錯誤。

我的代碼:

from bs4 import BeautifulSoup 
from selenium import webdriver 
urls = ["http://www.basket.fi/sarjat/ottelu/?game_id=3502579&season_id=93783&league_id=4#mbt:2-400$t&0=1", 
"http://www.basket.fi/sarjat/ottelu/?game_id=3502523&season_id=93783&league_id=4#mbt:2-400$t&0=1", 
"http://www.basket.fi/sarjat/ottelu/?game_id=3502491&season_id=93783&league_id=4#mbt:2-400$t&0=1", 
"http://www.basket.fi/sarjat/ottelu/?game_id=3502451&season_id=93783&league_id=4#mbt:2-400$t&0=1", 
"http://www.basket.fi/sarjat/ottelu/?game_id=3502395&season_id=93783&league_id=4#mbt:2-400$t&0=1", 
"http://www.basket.fi/sarjat/ottelu/?game_id=3502407&season_id=93783&league_id=4#mbt:2-400$t&0=1"] 

for url in urls: 
    browser = webdriver.PhantomJS() 
    browser.get(url) 
    table = BeautifulSoup(browser.page_source, 'lxml') 
    print(len(table.find_all("tr", {"class":["row1","row2"]}))) 

輸出:

88 
87 
86 
66 
86 
59 

目標輸出:

88 
86 
87 
87 
86 
83 
+0

你能告訴我們你到底要湊什麼? – mostaszewski

回答

1

我基本上只是增加了一個延遲線到您的代碼。這有助於程序等待網頁完全加載並準備好使用BS4進行分析。

另請注意,我的輸出與您的目標輸出不同。但我仔細檢查了每個網址上包含「row1」和「row2」的「tr」的數量,看起來我的輸出是準確的(也許網站上的結果在您發佈問題後發生了一些變化)。

代碼:

import time 
from bs4 import BeautifulSoup 
from selenium import webdriver 

urls = ["http://www.basket.fi/sarjat/ottelu/?game_id=3502579&season_id=93783&league_id=4#mbt:2-400$t&0=1", 
"http://www.basket.fi/sarjat/ottelu/?game_id=3502523&season_id=93783&league_id=4#mbt:2-400$t&0=1", 
"http://www.basket.fi/sarjat/ottelu/?game_id=3502491&season_id=93783&league_id=4#mbt:2-400$t&0=1", 
"http://www.basket.fi/sarjat/ottelu/?game_id=3502451&season_id=93783&league_id=4#mbt:2-400$t&0=1", 
"http://www.basket.fi/sarjat/ottelu/?game_id=3502395&season_id=93783&league_id=4#mbt:2-400$t&0=1", 
"http://www.basket.fi/sarjat/ottelu/?game_id=3502407&season_id=93783&league_id=4#mbt:2-400$t&0=1"] 

for url in urls: 
    driver = webdriver.Chrome() 
    driver.get(url) 
    time.sleep(10) 
    table = BeautifulSoup(driver.page_source, 'lxml') 
    print(len(table.find_all("tr", {"class":["row1","row2"]}))) 

輸出:

88 
87 
86 
87 
86 
83