Python - 我正在尝试为 Steam 市场创建一个简单的网络抓取工具

Python - I'm trying to create a simple web scraper for the steam market

所以我在学校并且已经完成了我的 Python 介绍 class 我决定用我的技能尝试做一些有用的东西,所以我想制作一个脚本来抓取 Steam 市场网页,并在某件商品的价格等于或低于理想价格时通知我。我有点卡住了,希望我能得到任何提示来帮助我。我正在使用 urllib2 和 BeautifulSoup

from bs4 import BeautifulSoup
from urllib2 import urlopen
import time



item = str(raw_input('Please enter the item you are looking for(Exact URL): '))
price = str(raw_input('Please enter the price you want to buy the item at: '))

print('Searching for item at that price....\n' + item)

market = urlopen(item)

def getPrices(market,desiredPrice):
    while True:
        soup = BeautifulSoup(market)
        prices = soup.findAll('span',{'class':'market_listing_price market_listing_price_with_fee'})

        """
        So now my logic assumed I should do something like;

        if desiredPrice in prices:
            print('found item at the desired price!')
            return link_to_item

        """

        print('Searching...')
        time.sleep(20)


getPrices(market, price)

为了测试,我正在使用这个 Steam 市场 link:https://steamcommunity.com/market/listings/730/AK-47%20%7C%20Redline%20%28Field-Tested%29

而包含首页每件商品价格的跨度是class='market_listing_price market_listing_price_with_fee'

底线问题:
我似乎无法从每个 span 标签中获取数据;我只想获取浮动价格并将它们放入列表中,然后我就可以对其进行排序;然后我就可以将它们与所需价格进行比较,并找到低于所需价格的任何东西。

这些跨度中有很多文本。如果你过滤掉它,你应该没问题。

>>> [i.text.strip() for i in prices]
[u'Sold!', u'\xa5 33.69', u'\xa5 33.69', u'Sold!', u'\xa5 33.69', u'\xa5 33.69', u'\xa5 33.69', u'\xa5 33.69', u'\xa5 33.69', u'\xa5 33.69']

里面有一个日元的符号,除非你需要货币信息,否则你也可以把它去掉。

如果只获取数字,我会这样做:

prices = [i.text.strip() for i in prices]
prices =  [float(k) for k in [''.join([j for j in i if j in '0123456789.']) for i in prices] if k]
if min(prices)< desiredPrice:

请记住,您需要先 float(desiredPrice) 并确保您正在循环中读取网络数据。目前您将每 20 秒检查一次完全相同的数据!