使用gocolly抓取时如何在html表格单元格中保留换行符

时间:2018-09-07 06:05:05

标签: go web-scraping

当我提取<td>单元格的内容时,我试图在表格单元格中保留格式

会发生什么情况,如果中有两行文本(例如,一个地址),则代码可能如下所示: <td>地址行1 <br> 1地址行2 </td>

当colly提取它时,我得到以下信息: 地址行1地址行2

没有空格或换行符,因为所有html都已从文本中去除。

我该如何解决/解决这个问题,以便从<td>接收可读文本

2 个答案:

答案 0 :(得分:0)

据我所知gocolly不支持这种格式,但是您可以通过使用htmlquery(内部使用gocolly)软件包的OutputHTML方法来进行如下操作

const htmlPage = `
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head>
    <title>Your page title here</title>
  </head>
  <body>
    <p>
    AddressLine 1 
    <br>
    AddresLine 2
    </p>
  </body>
</html>
`

doc, _ := htmlquery.Parse(strings.NewReader(htmlPage))
xmlNode := htmlquery.FindOne(doc, "//p")
result := htmlquery.OutputHTML(xmlNode, false)

结果变量的输出现在如下所示:

 AddressLine 1
   <br/>
 AddresLine 2

您现在可以通过<br/>标记解析结果,并实现所需的结果。

但是我也是新手,所以也许可能会有更好的方法。

答案 1 :(得分:0)

gocolly在后​​台使用goquery。您可以调用所有Selection方法,包括Html()

  

功能(*选择)HTML

     

func (s *Selection) Html() (ret string, e error)

     

HTML获取匹配元素集中第一个元素的HTML内容。它包括文本和注释节点。

这是获取html内容的方法:

c.OnHTML("tr", func(e *colly.HTMLElement) {
    // You can find the elem
    h, _ := e.DOM.Find("td").Html()
    fmt.Printf("=> %s \n", h)


    // ...or you can loop thru all of them
    elem.DOM.Each(func(_ int, s *goquery.Selection) {
        h, _ := s.Html()
        fmt.Printf("=> %s \n", h)
    }
}