您好,我用于提取亚马逊上一本书的畅销书排名的 python 代码是:
from lxml import html
import requests
from time import sleep
def parse(url):
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36'}
page = requests.get(url,headers=headers)
for i in range(20):
sleep(3)
try:
doc = html.fromstring(page.content)
XPATH_BSR = '//li[@id="SalesRank"]//text()'
以这本书为例:https://www.amazon.com/dp/0965437221
我只想要畅销书编号 590345,但我的输出却一团糟:
谢谢。
{'BSR': '亚马逊畅销书排名:\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '图书中的#590,345(查看图书中的前 100 名)\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '.zg_hrsr { 边距:0;填充:0;列表样式类型:无; }\n' '.zg_hrsr_item { 边距:0 0 0 10px; }\n' '.zg_hrsr_rank { 显示:内联 block ;宽度:80px;文本对齐:' '正确的; }\n' '\n' '\n' '\n' '\n' '#4774\n' ' in\xa0Books > 健康、健身和节食 > 心理健康 > ' '幸福\n' '\n' '\n' '#55298\n' ' in\xa0Books > 自助',
最佳答案
因为我不知道您使用的是哪个库或其他任何东西。我将为您提供这个使用 requests-html 库的解决方案。
from requests_html import HTMLSession
session = HTMLSession()
page = session.get('https://www.amazon.com/dp/0965437221')
rank = page.html.find("#SalesRank").text.split('#')[1].split()[0]
print(rank)
另一种方式,假设上面的输出是字符串将直接提取排名,如下所示:
rank = your_output.split('#')[1].split()[0]
print(rank)
关于python - 从表格中提取 <b> 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53254481/