日常爬虫过程中我们对于爬取到的网页数据需要进行解析,因为大多数数据是不需要的,所以我们需要进行数据解析,常用的数据解析方式有正则表达式,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();
}
}
```