当我提取<td>
单元格的内容时,我试图在表格单元格中保留格式
。
会发生什么情况,如果中有两行文本(例如,一个地址),则代码可能如下所示:
<td>
地址行1 <br>
1地址行2 </td>
当colly提取它时,我得到以下信息: 地址行1地址行2
没有空格或换行符,因为所有html都已从文本中去除。
我该如何解决/解决这个问题,以便从<td>
接收可读文本
答案 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)
}
}