代码之家  ›  专栏  ›  技术社区  ›  rofls

用beautifulsoup或golang colly解析html时出现问题

  •  0
  • rofls  · 技术社区  · 6 年前

    ftr我已经在这两个框架中成功地编写了很多scraper,但是我很困惑。这是我试图搜集的数据的截图(您也可以转到get请求中的实际链接):

    enter image description here

    我试图瞄准 div.section_content 以下内容:

    import requests
    from bs4 import BeautifulSoup
    html = requests.get("https://www.baseball-reference.com/boxes/ARI/ARI201803300.shtml").text
    soup = BeautifulSoup(html)
    soup.findAll("div", {"class": "section_content"})
    

    打印最后一行显示一些其他div,但不显示具有俯仰数据的div。

    但是,我可以在文本中看到它,因此它不是javascript触发的加载问题(短语“pitching”只出现在该表中):

    >>> "Pitching" in soup.text
    True
    

    以下是Golang一次尝试的缩略版本:

    package main
    
    import (
        "fmt"
        "github.com/gocolly/colly"
    ) 
    
    func main() {
        c := colly.NewCollector(
                colly.AllowedDomains("www.baseball-reference.com"),
        )   
        c.OnHTML("div.table_wrapper", func(e *colly.HTMLElement) {
                fmt.Println(e.ChildText("div.section_content"))
        })  
        c.Visit("https://www.baseball-reference.com/boxes/ARI/ARI201803300.shtml")
    

    } }

    1 回复  |  直到 6 年前
        1
  •  2
  •   damd    6 年前

    在我看来,HTML实际上被注释掉了,所以这就是为什么BeautifulGroup找不到它。在分析HTML字符串之前,请将注释标记从中移除,或者使用beautifulsoup to extract the comments 并分析返回值。

    例如:

    for element in soup(text=lambda text: isinstance(text, Comment)):
        comment = element.extract()
        comment_soup = BeautifulSoup(comment)
        # work with comment_soup