python——爬取游戲排名信息


爬取游戲排名前100的游戲,代碼如下:

import requests
import bs4
from bs4 import BeautifulSoup
import re
 
def main():
    a = []        #定義空列表
    url = "http://top.baidu.com/buzz?b=62"
    html = getHTMLText(url)
    collectlist(a,html)
    printlist(a,50)
 
 
def getHTMLText(url):
    try:
        #偽裝瀏覽器
        headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
        r = requests.get(url,headers = headers,timeout=30)
        r.raise_for_status()
        r.encoding=r.apparent_encoding
        return r.text
    except:
        return "error"
 
def collectlist(plist,html):
    soup = BeautifulSoup(html,'html.parser')
    #找到<table>下的所有<tr>,返回的是列表
    s = soup.find('table').find_all('tr')
    for i in s:
        
        if i.find('td',class_='first') != None:       #需要找到符合條件的<td>,再進行操作
            con = i.find('td',class_='first').text    #排名
            con1 = re.search(r'\d+',con)              #text類型需要正則匹配,返回的是列表,每一次只有一個元素
            con2 = i.find('td',class_="keyword").find('a',class_="list-title").string  #游戲名,string類型則可以直接append到數組中
            con3 = i.find('td',class_="last").find('span').string     #指數            
            plist.append([con1[0],con2,con3])      #返回元素
    
    
    
            
    
def printlist(plist,num):
    tplt = "{0:^10}\t{1:{3}^10}\t{2:^20}"           #游戲名稱為純文字情況
    tplt1 = "{0:^10}\t{1:^20}\t{2:^20}"             #游戲名稱出現字母情況
    tplt2 = "{0:^10}\t{1:{3}^10}\t{2:{3}^10}"       #第一欄主題項
    print(tplt2.format("排名","游戲名稱","搜索指數",chr(12288)))
    for i in range(num):
        p = plist[i]
        if re.match(r'[a-z]',p[1]) == None:         #正則匹配p[1]純文字情況
            print(tplt.format(p[0],p[1],p[2],chr(12288)))
        else:                                       
            print(tplt1.format(p[0],p[1],p[2],chr(12288)))
      
 
main()

 

 

 

 總結下小問題:

1、find()和find_all()的區別

find()返回對象的第一個元素

find_all()返回所有元素

2、.text形式可以返回多層標簽中的文本,.string則只能返回當層標簽中下的文本。但是使用.text時需要注意如果不是當層標簽下的文本,其返回的類型為數組類型,還需提取其中的元素,即str[0],表示數組中第1個元素;而.string是當層標簽下的文本,自然就是返回的是string。

3、f12查看網頁元素組成


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM