Python:针对HTML内容的数据清洗

场景描述

在使用Python爬虫的时候经常需要对爬取的数据进行清洗,以此来过滤掉不需要的内容。对于爬取的结果为文本的数据经常采用正则(re.sub())来进行数据清洗,但是对于爬取的结果为HTML的数据如果还是采用正则来进行数据清洗的话往往会事倍功半,那么针对爬取的结果为HTML的数据又该如何进行数据清洗呢?

代码示例

# -*- coding: utf-8 -*-
import scrapy
import htmlmin
from lxml import etree
from lxml import html
from html import unescape


class TestSpider(scrapy.Spider):
    name = 'test'
    allowed_domains = ['www.gongkaoleida.com']
    start_urls = ['https://www.gongkaoleida.com/article/869186']
    # start_urls = ['https://www.gongkaoleida.com/article/869244']

    def parse(self, response):
        content = response.xpath('//article[@class="detail-info"]').getall()[0].replace('\n', '').replace('\r', '')
        content = unescape(content)
        tree = etree.HTML(content)
        # 查找包含“公考雷达”的标签
        str1 = tree.xpath('//p[contains(text(), "公考雷达")] | //a[contains(text(), "公考雷达")]/.. | //div[contains(text(), "公考雷达")]')
        # 查找包含“附件:”或“附件:”或“常见office文件后缀”的标签
        str2 = tree.xpath('//a[re:match(text(), "附件(\w+)?(:|:)") or re:match(text(), "(.doc|.xls|.ppt|.pdf)")]/..', namespaces={"re": "http://exslt.org/regular-expressions"})
        str3 = tree.xpath('//p[re:match(text(), "^(附件)(\w+)?(:|:)") or re:match(text(), "(.doc|.xls|.ppt|.pdf)")]', namespaces={"re": "http://exslt.org/regular-expressions"})
        str4 = tree.xpath('//span[re:match(text(), "附件(\w+)?(:|:)") or re:match(text(), "(.doc|.xls|.ppt|.pdf)")]/../..', namespaces={"re": "http://exslt.org/regular-expressions"})
        str5 = tree.xpath('//em[re:match(text(), "附件(\w+)?(:|:)") or re:match(text(), "(.doc|.xls|.ppt|.pdf)")]/../..', namespaces={"re": "http://exslt.org/regular-expressions"})
        # 查找href中包含gongkaoleida的标签
        str6 = tree.xpath('//*[re:match(@href, "gongkaoleida")]', namespaces={"re": "http://exslt.org/regular-expressions"})
        # 数据清洗
        for i in str1 + str2 + str3 + str4 + str5 + str6:
            p1 = html.tostring(i)
            p2 = unescape(p1.decode('utf-8'))
            content = content.replace(p2, '')
        # 压缩代码
        content = htmlmin.minify(content, remove_empty_space=True, remove_comments=True)
        print(content)

这里采用的是XPath + 正则的方式!

注意事项

  • 使用lxml中的XPath的正则方法(re:match())时需要结合命名空间(namespaces={"re": "http://exslt.org/regular-expressions"})使用,如:
    str6 = tree.xpath('//*[re:match(@href, "gongkaoleida")]', namespaces={"re": "http://exslt.org/regular-expressions"})
    
  • 使用Scrapy中的XPath的正则方法(re:match())时无需填写命名空间,如:
    attachment_title_list = response.xpath('//a[re:match(text(), "(.doc|.xls|.ppt|.pdf)")]/text()').getall()
    
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python贝壳二手房数据爬虫是指使用Python编程语言来实现对贝壳网站上二手房数据的自动化获取和提取的程序。 首先,我们需要了解贝壳网站的二手房数据的结构和呈现方式。贝壳网站上的二手房数据通常以页面的形式展示,并且数据分布在不同的标签或元素中。爬虫程序需要通过网络请求获取网页的HTML源代码,并使用PythonHTML解析库(如BeautifulSoup)对源代码进行解析和提取所需的数据。 针对贝壳二手房数据爬虫,我们可以按照以下步骤进行设计和实现: 1. 导入相关的Python库:需要导入requests库用于发送网络请求,以及BeautifulSoup库用于解析HTML源代码。 2. 构建URL链接:根据贝壳网站的页面结构和所需数据的筛选条件,构建相应的URL链接。 3. 发送网络请求:使用requests库发送网络请求,获取贝壳网站上对应页面的HTML源代码。 4. 解析HTML源代码:使用BeautifulSoup库对获取到的HTML源代码进行解析,提取所需的二手房数据。 5. 数据处理和存储:对提取到的二手房数据进行处理和清洗,可以使用Python的数据处理库(如pandas)进行进一步的数据分析和处理。最后,可以将处理后的数据存储到本地文件或数据库中。 6. 循环遍历:如果需要爬取多页的数据,可以使用循环遍历的方式获取更多的数据。 7. 异常处理:在爬虫程序中添加异常处理机制,例如网络请求失败、页面解析错误等情况的处理。 需要注意的是,在进行任何爬取操作之前,请确保你已经了解并遵守相关网站的爬虫规则和法律法规,同时合理设置爬取速度,避免对网站造成不必要的负担和干扰。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值