当前位置: 首页 > 知识库问答 >
问题:

网页抓取代码中的JSON错误,如何修复?

丁立果
2023-03-14

我正试图使用此代码从消费者事务评论网站收集评论。但我不断地出错,特别是在dateElements中

from bs4 import BeautifulSoup
import requests
import pandas as pd
import json
print ('all imported successfuly')

# Initialize an empty dataframe
df = pd.DataFrame()
for x in range(1, 5):
    names = []
    headers = []
    bodies = []
    ratings = []
    published = []
    updated = []
    reported = []

    link = (f'https://www.consumeraffairs.com/online/allure-beauty-box.html?page={x}')
    print (link)
    req = requests.get(link)
    content = req.content
    soup = BeautifulSoup(content, "lhtml" target="_blank">xml")
    articles = soup.find_all('div', {'class':'rvw js-rvw'})
    for article in articles:
        names.append(article.find('strong', attrs={'class': 'rvw-aut__inf-nm'}).text.strip())
        try:
            bodies.append(article.find('p', attrs={'class':'rvw-bd'}).text.strip())
        except:
            bodies.append('')

        try:
            ratings.append(article.find('div', attrs={'class':'stars-rtg stars-rtg--sm'}).text.strip())
        except:
            ratings.append('')
        dateElements = article.find('span', attrs={'class':'ca-txt-cpt'}).text.strip()

        jsonData = json.loads(dateElements)
        published.append(jsonData['publishedDate'])
        updated.append(jsonData['updatedDate'])
        reported.append(jsonData['reportedDate'])


    # Create your temporary dataframe of the first iteration, then append that into your "final" dataframe
    temp_df = pd.DataFrame({'User Name': names, 'Body': bodies, 'Rating': ratings, 'Published Date': published, 'Updated Date':updated, 'Reported Date':reported})
    df = df.append(temp_df, sort=False).reset_index(drop=True)

print ('pass1')


df.to_csv('AllureReviews.csv', index=False, encoding='utf-8')
print ('excel done')

这就是我得到的错误

回溯(最后一次调用):文件“C:/Users/Sara Jitkresorn/PycharmProjects/untitled/venv/caffirs.py”,第37行,jsonData=json。加载(dateElements)文件“C:\Users\Sara-Jitkresorn\AppData\Local\Programs\Python\Python37\lib\json\u_init\u_.py”,第348行,在加载返回\u默认\u解码器中。解码文件“C:\Users\Sara Jitkresorn\AppData\Local\Programs\Python\Python37\lib\json\decoder.py”,第337行,在decode obj中,end=self。raw_decode(s,idx=_w(s,0).end())文件“C:\Users\Sara Jitkresorn\AppData\Local\Programs\Python\Python37\lib\json\decoder.py”,第355行,在raw_decode中从None json中引发JSONDECODEROR(“期望值”,s,err.value)。解码器。JSONDecodeError:应为值:第1行第1列(字符0)

共有2个答案

国阳
2023-03-14

dateElements不包含可由json解析的字符串。loads()因为它只是一个文本字符串,例如原始评论:2020年2月15日

更改这些行以绕过此:

try:
    ratings.append(article.find('div', attrs={'class':'stars-rtg stars-rtg--sm'}).text.strip())
except:
    ratings.append('')
dateElements = article.find('span', attrs={'class':'ca-txt-cpt'}).text.strip()

published.append(dateElements)

temp_df = pd.DataFrame({'User Name': names, 'Body': bodies, 'Rating': ratings, 'Published Date': published})
df = df.append(temp_df, sort=False).reset_index(drop=True)

您还必须注释掉这两行:

# updated = []
# reported = []

您的代码运行时不会出现错误,尽管您仍然无法获得BodyRating的数据。

df打印出来到这里:

    User Name   Body    Rating  Published Date
0   M. M. of Dallas, GA             Original review: Feb. 15, 2020
1   Malinda of Aston, PA            Original review: Sept. 21, 2019
2   Ping of Tarzana, CA             Original review: July 18, 2019
赵永新
2023-03-14

除上述代码外,我们还可以获得评级和非重复数据,如下所示:-

from bs4 import BeautifulSoup
import requests
import pandas as pd
print ('all imported successfuly')

# Initialize an empty dataframe
df = pd.DataFrame()
for x in range(1, 5):
    names = []
    headers = []
    bodies = []
    ratings = []
    published = []
    updated = []
    reported = []
    dateElements = []

    link = (f'https://www.consumeraffairs.com/online/allure-beauty-box.html?page={x}')
    print (link)
    req = requests.get(link)
    content = req.content
    soup = BeautifulSoup(content, "lxml")
    articles = soup.find_all('div', {'class':'rvw js-rvw'})
    for article in articles:
        names.append(article.find('strong', attrs={'class': 'rvw-aut__inf-nm'}).text.strip())
        try:
            bodies.append(article.find('div', attrs={'class':'rvw-bd'}).text.strip())
        except:
            bodies.append('NA')

        try:
            ratings.append(article.find('meta', attrs={'itemprop': 'ratingValue'})['content'])
        except:
            ratings.append('NA')
        dateElements.append(article.find('span', attrs={'class':'ca-txt-cpt'}).text.strip())
    # Create your temporary dataframe of the first iteration, then append that into your "final" dataframe
    temp_df = pd.DataFrame({'User Name': names, 'Body': bodies, 'Rating': ratings, 'Published Date': dateElements})
    df = df.append(temp_df, sort=False).reset_index(drop=True)

print ('df')
 类似资料:
  • 我写了这段代码来从Flipkart的手机类别中抓取数据。我面临的问题是当元素在那里时会出现属性错误(“属性错误:'NoneType'对象没有属性'text'”)。我如何修改此代码才能工作。如果有元素,我需要将数据填充为“不可用”。请参阅下面的代码。我是编程初学者,任何帮助都将不胜感激。 ''' 导入请求 从bs4导入BeautifulSoup 导入csv 进口再 base_url=”https:/

  • 本文向大家介绍Python urllib、urllib2、httplib抓取网页代码实例,包括了Python urllib、urllib2、httplib抓取网页代码实例的使用技巧和注意事项,需要的朋友参考一下 使用urllib2,太强大了 试了下用代理登陆拉取cookie,跳转抓图片...... 文档:http://docs.python.org/library/urllib2.html 直接上

  • 我是python新手,正在尝试从以下站点获取数据。虽然这段代码适用于不同的站点,但我无法让它适用于nextgen stats。有人想知道为什么吗?下面是我的代码和我得到的错误 下面是我得到的错误 df11=pd。读取html(urlwk1)回溯(上次调用):文件“”,第1行,在文件“C:\Users\USERX\AppData\Local\Packages\PythonSoftwareFounda

  • 这是我第一次尝试编码,所以请原谅我的粗鲁。我试图通过以下链接来学习网页刮刮:https://data.gov.sg/dataset/industrial-arbitry-court-arwards-by-nature-of-trade-distrates?view_id=d3e444ef-54ed-4d0b-b715-1ee465f6d882&resource_id=c24d0d00-2d12-4

  • 问题内容: 我想在PHP中检索链接(网页)的HTML代码。例如,如果链接是 那么我要提供该页面的HTML代码。我想检索此HTML代码并将其存储在PHP变量中。 我怎样才能做到这一点? 问题答案: 如果您的PHP服务器允许使用url fopen包装器,则最简单的方法是: 如果需要更多控制,则应查看cURL函数:

  • 我得到这个错误: 命令:delete Number:1 java。sql。SQLException:未绑定到语句的值 我该怎么解决这个问题?是我漏掉了什么还是语法错了? Java 这应该只是从列表中删除了任务。