python - 尝试将网页中的JS数据输出到.html输出文件中

标签 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/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))

最佳答案

这里的问题是:

  1. 在写入时使用 w ,它会用更新的文本替换整个文件。
  2. 对所有值使用相同的变量名称 soup
  3. 这里不需要 bs4 模块来解析 json 数据。

你能做的是:

安装pandas模块并创建一个数据框。 使用pip安装它:pip install pandasconda:conda install pandas

然后您可以使用dataframe并按照您喜欢的方式使用它。

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()) 来查看数据帧如何将值存储为字典并执行更多操作。

输出: enter image description here

您可以看到全文here

关于python - 尝试将网页中的JS数据输出到.html输出文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56519466/

相关文章:

Python 属性错误 : 'NoneType' object has no attribute 'save' when trying to save a cropped image

python - 如何在df.groupby之后将数据框列值作为窗口大小传递?

python - Yahtzee使用Asciitable,需要分配玩家点数

html - 如何禁用特定 DIV 上的 CSS 类

javascript - 如何解决 Ajax 上的 Invalid JSON Primitive 错误?

java - 给定字符串时,JSONArray 无法转换为 JSONObject

Python ctypes 如何跳过可选参数

java - 使用 servlet 与使用 jsp 打印 HTML。他们的优势是什么?

html - 声明忽略 parent 填充的背景

Android:使用json上传图片