python 爬取steam/csgo市场数据

在不登录的情况下频繁访问steam市场很容易被禁止访问,由于steam社区市场被墙了,所以需要挂vpn才能正常爬数据

首先挂好VPN,登录网页版steam,得到cookies和user-agent的内容,然后复制到headers中的cookies和user-agent位置上

设置好相关的路径后就可以了
得到的数据会保存到csv文件中

csgo的每一种箱子都会有一个对应的id,得到相应的ID然后保存到列表中就可以了,只写了得到箱子在售量和起价数据的程序,其他的东西原理上应该都差不多

初学python,有什么错误请多多指教

import sys
sys.path.append(r'E:\anaconda\Lib\site-packages')

from pyquery import PyQuery as pq
import requests
from urllib.parse import urlencode
from lxml import etree
import time
import random
import csv

base_url='https://steamcommunity.com/market/itemordershistogram?'

headers={   'Host': 'steamcommunity.com',
            'Referer': 'https://steamcommunity.com/market',
            'X-Requested-With': 'XMLHttpRequest',
            'Connection': 'keep-alive',
            'Cookie':' ',
            'user-agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Mobile Safari/537.36',
            }

retry_id_list = []
def get_page(case_id):
    params = {'country': 'CN',
              'language': 'schinese',
              'currency': '23',   #货币
              'item_nameid': case_id,
              'two_factor': 0              
            }

    url = base_url + urlencode(params)
    
    try:
        response = requests.Session().get(url,headers=headers)
        if response.status_code==200:
            print('successully get page')
            return response.json()
    except requests.ConnectionError as e:
        retry_id_list.append(case_id)
        print('error: ',e.args)
        return 0

def parse_page(json):
    if json:
        sell_items = json.get('sell_order_summary')
        html = etree.HTML(sell_items)
        num_and_price = html.xpath('//span/text()')
        price = num_and_price[1].split(' ')[1]
        num = num_and_price[0]
#        print(price)
#        print(num)
        return num,price

case_id_list = ['1275323','1269049','1546282','1913364','15490345',##CSGO	电竞2013	英勇大	CSGO2	电竞2013冬	
                '3438414','6820494','7177182','8987853',#冬季攻势	CSGO3	凤凰	猎杀者
                '14962905','15490346','23853214','29205213',#突围	电竞2014夏	先锋	幻彩
                '40091990','49359031','67060949','84444464',#幻彩2	弯曲	暗影	左轮
                '139654771','149865785','156110183','165027636',#野火	幻彩3	伽玛	伽玛2	
                '175854202','175880240','175896275','175917239',#手套	光谱	九头蛇	光谱2
                '175966708','175999886','176024744','176042493'] #命悬一线,地平线,头号,棱彩    

num_lst = []
price_lst = []
_time_ = time.strftime("%Y.%m.%d",time.localtime())  #获取当前时间
num_lst.append(_time_)     
price_lst.append(' ')

index = 0
retry_index_list = []

if __name__ =='__main__':
    for case_id in case_id_list:
        index = index + 1
        json = get_page(case_id)
        if json==0:
            num_lst.append(' ')
            price_lst.append(' ')
            retry_index_list.append(index)
        else:           
            data = parse_page(json)
            if int(data[0])>1000000:                               #调整箱子在售数量单位和精确度
                num_w = round(int(data[0])*0.0001,1)
            elif int(data[0])>10000:
                num_w = round(int(data[0])*0.0001,2)
            elif int(data[0])>1000:
                num_w = round(int(data[0])*0.0001,3)
            else:
                num_w = int(data[0])*0.0001
                
            num_lst.append(str(num_w))
            price_lst.append(data[1])
        time.sleep(random.randint(2,6))
        
    k_ = 0
    for retry_id in retry_id_list:
        print('retrying')
        json = get_page(retry_id)
        data = parse_page(json)
        if int(data[0])>1000000:                               #调整箱子在售数量单位和精确度
            num_w = round(int(data[0])*0.0001,1)
        elif int(data[0])>10000:
            num_w = round(int(data[0])*0.0001,2)
        elif int(data[0])>1000:
            num_w = round(int(data[0])*0.0001,3)
        else:
            num_w = int(data[0])*0.0001        
        
        num_lst[retry_index_list[k_]] = str(num_w)
        price_lst[retry_index_list[k_]] = data[1]
        k_=k_+1
        time.sleep(random.randint(2,6))
            
    with open('case_data.csv','a+') as csvfile:   #写入csv文件
        writer=csv.writer(csvfile)
        writer.writerow(num_lst)
        writer.writerow(price_lst)
  • 7
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
爬取 CSGO 选手数据,你需要了解如何从网页中获取数据。你可以使用 Python 中的 requests 和 BeautifulSoup 库来帮助你完成这个任务。以下是一个简单的爬取 CSGO 选手数据的示例代码: ```python import requests from bs4 import BeautifulSoup import pandas as pd # 设置请求头 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"} # 发送请求 url = "https://www.hltv.org/stats/players?startDate=2021-01-01&endDate=2021-12-31&matchType=BigEvents" response = requests.get(url, headers=headers) # 解析网页 soup = BeautifulSoup(response.content, "html.parser") table = soup.find("table", class_="stats-table player-ratings-table") # 将数据转换成 Pandas DataFrame data = [] rows = table.find_all("tr") for row in rows: cols = row.find_all("td") cols = [col.text.strip() for col in cols] data.append(cols) df = pd.DataFrame(data[1:], columns=data[0]) df = df.drop(columns=["#", "Unnamed: 0", "Maps"]) df = df.astype({"K-D Diff": int, "Rating": float}) # 保存数据 df.to_csv("csgo_player_data.csv", index=False) ``` 这个代码将从 HLTV 网站的选手排名页面爬取 2021 年所有大型赛事的选手数据,并将数据存储到一个 CSV 文件中。 要可视化这些数据,你可以使用 Python 中的 Matplotlib 或 Seaborn 库。以下是一个简单的使用 Seaborn 绘制选手评分直方图的示例代码: ```python import seaborn as sns import pandas as pd # 读取数据 df = pd.read_csv("csgo_player_data.csv") # 绘制直方图 sns.histplot(data=df, x="Rating", bins=20) ``` 这个代码将从之前生成的 CSV 文件中读取选手数据,并绘制评分直方图。你可以根据需要使用其他 Seaborn 或 Matplotlib 函数来绘制其他类型的图表,如散点图、线图等,以更好地可视化数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值