【问题标题】:Extract <b> text from a table从表格中提取 <b> 文本
【发布时间】:2023-03-12 19:04:01
【问题描述】:

嗨,我用来提取亚马逊图书畅销书排名的 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 in Books(参见 Books 前 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 { 显示:内联块;宽度:80px;文本对齐:' '正确的; }\n' '\n' '\n' '\n' '\n' '#4774\n' ' in\xa0Books > 健康、健身与节食 > 心理健康 > ' '幸福\n' '\n' '\n' '#55298\n' '在\xa0Books > 自助',

【问题讨论】:

  • 你用什么来执行 XPath?
  • 能否请您包含使用此//li[@... 代码的脚本部分
  • 包含更完整的脚本,谢谢。

标签: python web-scraping


【解决方案1】:

因为我不知道您使用的是哪个库或任何东西。我将为您提供这个使用 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)

【讨论】:

    猜你喜欢
    • 2012-05-05
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    相关资源
    最近更新 更多