Python提取劳动法, 并转化为JSON格式

Python 爬虫领域的bs4

在 Python 爬虫领域,bs4BeautifulSoup4 的简称,它是一个 Python 库,用于从网页中提取数据。bs4 主要用于解析和处理 HTML 和 XML 文档,并提供了一个 Pythonic 的接口来操作这些文档。

具体来说,BeautifulSoup 能够:

  1. 解析 HTML/XML 文档:它将网页的 HTML 或 XML 转换成一个结构化的树形结构,便于访问各个元素。

  2. 查找和选择标签:使用 find()find_all() 等方法,你可以轻松地选择网页中的元素,比如特定的标签、类名、id 等。

  3. 修改内容:你可以修改文档中的内容,例如更新标签的文本、属性等。

下面是一个基本的使用示例:

from bs4 import BeautifulSoup
import requests

# 发送 GET 请求,获取网页内容
url = 'https://example.com'
response = requests.get(url)

# 解析 HTML 内容
soup = BeautifulSoup(response.text, 'html.parser')

# 查找网页中的所有链接
links = soup.find_all('a')

# 输出所有链接
for link in links:
    print(link.get('href'))

在这个示例中,BeautifulSoup 解析了从 example.com 获取的网页,并使用 find_all() 方法提取所有的 <a> 标签(即所有的链接)。然后,使用 link.get('href') 获取每个链接的 URL。

BeautifulSoup4 是一个非常强大且易于使用的工具,特别适合用在网页爬取和数据提取的工作中。

提取劳动法,并进行json格式化

import requests
from bs4 import BeautifulSoup
import re

def scrape_gongcheng_article(url):
    """从工程政府网站抓取劳动法条文内容并转换为结构化数据。
    Args:
        url (str): 工程政府网站的目标页面URL
    Returns:
        dict: 包含劳动法条文的字典,格式为 {中华人民共和国劳动法_第X条: 条文内容}
              如果发生错误,返回错误信息字符串

    """

    try:
        # 获取页面内容并设置正确的编码
        response = requests.get(url)
        response.encoding = 'utf-8'
        # 验证请求是否成功
        if response.status_code != 200:
            return f"请求失败,状态码: {
      
      response.status_code}"
        # 使用BeautifulSoup解析HTML内容
        soup = BeautifulSoup(response.text, 'html.parser')
        # 提取所有段落文本
        content_elements = soup.select('p')
        all_content = [p.get_text(strip=True) for p in content_elements] if content_elements else []
        # 使用正则表达式匹配条文格式(第X条)
        pattern = r'^第[一二三四五六七八九十百千]+条'
        filtered_content = [text for text in all_content if re.match(pattern, text)]

        # 构建结构化数据字典
        result_dict = {
    
    }
        for content in filtered_content:
            key = re.search(pattern, content).group()
            value = re.sub(pattern, '', content).strip()  # 移除条文编号
            result_dict[f'中华人民共和国劳动法_{
      
      key}'] = value
        return result_dict
    except Exception as e:
        return f"发生错误: {
      
      str(e)}"

  

# 程序入口
if __name__ == "__main__":
    import json
    url = "http://www.gongcheng.gov.cn/ggfw/ldjy_67871/bzgf_74300/202403/t20240315_2665680.html"
    result = scrape_gongcheng_article(url)
    # 将结果保存为JSON文件,使用UTF-8编码确保中文正确显示
    with open('output.json', 'w', encoding='utf-8') as f:
        json.dump(result, f, ensure_ascii=False, indent=4)