使用BeautifulSoup从Amazon页面提取作者名称

0 投票
1 回答
1447 浏览
提问于 2025-04-18 04:16

我正在尝试使用beautifulSoup从一个html文件中提取信息。

<a href="/s?_encoding=UTF8&amp;field-author=Reza%20Aslan&amp;search-alias=books&amp;sort=relevancerank">Reza Aslan</a> <span class="byLinePipe">(Author)</span>

我使用beautiful soup的findAll函数来提取作者Reza Azlan的信息,代码如下:

import urllib2
from bs4 import BeautifulSoup
import re


ecj_data = open("book1.html",'r').read()

soup = BeautifulSoup(ecj_data)

for definition in soup.findAll('span', {"class":'byLinePipe'}):
    definition = definition.renderContents()

使用print definition命令,我得到了:“发行日期:”

这意味着还有另一个类叫“byLiniePipe”。

<div class="buying"><span class="byLinePipe">Release date: </span><span style="font-weight: bold;">July 16, 2013</span> </div>

有没有人知道我该怎么区分这些代码,以便打印出作者的名字呢?

1 个回答

1

最好在作者名字附近找到一个独特的标记,而不是去查找一堆相似的元素。比如,我们可以通过书名的唯一 id 来找到书名,然后使用 find_next 函数找到紧接着的那个链接(这个链接里包含作者的名字)。下面是代码示例。

代码:

from bs4 import BeautifulSoup as bsoup
import requests as rq

url = "http://www.amazon.com/Zealot-Times-Jesus-Nazareth-ebook/dp/B00BRUQ7ZY"
r = rq.get(url)
soup = bsoup(r.content)

title = soup.find("span", id="btAsinTitle")
author = title.find_next("a", href=True)

print title.get_text()
print author.get_text()

结果:

Zealot: The Life and Times of Jesus of Nazareth [Kindle Edition]
Reza Aslan
[Finished in 2.4s]

希望这对你有帮助。

撰写回答