爬取不规范html网页文本时,用html5lib解析不规范的html文本

安装解析器: 

 pip install html5lib
from lxml import etree
from bs4 import BeautifulSoup

# text中<tr>标签只有闭合标签,没有起始标签
text = """
<table>
        <td>姓名</td>
        <td>年龄</td>
    </tr>
        <td>出生日期</td>
        <td>地址</td>
    </tr>
        <td>说明</td>
        <td>备注</td>
    </tr>
</table>
"""
# 默认是lxml解析
html = etree.HTML(text)
# 结果:[],lxml无法正确解析出不规范的标签
print(html.xpath('//table/tr[1]/td[1]/text()'))

#利用BeautifulSoup和html5lib先将不规范的html文本转为规范的文本再解析
soup = BeautifulSoup(text,'html5lib')
print(soup.prettify()) # 结果大概如下,自动补全了标签
"""
<html><head></head><body>
<table>
    <tbody>
        <tr>
            <td>姓名</td>
            <td>年龄</td>
        </tr>
        <tr>
            <td>出生日期</td>
            <td>地址</td>
        </tr>
        <tr>
            <td>说明</td>
            <td>备注</td>
        </tr>
    </tbody>
</table>
</body></html>
"""
html = etree.HTML(soup.prettify())
# 结果:['\n      姓名\n     ']
print(html.xpath('//table/tbody/tr[1]/td[1]/text()'))

 

<think>好的,我现在需要回答用户关于爬虫在爬取网页主要获取内容的问题。首先,用户提到了HTML文本、图片、链接、CSS、JavaScript,这些都是常见的爬取目标。根据用户提供的引用,我需要结合这些信息来构建回答。 首先,引用[1]提到用户想要的资源包括图片、JS、CSS和字体文件。这说明在解析网页,这些资源是通过分析HTML中的链接来获取的。可能需要用正则表达式或BeautifulSoup来提取这些资源的URL。例如,图片可能保存在images目录下,JS文件在scripts目录下,这些可以通过分组捕获来匹配特定的路径模式。 然后,引用[2]和引用[4]详细说明了BeautifulSoup如何解析HTML标签,如Tag对象的结构,以及如何通过类名查找特定的div元素。这可以帮助用户理解如何定位和提取HTML中的内容,比如文本、链接等。 引用[3]提到正则表达式在动态内容中的应用,当数据是通过HTML标签直接提供,比如在JavaScript生成的代码中,正则表达式可以直接从源代码中提取信息。例如,提取标题或其他动态生成的内容。 接下来,我需要将用户的问题拆解成各个部分,分别对应同的爬取内容。每个部分需要说明获取的方法和可能用到的技术,比如使用BeautifulSoup或正则表达式,并结合引用中的例子进行说明。 例如,对于HTML文本,可以提到使用BeautifulSoup解析标签内容,如提取标题或段落文本。对于图片,需要从img标签的src属性中提取URL,可能需要用到正则表达式或find_all方法。链接通常是从a标签的href属性获取,CSS和JS文件则是从link和script标签的src或href属性中提取。 同,用户可能还关心这些资源如何存储和处理,比如下载图片或保存文本内容。这部分可以简要提及,但主要焦点在提取方法上。 最后,生成相关问题需要考虑用户可能进一步想了解的方面,比如解析方法的优缺点、动态内容处理、资源存储策略以及反爬虫机制等。这些问题可以帮助用户深入理解爬虫的各个方面。</think>[用户可见层] # 爬虫爬取网页的主要内容与技术方法 网络爬虫在抓取网页,主要通过解析HTML结构获取以下核心内容: --- ## 一、主要获取内容 ### 1. **HTML文本** - **目标**:网页正文、标题(`<h1>`-`<h6>`)、段落(`<p>`)等结构化文本 - **技术方法**: - 使用`BeautifulSoup`解析标签内容,例如提取标题: ```python title = soup.find('title').get_text() ``` - 正则表达式匹配特定文本模式(如`r'<div>Title: (.*?)</div>'`)[^3] ### 2. **图片资源** - **目标**:`<img>`标签中的`src`属性指向的图片文件(如`images/1.png`) - **技术方法**: - 正则表达式捕获路径:`r'(images/.*?\.(png|jpg))'`[^1] - BeautifulSoup提取标签属性: ```python images = [img['src'] for img in soup.find_all('img')] ``` ### 3. **超链接** - **目标**:`<a>`标签中的`href`属性(如其他页面URL、文件下载链接) - **技术方法**: ```python links = [a['href'] for a in soup.find_all('a')] ``` ### 4. **CSS与JavaScript文件** - **目标**:`<link>`标签中的CSS文件、`<script>`标签中的JS文件 - **示例路径**:`scripts/lib/jquery.min.js`[^1] - **技术方法**: ```python css_files = [link['href'] for link in soup.find_all('link', rel='stylesheet')] js_files = [script['src'] for script in soup.find_all('script') if script.get('src')] ``` ### 5. **动态内容** - **目标**:通过JavaScript加载的数据(如AJAX请求返回的JSON) - **技术方法**: - 分析网络请求,直接调用API接口 - 正则表达式从页面源码中提取动态数据 --- ## 二、关键技术工具对比 | 方法 | 适用场景 | 示例引用 | |-----------------|----------------------------|--------------| | BeautifulSoup | 解析HTML标签和属性 | [^2][^4] | | 正则表达式 | 非结构化文本或动态内容匹配 | [^3] | | 网络请求分析工具 | 捕获动态加载的API请求 | - | --- §§ 相关问题 §§ 1. **如何高效提取嵌套在多层`<div>`中的文本?** 2. **动态网页(如React/Vue应用)爬取需要注意什么?** 3. **如何避免爬虫被网站反爬机制封锁?** 4. **图片和文件资源下载后如何分类存储?** [^1]: 引用[1] : 引用[2] [^3]: 引用[3] : 引用[4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值