【问题标题】:How can I get only a text from lists that are on another list?如何仅从另一个列表中的列表中获取文本?
【发布时间】:2021-10-26 14:23:49
【问题描述】:

今天我正在学习如何在 python 上使用 BeautifulSoup,并且在某一时刻,我必须使用一个列表上的列表。问题是我不知道如何应用 .text 或类似的列表。这是我的代码:

 from typing import List
from bs4 import BeautifulSoup
import requests
import pandas as pd
from decimal import Decimal

ListaPreciosCromos = list()

ListaUrl = ['https://steamcommunity.com/market/search?category_753_Game%5B%5D=tag_app_495570&category_753_cardborder%5B%5D=tag_cardborder_0&category_753_item_class%5B%5D=tag_item_class_2#p1_price_asc', 'https://steamcommunity.com/market/search?category_753_Game%5B%5D=tag_app_540190&category_753_cardborder%5B%5D=tag_cardborder_0&category_753_item_class%5B%5D=tag_item_class_2#p1_price_asc', 'https://steamcommunity.com/market/search?category_753_Game%5B%5D=tag_app_607210&category_753_cardborder%5B%5D=tag_cardborder_0&category_753_item_class%5B%5D=tag_item_class_2#p1_price_asc']
PageCromos = [requests.get(x) for x in ListaUrl]
SoupCromos = [BeautifulSoup(x.content, "html.parser") for x in PageCromos]
PrecioCromos = [x.find_all("span", {"data-price": True}) for x in SoupCromos]

for x in PrecioCromos:
    PreciossinText = x.text

print(PreciossinText)

显示下一个错误 = AttributeError: ResultSet 对象没有属性“文本”。您可能将元素列表视为单个元素。当你打算调用 find() 时,你调用了 find_all() 吗?

【问题讨论】:

    标签: python python-3.x web-scraping beautifulsoup request


    【解决方案1】:

    试试这个:

    from typing import List
    from bs4 import BeautifulSoup
    import requests
    import pandas as pd
    from decimal import Decimal
    
    ListaPreciosCromos = list()
    
    ListaUrl = ['https://steamcommunity.com/market/search?category_753_Game%5B%5D=tag_app_495570&category_753_cardborder%5B%5D=tag_cardborder_0&category_753_item_class%5B%5D=tag_item_class_2#p1_price_asc', 'https://steamcommunity.com/market/search?category_753_Game%5B%5D=tag_app_540190&category_753_cardborder%5B%5D=tag_cardborder_0&category_753_item_class%5B%5D=tag_item_class_2#p1_price_asc', 'https://steamcommunity.com/market/search?category_753_Game%5B%5D=tag_app_607210&category_753_cardborder%5B%5D=tag_cardborder_0&category_753_item_class%5B%5D=tag_item_class_2#p1_price_asc']
    PageCromos = [requests.get(x) for x in ListaUrl]
    SoupCromos = [BeautifulSoup(x.content, "html.parser") for x in PageCromos]
    PrecioCromos = [x.find_all("span", {"data-price": True}) for x in SoupCromos]        
            
    PreciossinText = [txt.text for x in PrecioCromos for txt in x]
    
    print(PreciossinText)
    

    输出:

    ['$0.05 USD', '$0.05 USD', '$0.04 USD', '$0.05 USD', '$0.04 USD', '$0.05 USD', '$0.05 USD', '$0.07 USD', '$0.06 USD', '$0.07 USD', '$0.06 USD', '$0.06 USD', '$0.06 USD', '$0.05 USD', '$0.06 USD', '$0.05 USD', '$0.07 USD']
    

    【讨论】:

    • 成功了!!无论如何都要将价格保留在各自的列表中?
    【解决方案2】:

    试试这个

    texts = [result.text for result_set in PrecioCromos for result in result_set]
    

    【讨论】:

      猜你喜欢
      • 2011-09-13
      • 2021-10-19
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 2011-10-13
      相关资源
      最近更新 更多