【问题标题】:web scrape save to specific json in python, bs4网页抓取保存到python,bs4中的特定json
【发布时间】:2019-09-21 18:21:43
【问题描述】:

我有以下 Python 代码:

import requests
import json
from bs4 import BeautifulSoup

headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 4.3; nl-nl; SAMSUNG GT-I9505 Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36'}

chapter = 0
while chapter < 3 :
    url = 'http://www.komikgue.com/manga/one-piece/{chapter}/'
    response = requests.get(url, headers = headers)
    soup = BeautifulSoup(response.text, 'html.parser')
    mangas = soup.find_all('img', class_="img-responsive")
    chapter += 1
    def get_manga_details(manga):
        src = manga.find('img', class_= "img-responsive").find("img")["src"]
        alt = manga.find('img', class_= "img-responsive").find("img")["alt"]
        return {
            "chapter": chapter,
            "src": src,"alt": alt
            }
    all_mangas = [get_manga_details(manga) for manga in mangas]
    with open("manga.json", "w") as write_file:
        json.dump(all_mangas, write_file)
        print("Success")

此代码在 cmd 中运行,但产生空输出。 哪错了,请教教我

我希望它是:

{
  "chapter": "number": 1[
    {
      "src": "here", "alt" : "here",
      "src": "here", "alt" : "here"
    }]


}

请指导我

【问题讨论】:

  • 网址返回“未找到”。

标签: json python-3.x beautifulsoup


【解决方案1】:

您的代码有很多问题。首先,您尝试访问的 URL 返回 404,您需要使用前导零调整章节编号。其次,您的逻辑和循环没有多大意义,例如在循环内定义函数和列表,然后期望输出包含所有章节。此外,您在不需要的函数中再次调用 BeautifulSoup 的 find 函数,您可以直接访问属性。 请参阅下面的代码,它可以在我的机器上运行

import requests
import json
from bs4 import BeautifulSoup

headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 4.3; nl-nl; SAMSUNG GT-I9505 Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36'}

chapter = 1
allmangas=[]
def get_manga_details(manga,i):
    print(manga)
    src = manga["src"]
    alt = manga["alt"]
    return {
            "number": i,
            "src": src,"alt": alt
            }    

while chapter < 3 :
    url = 'http://www.komikgue.com/manga/one-piece/'+str(chapter).rjust(3,'0')
    response = requests.get(url, headers = headers)
    soup = BeautifulSoup(response.text, 'html.parser')
    mangas = soup.find_all('img', class_="img-responsive")
    print(mangas)
    allmangas.append({'chapter':chapter, 'data':[get_manga_details(manga,i) for i,manga in enumerate(mangas[:-1])]})
    chapter += 1
with open("manga.json", "w") as write_file:
    json.dump(allmangas, write_file)
    print("Success")

【讨论】:

  • 我找到了重复的对象,如何删除它?
  • 你遇到过什么样的重复数据
  • 在最后一行
猜你喜欢
  • 1970-01-01
  • 2020-02-24
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多