Web Scrape页面有多个部分

时间:2017-04-16 03:34:25

标签: python beautifulsoup

对python来说很新......而且我在第一个项目中试着亲自动手。

能够复制一些简单的演示...但我认为我尝试做的事情并没有太多复杂性。

我试图从NHL网站上搜集游戏日志

这是我提出的......类似的代码工作在网站的顶部(例如:获取年龄)但它在显示逻辑的部分失败(依赖于用户点击职业,游戏日志或分裂)

提前感谢您的帮助

Client

1 个答案:

答案 0 :(得分:0)

许多网页都会发生这种情况。这是因为某些内容是由初始下载的Javascript代码下载的。通过这样做,这些设计师能够向访问者显示页面中最重要的部分,而无需等待整个页面下载。

当您想要抓取页面时,您应该做的第一件事是检查它的源代码(通常在Windows环境中使用Ctrl-u)以查看您需要的内容是否可用。如果没有,那么你将需要使用BeautifulSoup以外的东西。

>>> getzlafURL = 'https://www.nhl.com/player/ryan-getzlaf-8470612?stats=gamelogs-r-nhl&season=20162017'
>>> import requests
>>> import selenium.webdriver as webdriver
>>> import lxml.html as html
>>> import lxml.html.clean as clean
>>> browser = webdriver.Chrome()
>>> browser.get(getzlafURL)
>>> content = browser.page_source
>>> cleaner = clean.Cleaner()
>>> content = cleaner.clean_html(content)
>>> doc = html.fromstring(content)
>>> type(doc)
<class 'lxml.html.HtmlElement'>
>>> open('c:/scratch/temp.htm', 'w').write(content)
775838

在文件temp.htm中搜索标题&#39; Ryan Getzlaf游戏日志&#39;我能够找到HTML代码的这一部分。正如您所看到的,它是关于您希望在原始下载的HTML中找到的内容。但是,需要这个额外的步骤来实现它。

              </div>
            </li>
    </ul>

    <h5 class="statistics__subheading">Ryan Getzlaf Game Logs</h5>

    <div id="gamelogsTable"><div class="responsive-datatable">

                                               

我应该提到有其他方法可以访问这些代码,其中一种是dryscrape。我根本无法在这台Windows机器上安装那个。