2017-09-26 96 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