因为要求,这个不知名的网站用S代替了。
有刚刚使用S的用户,不知道玩什么游戏怎么办?往往热销商品会使他们最合适的选择。
当然,某个第三方的网站上面的数据会更详细,什么游戏用户活跃度高,哪个区服游戏价格更便宜上面都会有。但是加上了一层Cloudflare的浏览器验证。
有人说用cloudscraper,但是cloudscraper对商用版的Cloudflare好像不管用(应该是吧,如果有大佬有更好的方法请及时指出,谢谢),之后会用其他的方法再试试。所以这边先按下不表,开始获取S的热销信息。
一、热销获取分析
点击进入热销商品页:
https://那个网站/search/?sort_by=_ASC&force_infinite=1&snr=1_7_7_globaltopsellers_7&filter=globaltopsellers&page=2&os=win
上面的链接,仅仅能获取第一页的数据。
通过开发者模式找到真正的内容获取链接是:
https://那个网站/search/results/?query&start=0&count=50&sort_by=_ASC&os=win&snr=1_7_7_globaltopsellers_7&filter=globaltopsellers&infinite=1
其中start对应了开始位置,对应了翻页。count对应了一次获取了多少数据。
get请求即可,上代码:
def getInfo(self):
url = 'https://那个网站/search/results/?query&start=0&count=50&sort_by=_ASC&os=win&snr=1_7_7_globaltopsellers_7&filter=globaltopsellers&infinite=1'
res = self.getRes(url,self.headers,'','','GET')#自己封装的请求方法
res = res.json()['results_html']
sel = Selector(text=res)
nodes = sel.css('.search_result_row')
for node in nodes:
gamedata = {}
gamedata['url'] = node.css('a::attr(href)').extract_first()#链接
gamedata['name'] = node.css('a .search_name .title::text').extract_first()#游戏名
gamedata['sales_date'] = node.css('a .search_released::text').extract_first()#发售日
discount = node.css('.search_discount span::text').extract_first()#是否打折
gamedata['discount'] = discount if discount else 'no discount'
price = node.css('a .search_price::text').extract_first().strip()#价格
discountPrice = node.css('.discounted