日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python3 + BeautifulSoup 爬取Steam热销商品数据

發布時間:2024/3/12 python 71 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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热销商品数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。