与BeautifulSoup的刮表

时间:2016-01-31 21:12:52

标签: python web-scraping beautifulsoup

在第一段代码中,我可以使用BS获取感兴趣的表格中的所有信息:

from urllib import urlopen
from bs4 import BeautifulSoup

html = urlopen("http://www.pythonscraping.com/pages/page3.html")
soup = BeautifulSoup(html)

for i in soup.find("table",{"id":"giftList"}).children:
    print child

打印产品列表。

我想打印tournamentTable here中的行(所需信息位于class=deactivateclass=odd deactivate,日期位于class=center nob-border):

from urllib import urlopen
from bs4 import BeautifulSoup

html = urlopen("http://www.oddsportal.com/hockey/russia/khl/results/#/page/2.html")
soup = BeautifulSoup(html)

#for i in soup.find("table",{"id":"tournamentTable"}).children:
#    print i
for i in soup.find("table",{"class":"table-main"}).children:
    print i

但是那会在页面上打印其他表格。当我尝试使用{"id":"tournamentTable"}指定感兴趣的表时,它会返回Nonetype

我错过了什么,我无法访问所需的表格&内的信息?

1 个答案:

答案 0 :(得分:3)

urllib.urlopen返回网页内容时,它会从关闭JavaScript 的网址返回HTML 。在您的情况下,这意味着当urllib加载相关网址时,id="tournamentTable"的表格实际上从未加载。

您可以通过浏览器中的关闭JavaScript 并加载网址来观察此行为。

要抓取包含JavaScript呈现内容的网页,您可能需要考虑使用浏览器自动化程序包,例如 Selenium 。如果你经常刮,你可能还想下载一个JavaScript切换器'插件,允许您轻松地打开和关闭JavaScript。