python爬虫之json数据解析

简介: python爬虫之json数据解析

日常爬虫过程中我们对于爬取到的网页数据需要进行解析,因为大多数数据是不需要的,所以我们需要进行数据解析,常用的数据解析方式有正则表达式,xpath,bs4。今天我们重点来了解一下什么是json。欢迎收藏学习,喜欢点赞支持。
json(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。json模块提供了四个功能:dumps、dump、loads、load,用于字符串 和 python数据类型间进行转换。
在日常执行爬虫项目的过程中,有时返回的不是一个html页面而是json格式数据,此时对数据的解析非常重要比,比如以下2种方式:
1.Json格式数据的爬取,采用request对以上的url进行爬取,在爬取的过程中,考虑到需要模拟真实的用户,因此需要添加cookie或者header参数。
```import requests

content=requests.get(url,headers=headers).content

2.对爬取的json格式数据的解析,数据已经爬取下来,存放在contend里面,接下来就是对数据的处理,这种可以在 www.bejson.com,对于这个数据的解析可以采用采用正则表达式解析,使用正则提取title字段、 
```import re

project = re.findall(r'"title":(.*?),', content)

实际项目案例测试,我们以爬取淘票票官网最近比较火的电影为例使用Java和爬虫代理IP,通过Jackson库解析stream流式JSON数据的示例代码,实现代码有亿牛云提供、
```import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.io.InputStream;

public class StreamJsonParserExample {

public static void main(String[] args) throws IOException {
    // 亿牛云(动态转发隧道代理) 爬虫代理加强版  代理服务器和端口
    HttpHost proxy = new HttpHost("www.16yun.cn", 8080);
    CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
    // 亿牛云(动态转发隧道代理) 爬虫代理加强版 用户名和密码
    credentialsProvider.setCredentials(
            new AuthScope(proxy.getHostName(), proxy.getPort()),
            new UsernamePasswordCredentials("16YUN", "16IP"));

    // 创建HTTP客户端
    CloseableHttpClient httpClient = HttpClientBuilder.create()
            .setProxy(proxy)
            .setDefaultCredentialsProvider(credentialsProvider)
            .build();

    // 创建HTTP请求
    HttpGet httpGet = new HttpGet("http://example.com/stream.json");

    // 执行HTTP请求
    CloseableHttpResponse response = httpClient.execute(httpGet, HttpClientContext.create());

    // 获取HTTP响应的输入流
    InputStream inputStream = response.getEntity().getContent();

    // 创建Jackson解析器
    JsonFactory jsonFactory = new JsonFactory();
    JsonParser jsonParser = jsonFactory.createParser(inputStream);
    ObjectMapper objectMapper = new ObjectMapper();

    // 逐个解析JSON对象
    while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
        if (jsonParser.currentToken() == JsonToken.FIELD_NAME && "name".equals(jsonParser.getCurrentName())) {
            jsonParser.nextToken();
            String name = objectMapper.readValue(jsonParser, String.class);
            System.out.println("Name: " + name);
        }
        // 解析其他字段
    }

    // 关闭HTTP响应和输入流
    EntityUtils.consume(response.getEntity());
    inputStream.close();
}

}

```

相关文章
|
4天前
|
XML 存储 数据格式
python path解析基础
python path解析基础
12 0
|
4天前
|
数据采集 Python
Python HTML解析详解
Python HTML解析详解
7 0
|
7天前
|
JSON 安全 前端开发
解析FormData格式数据:Python实践指南
解析FormData格式数据:Python实践指南
13 1
|
13天前
|
JSON 安全 Swift
【Swift开发专栏】Swift中的JSON解析与处理
【4月更文挑战第30天】本文介绍了Swift中的JSON解析与处理。首先,讲解了JSON的基础,包括其键值对格式和在Swift中的解析与序列化方法。接着,展示了如何使用`Codable`协议简化JSON操作,以及处理复杂结构的示例。通过这些内容,读者能掌握在Swift中高效地处理JSON数据的方法。
|
13天前
|
Linux API Python
【python】如何通过python来发邮件,各种发邮件方式详细解析
【python】如何通过python来发邮件,各种发邮件方式详细解析
|
13天前
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之在DataWorks中,使用JSON解析函数将MySQL表中的字段解析成多个字段将这些字段写入到ODPS(MaxCompute)中如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
27 3
|
14天前
|
Python
使用Python解析网页和正则表达式
使用Python解析网页涉及`requests`和`re`模块。首先导入这两个模块,然后用`requests.get()`发送HTTP请求获取URL内容。通过`.text`属性得到HTML文本。接着,利用正则表达式和`re.search()`匹配特定模式(如网页标题),并用`.group(1)`获取匹配数据。最后,对提取的信息进行处理,如打印标题。实际操作时,需根据需求调整正则表达式。
15 2
|
2天前
PandasTA 源码解析(二十三)
PandasTA 源码解析(二十三)
7 0
|
2天前
PandasTA 源码解析(二十二)(3)
PandasTA 源码解析(二十二)
5 0
|
2天前
PandasTA 源码解析(二十二)(2)
PandasTA 源码解析(二十二)
9 2

推荐镜像

更多