因为版权不详,以下网站全部换成S,第三方网站换成SDB。上篇文章爬取了S的热销产品,也说明SDB因为Cloudflare的浏览器验证无法爬取,selenium也无法爬取。我当时就放弃了。不过前段时间有个男生跟我说:【用编剧!】剧作家支持多种语法。与selenium的Http协议相比,playwright的Websocket访问浏览器要好一些。Playwright的使用和安装:python3.7+1.pipinstall--upgradepip2.pipinstallplaywright3.playwrightinstall需要一次安装,Playwright可以通过你安装的浏览器(chromiun、firefox和webkit)进行通信developertools交互不像selenium那样下载浏览器版本对应的驱动。这次只讲最基本的页面获取。其他功能请自行查看文档:1.fromplaywright.sync_apiimportsync_playwright2.3.withsync_playwright()asp:4.browser=p.webkit.launch()5.page=browser.new_page()6.page.goto("http://whatsmyuseragent.org/")7.page.wait_for_load_state('networkidle')8.html=page.content()9.browser.close()html是加载的内容文本,得到的东西可以交给选择器进行处理和筛选。SDB实例SDB是第三方S数据库,可以查询在线用户数、游戏价格等。显示在线人数和在线排名。现在开始获取数据。1.withsync_playwright()asp:2.try:3.browser=p.chromium.launch(headless=False)4.page=browser.new_page()5.page.goto('https://steamdb.info/graph/')6.page.wait_for_load_state('networkidle')7.html=page.content()8.browser.close()9.返回html10.除了异常e打印为e:11.为什么不能当无头打开时它会通过。这样就得到了这个页面的html内容:接下来使用selector解析内容:1.sel=Selector(text=content)2.nodes=sel.css('#table-apps.app')3.对于节点中的节点:4.title=node.css('td:nth-child(3)a::text').extract_first()5.current=node.css('td:nth-child(4):text').extract_first()6.peakToday=node.css('td:nth-child(5)::text').extract_first()7.allPeak=node.css('td:nth-child(6)::text').extract_first()8.print(f"游戏:{title},当前在线:{current},今日最高在线:{peakToday},历史最高在线:{allPeak}")编剧proxy配置Playwright配置proxy其实很简单,在浏览器配置行添加proxy参数即可:browser=p.chromium.launch(headless=False,proxy=proxy)我目前使用的是ipidea的proxy,新用户可以嫖交通。SDB国内访问速度慢,使用稳定的代理加上好用的编剧会事半功倍!地址:http://www.ipidea.net/代码集成1.fromplaywright.sync_apiimportsync_playwright2.fromparselimportSelector3.4.defgetSteaminfo():5.6.proxy={7.'server':"",8.'username':"",9.'password':''10.}11.12.withsync_playwright()asp:13.try:14.unchless.chbrowser=False,proxy=proxy)15.page=browser.new_page()16.page.goto('https://steamdb.info/graph/')17.page.wait_for_load_state('networkidle')phtml18.Content()19.browser.close()20.返回HTML21.ExceptExceptionase:22.Print(E)23.24.DefStart():25.Content=Getteaminfo()26.SELECTOR(textor=content)27.nodes=sel.css('#table-apps.app')28.对于节点中的节点:29.title=node.css('td:nth-child(3)a::text').extract_first()30.current=node.css('td:nth-child(4)::text').extract_first()31.peakToday=node.css('td:nth-child(5)::text').extract_first()32.allPeak=node.css('td:nth-child(6)::text').extract_first()33.print(f"Game:{title},当前在线:{current},今日最高在线:{peakToday},历史最高在线:{allPeak}")34.35.if__name__=='__main__':start()
