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 秒检查一次完全相同的数据!
所以我在学校并且已经完成了我的 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 秒检查一次完全相同的数据!