【问题标题】:Retrieve Text From Span Using Scrapy使用 Scrapy 从 Span 中检索文本
【发布时间】:2021-01-13 01:08:16
【问题描述】:

我无法从此 HTML 代码中提取“添加到购物车”文本。我是网络抓取的新手,所以我不知道如何处理这个问题。我需要你的帮助。

<button data-t-events="A" data-t-e-var78="$ - Add To Cart" type="button" class="btn btn-primary btn-wide" data-reactid=".8.1.0">
    
    <span data-reactid=".8.1.0.0" class="">ADD TO CART </span><i class="fa fa-caret-right" data-reactid=".8.1.0.1"></i></button>

我试过了

products = response.css('.btn-wide::text').extract_first()
print(products)

 products = response.css('.btn-wide span::text').extract_first()
 print(products)

【问题讨论】:

  • 您可能将print 响应为空,因为在您的代码中我可以看到data-reactid=".8.1.0.0"。这意味着该网站正在使用 Reactjs。为了提取数据,你首先需要渲染它,以便scrapy可以看到buttonspan标签。尝试使用该网站的标题,您将能够使用您已经尝试过的上述代码提取Add to Cart。如果没有,请提供网站链接,我会帮助您。
  • 我尝试使用这个网站curl.trillworks.com 在网络选项卡中获取标题,但我认为我没有复制正确的网络文件标题

标签: python html selenium beautifulsoup scrapy


【解决方案1】:

使用 XPath 和 data_reactid 的一种方式是:

response.xpath('//span[@data-reactid=".8.1.0.0"]/text()').get()

【讨论】:

  • 我尝试使用此命令,但在打印变量时,我得到一个空白列表或单词 NONE
  • 可能是因为这部分html是由JavaScript生成的,如果你添加URL,我会看看。
  • response.xpath("//*[@class='btn btn-primary btn-wide']//text()").get()
【解决方案2】:

我看到你用beautifulsoup 标记了你的问题,所以这是这个库的一种可能的解决方案:

from bs4 import BeautifulSoup


txt = '''<button data-t-events="A" data-t-e-var78="$ - Add To Cart" type="button" class="btn btn-primary btn-wide" data-reactid=".8.1.0">
    
    <span data-reactid=".8.1.0.0" class="">ADD TO CART </span><i class="fa fa-caret-right" data-reactid=".8.1.0.1"></i></button>
'''

soup = BeautifulSoup(txt, 'html.parser')

text = soup.select_one('.btn-wide span').get_text(strip=True)
print(text)

打印:

ADD TO CART

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    相关资源
    最近更新 更多