Python3 + BeautifulSoup 爬取Steam热销商品数据
生活随笔
收集整理的這篇文章主要介紹了
Python3 + BeautifulSoup 爬取Steam热销商品数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這次用了BeautifulSoup庫來爬取Steam的熱銷商品,BeautifulSoup更側重的是從頁面的結構解析,
根據標簽元素等來爬取數據,這次遇到兩個問題:
1.Steam熱銷商品列表經常有重復的,所以我建了一個列表,把爬到的數據存進去,每次爬的時候都校驗跟列表里有沒有重復,有的話就跳過,防止重復爬取。
2.我需要同時遍歷兩個表,找到了zip()函數解決方案,下面簡單介紹一下。
zip()
大家看下面的實例應該就能明白。
xs = ['我是','你是','他是'] ys = ['第一','第二','第三']for x, y in zip(xs,ys):print(x+y)輸出結果如下:
我是第一 你是第二 他是第三下面是完整爬蟲代碼,使用的庫請自行安裝不另做教學:
from bs4 import BeautifulSoup import xlwt,os,time,requestspage = 1 #起始頁數 total_pages = 3 #總頁數,爬10頁請設定為11 count = 1 #每抓到一次游戲名稱增加一次,用來排序 pool=[] #每次抓到的游戲名稱都會放進pool列表里,用來去重 document = 'Steam_GameTopSellers' #設定爬取的數據存的excel的檔案名稱 wb = xlwt.Workbook() #創建excel ws = wb.add_sheet("TopSellers") #在excel新增一個sheet頁 ws.write(0,0,'#')#三個參數,1:第幾行,2:第幾列,3:輸入什么值 ws.write(0,1,'Game Title') #在excel第一行第二列先行寫入'Game Title' ws.write(0,2,'Released Date') #在excel第一行第三列先行寫入'Released Date' root = os.getcwd() #獲取當前工作路徑 date = time.strftime('%Y%m%d',time.localtime(time.time())) #獲取當前日期 格式為yyyymmddwhile page<total_pages:url = 'https://store.steampowered.com/search/?tags=597&filter=topsellers&page=%s' % str(page) #設定url,變量控制頁數r = requests.session()res = r.get(url).textsoup = BeautifulSoup(res,"html.parser")game_names = soup.find_all('span',attrs={'class':'title'}) # 遍歷所有span標簽,且class屬性值為'title' 即當前頁面所有游戲名稱released_dates = soup.find_all('div',attrs={'class':'col search_released responsive_secondrow'}) #當前頁面所有發行日期for game_name, released_date in zip(game_names,released_dates): #同時遍歷連個列表的方法 for x,y in zip(xs,ys):if game_name.string in pool: #如果爬到的數據在我的pool列表里存在的話就跳過,反之繼續爬continueelse:print('%s .GameName:%s Released on:%s' % (count,game_name.string,released_date.string)) #打印給自己看的pool.append(game_name.string) #把爬到的數據增加到pool列表里ws.write(count,0,count) #往excel寫入編號ws.write(count,1,game_name.string) #往excel寫入游戲名稱ws.write(count,2,released_date.string) #往excel寫入發行日期count += 1 #每遍歷一次 count 變量 +1 ,用來排序寫入excel里的順序rate = page / (total_pages - 1)print('--------------------------第%s頁爬取完成--------------------已完成: %.2f%%' % (str(page),(rate * 100)))page += 1wb.save('%s%s.xls' % (document,date)) #保存excel print('--------------------------爬取完成--------------------------') print('所有數據已存至:%s\%s%s.xls' % (root,document,date))爬取結果(一共爬取1242條數據,51頁~60頁都是重復的):
結語:
這steam真是。。。后十頁就是重復的,我一開始以為是有什么防爬機制,
后來在實際頁面檢查確實有重復的情況。
總結
以上是生活随笔為你收集整理的Python3 + BeautifulSoup 爬取Steam热销商品数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Unity学习笔记】Unity中的欧拉
- 下一篇: 【单片机毕业设计】【mcuclub-jj