Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 试图将JS数据从网页输出到.html输出文件_Python_Html_Json_Python 3.x_Beautifulsoup - Fatal编程技术网

Python 试图将JS数据从网页输出到.html输出文件

Python 试图将JS数据从网页输出到.html输出文件,python,html,json,python-3.x,beautifulsoup,Python,Html,Json,Python 3.x,Beautifulsoup,我已经成功地将JS中列出的网站刮到了一个本地的.html文件中,但是输出不足 这些问题是: 它只生成最后一个查询(audioSource),而不生成其他请求 它只找到第1集,就停在那里。我如何让它重复,直到找到终点 非常感谢 import requests import json from bs4 import BeautifulSoup JSONDATA = requests.request("GET", "https://thisiscriminal.com/wp-json/crimi

我已经成功地将JS中列出的网站刮到了一个本地的.html文件中,但是输出不足

这些问题是:

  • 它只生成最后一个查询(audioSource),而不生成其他请求
  • 它只找到第1集,就停在那里。我如何让它重复,直到找到终点
非常感谢

import requests
import json
from bs4 import BeautifulSoup

JSONDATA = requests.request("GET", "https://thisiscriminal.com/wp-json/criminal/v1/episodes?posts=1000000&page=1")
JSONDATA = JSONDATA.json()

for line in JSONDATA['posts']:
    soup = BeautifulSoup(line['episodeNumber'],'lxml')
    soup = BeautifulSoup(line['title'],'lxml')
    soup = BeautifulSoup(line['image']['large'],'lxml')
    soup = BeautifulSoup(line['excerpt']['long'],'lxml')
    soup = BeautifulSoup(line['audioSource'],'lxml')
with open("output1.html", "w") as file:
    file.write(str(soup))
这里的问题是:

  • 写入时使用
    w
    将整个文件替换为更新的文本
  • 对所有值使用相同的变量名
    soup
  • 这里不需要
    bs4
    模块来解析json数据
  • 您可以做的是:

    安装
    pandas
    模块并创建数据帧。 使用pip
    pip安装pandas
    conda
    conda安装pandas

    然后,您可以使用
    数据帧
    ,并根据需要使用它

    import requests
    import json
    import pandas as pd
    import os
    
    JSONDATA = requests.request("GET", "https://thisiscriminal.com/wp-json/criminal/v1/episodes?posts=1000000&page=1")
    JSONDATA = JSONDATA.json()
    
    df = pd.DataFrame(JSONDATA)
    
    filename = 'Output.txt'
    os.mknod(filename) #create the filename above.
    
    with open(filename, 'a') as fopen:
        for i in range(len(df)):
            fopen.writelines(df.posts[i]['episodeNumber']+'\n')
            fopen.writelines(df.posts[i]['title']+'\n')
            fopen.writelines(df.posts[i]['image']['large']+'\n')
            fopen.writelines(df.posts[i]['excerpt']['long']+'\n')
            fopen.writelines(df.posts[i]['audioSource']+'\n')
            fopen.writelines("\n")
    fopen.close()
    
    这是您需要的完整代码。
    此外,您还可以使用
    print(df.head())
    查看数据框如何将值存储为字典,并执行更多操作

    输出:


    您可以使用
    pandas
    库查看全文,将数据保存到当前项目目录下的
    CSV
    文件中

    import requests
    import pandas as pd
    
    resp = requests.get("https://thisiscriminal.com/wp-json/criminal/v1/episodes?posts=1000000&page=1").json()
    df = pd.DataFrame(resp['posts'], columns=['episodeNumber', 'title', 'image','excerpt','audioSource'])
    #it will save data into post csv file and stored in current project directory
    df.to_csv("posts.csv")
    

    谢谢运行该命令时会出现以下输出错误:fopen.writelines(df.posts[i]['extract']['long']+'\n')中的文件“/test4.py”第19行类型错误:writelines()参数必须是它生成文件的字符串序列,但只生成前3个输出,并且没有摘录或音频源链接?而且,它只产生第一个结果-即第116集,我如何让它重复到最后,即第1集?这是不言自明的。您需要传递字符串值。因此,您可以执行
    fopen.writelines(str(df.posts[i]['extract']['long']+'\n'))