日常爬虫过程中我们对于爬取到的网页数据需要进行解析,因为大多数数据是不需要的,所以我们需要进行数据解析,常用的数据解析方式有正则表达式,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(); }
}
```
Copyright © 2023 leiyu.cn. All Rights Reserved. 磊宇云计算 版权所有 许可证编号:B1-20233142/B2-20230630 山东磊宇云计算有限公司 鲁ICP备2020045424号
磊宇云计算致力于以最 “绿色节能” 的方式,让每一位上云的客户成为全球绿色节能和降低碳排放的贡献者