【发布时间】:2018-05-20 12:09:20
【问题描述】:
我有一个循环遍历多个网页的脚本,但是我遇到了一个小问题。我正在尝试将作者添加到列表中,但我的脚本从页面中提取了最后一位作者并将其应用于每个作者字段。如何让我的脚本将每个作者应用于相关标题?这是我的代码
from urllib.request import urlopen
from bs4 import BeautifulSoup as soup
import json
base_url = "https://archive.org/details/librivoxaudio?&sort=titleSorter"
data = []
n = 5
for i in range(1, n+1):
response = urlopen(base_url + "&page=" + str(i))
page_html = response.read()
response.close()
#html parsing
page_soup = soup(page_html, "html.parser")
#grabs info for each book
containers = page_soup.findAll("div",{"class":"item-ttl"})
authors = page_soup.findAll("span",{"class":"byv"})
for container in containers:
item = {}
item['type'] = "Public Domain Audiobook"
item['title'] = container.text.lstrip().strip()
for author in authors:
item['author'] = author.text
item['link'] = "https://archive.org/" + container.a["href"]
item['source'] = "LibriVox"
item['base_url'] = "https://librivox.org/"
data.append(item) # add the item to the list
with open("./json/librivoxTest.json", "w") as writeJSON:
json.dump(data, writeJSON, ensure_ascii=False)
这是 JSON 格式的输出示例
{
"type": "Public Domain Audiobook",
"title": "A Book of Old English Ballads",
"author": "Charles Whibley",
"link": "https://archive.org//details/book_old_english_ballads_1007_librivox",
"source": "LibriVox",
"base_url": "https://librivox.org/"
}, {
"type": "Public Domain Audiobook",
"title": "A Book of Scoundrels",
"author": "Charles Whibley",
"link": "https://archive.org//details/scoundrels_1712_librivox",
"source": "LibriVox",
"base_url": "https://librivox.org/"
}
“A Book of Scoundrels”的最后一位作者是正确的,但“A Book of Old English Ballads”的作者应该是 George Wharton Edwards。
【问题讨论】:
标签: json python-3.x beautifulsoup