import requests
import json
import pandas as pd
import csv
for i in range(100):
url = 'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=52674737378&score=0&sortType=5&page={}&pageSize=10&isShadowSku=0&fold=1'.format(i)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0'
}
# 使用request模块打开并获取网页内容
response = requests.get(url, headers=headers) # 禁止重定向
content = response.text[20:-2]
#print(content)
#两种方法解析json都可以
result = json.loads(content)
#result2 = response.json()
print(result)
data = result
"""
#pandas可以直接解析json,但是最好对相对规整的数据使用#########################################
data_table = pd.read_json(content)
data_table.to_csv(r'E:\vscode_code\爬虫测试\疫情\yiqing1_data.csv')
"""
for element in data['comments']:
content = element['content']
file=open(r"E:\vscode_code\爬虫测试\json提取\京东\comm.txt", 'a')
file.writelines(format(content))
#print(content)
#print("评论内容:{}".format(content))
print('爬取第{}页'.format(i+1))
print('finished')
import requests
import urllib3
import json
import urllib
import urllib.request
from bs4 import BeautifulSoup
for i in range(100):
url1 = 'https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv4403&productId=3487485&score=3&sortType=5&page='
url2 = str(i)
uel3 = '&pageSize=10&isShadowSku=0&rid=0&fold=1'
finalurl = url1+url2+uel3
print(finalurl)
xba = requests.get(finalurl)
content = xba.text[26:-2]
#print(content)
data=json.loads(xba.text[26:-2])
'''
for i in data['comments']:
content = i['content']
#print(content)
print("评论内容:{}".format(content))
'''
for element in data['comments']:
content = element['content']
file=open(r"E:\vscode_code\爬虫测试\json提取\京东\comm2.txt", 'a')
file.writelines(format(content))
#print(content)
#print("评论内容:{}".format(content))
print('爬取第{}页'.format(i+1))
print("finished")
上面两个对应不同的评论网页,思路一样
参考:
以后在使用json时,最好先输出一下参数,检查一下是否符合格式,这样就能减少错误,当然也可能有别的原因。
同时参考:
里面的程序用到了response.text[26:-2],这一步就是为了提取出正确的json格式数据
以后在json.loads(content)之前最好先print(content)看看这个content是不是标准的json格式