【垂直搜索引擎搭建11】使用htmlparser获取页面的字符编码encoding

1,确定目标。对于html页面来说,一般都有确定编码的语句:

<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />

可以通过这一行的特征来取出网页的编码。

2,选出特征。

      1)它是meta标签
      2)具有http-equiv属性值为Content-Type
      3)将属性content中的值取出,先采用“;”分拆取第二个元素,再采用“=”分拆取第二个元素

3,一切就绪,编码实现。通过目标的选取,以及特征的勾画,已经可以找到解决方法了,像上一篇htmlparser中filter使用实战中讲的类似,还是采用AndFilter、NodeFilter以及HasAttributeFilter实现,代码如下:

package org.algorithm;



import java.io.IOException;
import java.io.UnsupportedEncodingException;

import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.AndFilter;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.nodes.TagNode;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;

public class getEncoding {
    //<meta http-equiv="Content-Type" content="text/html;charset=gb2312" /> //HTML编码
    public static String getContentEncoding(String url) throws ParserException, IOException ,UnsupportedEncodingException{
        String encoding = "";
        try{
            Parser parser = new Parser(url); //解析url链接

            NodeFilter filter = new AndFilter(new TagNameFilter("meta"),new HasAttributeFilter("http-equiv","Content-Type"));//获取meta标签下的http-equiv属性
            NodeList nodelist = parser.extractAllNodesThatMatch(filter);
            if(nodelist != null){
                TagNode list = (TagNode)nodelist.elementAt(0);
                encoding = list.getAttribute("content").split(";")[1].trim();//将content的内容看成数组,使用split(";")[1]通过分号划分来获得数组中的第1个元素“charset=gb2312”,第0个元素是“text/html”
                encoding = encoding.split("=")[1].trim();//仍然使用split()[]通过等于号来进行划分,获得数组中的第1个元素“gb2312”,第0个元素是“charset”
            }

        }catch(ParserException e){
            e.printStackTrace();
        }
        return encoding;
    }

    public static void main(String[] args) throws ParserException, IOException, UnsupportedEncodingException {
        String url="http://news.baidu.com/";
        String encoding = getContentEncoding(url);
        System.out.print(encoding);
    }

}

Output:

gb2312
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 可以使用类似于这样的代码来使用xpath获取div元素的内容: ``` from lxml import html tree = html.fromstring(html_content) div_element = tree.xpath('//div[@class="class-name"]')[0] div_content = div_element.text_content() print(div_content) ``` 这里使用了`html.fromstring()`函数将HTML字符串转换为可操作的树形结构,然后使用`xpath()`函数对树进行查询,获取匹配的div元素。`text_content()`函数可以获取元素的文本内容。 这里的示例代码使用`class-name`来查找特定的div元素,可以替换成其他属性值或者属性名来获取不同的div元素 ### 回答2: HTML是一种标记语言,用于描述网页的结构和呈现方式。XPath是一种用于在XML、HTML等结构化文档中进行导航和查询的语言。在HTML中,我们可以通过使用XPath表达式来获取div元素的内容。 要使用XPath获取div元素的内容,我们需要以下几个步骤: 1. 首先,我们需要创建一个HTML解析器,用于解析HTML文档。可以使用一些常见的HTML解析库,如BeautifulSoup或lxml。 2. 然后,我们需要加载HTML文档,可以从文件中加载,也可以从URL中加载。加载HTML文档后,就可以将其传递给HTML解析器进行解析。 3. 接下来,我们需要使用XPath表达式来选择div元素。XPath表达式由一系列的节点、操作符和轴组成,可以根据标签名、属性、层级关系等条件来选择元素。 4. 通过执行XPath表达式,我们可以获取所有符合条件的div元素。可以使用解析器提供的API方法,如find_all()或xpath()来执行XPath表达式并获取结果。 5. 最后,我们可以遍历获取到的div元素列表,进一步处理其中的内容,如提取文本或属性值等。 以下是一个使用Python和lxml库进行XPath获取div元素内容的示例代码: ```python import requests from lxml import etree # 加载HTML文档 url = 'https://example.com' response = requests.get(url) html = response.text # 创建HTML解析器 parser = etree.HTMLParser() # 解析HTML文档 tree = etree.HTML(html, parser=parser) # 使用XPath表达式选择div元素 div_elements = tree.xpath('//div') # 遍历div元素列表 for div in div_elements: # 处理div元素内容 content = div.text print(content) ``` 以上就是使用XPath获取div元素内容的简单示例。根据实际需求,可以根据div的层级关系、属性等条件来进一步筛选和处理元素内容。 ### 回答3: HTML是一种标记语言,用于描述网页的结构和元素。XPath是一种查询语言,用于在XML或HTML文档中定位和选择元素。 要使用XPath获取div元素的内容,可以按照以下步骤进行操作: 1. 首先,需要将HTML文档加载到一个解析器中,例如Python的lxml库。 2. 然后,使用XPath表达式来选择所需的元素。在这种情况下,XPath表达式应该是"//div",表示选择文档中的所有div元素。 3. 使用XPath解析器的findall或find方法,将XPath表达式应用到HTML文档中,并返回匹配的div元素列表。 4. 对于每个匹配的div元素,可以使用元素的text属性获取其内容。 以下是使用Python和lxml库来获取div元素的内容的示例代码: ```python import requests from lxml import etree url = "https://example.com" response = requests.get(url) html = etree.HTML(response.content) divs = html.xpath("//div") for div in divs: content = div.text print(content) ``` 注意,这只是一个简单的示例,实际的实现可能需要根据具体的情况进行调整和修改。同时,XPath表达式可以根据实际需要进行更加复杂的定位和选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值