我的目标是从链接中获取我想要抓取的特定标签的数量。我已经手动检查了标签的数量,而我的代码找不到所有标签。
我尝试了不同的解析器,例如“html.parser”,“html5lib”和“lxml”,但每次都会出现错误。
我的代码:
case when
输出:
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
答案 0 :(得分:1)
我基本上只是为你的代码添加了延迟行。这有助于程序等待网页完全加载并准备好使用BS4进行解析。
另请注意,我的输出与您的目标输出不同。但我仔细检查了#34; tr"包含" row1"和" row2"在每个网址上,似乎我的输出是准确的(也许在您发布问题之后网站上的结果发生了一些变化)。
代码:
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