【发布时间】:2020-12-11 22:42:53
【问题描述】:
我正在尝试收集有关亚马逊上某些书籍的一些信息,但我遇到了一个我无法理解的奇怪故障错误。起初我以为是亚马逊阻止了我的连接,但后来我注意到请求有“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]
这部分工作正常,我可以获得正常价格和促销价格(如果存在),甚至是货币。但是当我这样做时:
isbn = soup.select("td.bucket > .content > ul > li")[4].contents[1].string.strip().replace("-", "")
我得到“IndexError:列表索引超出范围”。但是如果我调试代码,内容其实是有的!
这是 BeautifulSoup 的错误吗?请求响应是否太长?
【问题讨论】:
-
是
soup.select("td.bucket > .content > ul > li")[4]抛出错误还是contents[1]? -
@sintribu
soup.select("td.bucket > .content > ul > li")[4] -
我不知道这对你有什么帮助,但是当我运行这段代码时,它对我来说运行良好。我只需要在顶部添加几个导入,在底部添加一个
print(isbn),然后我得到9780241985113的输出 -
它有时对我有用,但对其他人无效。网络抓取是一件奇怪的事情???
-
哇!同样在这里。 4 次中有 3 次对我有用。
标签: python beautifulsoup python-requests