我正在尝试收集有关 Amazon 上某些可用书籍的一些信息,但遇到了一个我无法理解的奇怪故障错误。起初我以为是亚马逊阻止了我的连接,但后来我注意到请求有一个“200 OK”,并且它具有相应页面的真实 HTML 内容。
我们以这本书为例:https : //www.amazon.co.uk/All-Rage-Cara-Hunter/dp/0241985110
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
url = 'https://www.amazon.co.uk/All-Rage-Cara-Hunter/dp/0241985110/ref=sr_1_1?crid=2PPCQEJD706VY&dchild=1&keywords=books+bestsellers+2020+paperback&qid=1598132071&sprefix=book%2Caps%2C234&sr=8-1'
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.content, features="lxml")
price = {}
if soup.select("#buyBoxInner > ul > li > span > .a-text-strike") != []:
price["regular_price"] = float(
soup.select("#buyBoxInner > ul > li > span > .a-text-strike")[0].string[1:].replace(",", "."))
price["promo_price"] = float(soup.select(".offer-price")[0].string[1:].replace(",", "."))
else:
price["regular_price"] = float(soup.select(".offer-price")[0].string[1:].replace(",", "."))
price["currency"] = soup.select(".offer-price")[0].string[0]
Run Code Online (Sandbox Code Playgroud)
这部分工作正常,我可以有正常价格和促销价格(如果存在),甚至是货币。但是当我这样做时:
isbn = soup.select("td.bucket …Run Code Online (Sandbox Code Playgroud) 我试图在每次更新时对列表的值求和.所以为此,我有这个函数,每次表插入或删除一行时都会执行,但是现在,它只是将值发送到控制台:
function update_price(){
$("#table-content tr td:nth-child(3)").each(function() {
console.log($(this).find("div").val());
});
}
Run Code Online (Sandbox Code Playgroud)
与之关联的HTML代码如下所示:
<tbody id="table-content">
<tr class="table-content-line">
<td>9789898818386</td>
<td>Fale Menos, Comunique Mais</td>
<td>
<div class="form-group">
<input type="number" data-number-to-fixed="2" data-number-stepfactor="1" class="auto form-control price" value="12" step=".01">
</div>
</td>
<td>2</td>
<td>
<span class="remove-action">
<i class="fa fa-times-circle"></i>
</span>
</td>
</tr>
...
</tbody>
Run Code Online (Sandbox Code Playgroud)
由于一些奇怪的原因,当我使用.html()而不是时.val(),它返回用户输入的HTML代码,但是当我使用时不会发生同样的情况.val().
如果您有任何建议,请告诉我,也许我做错了什么,我还没有检查.
谢谢,
mikeysantana