使用python爬取豆瓣電影TOP250

CAICAICAI發表於2021-03-11

使用python爬取豆瓣電影TOP250

①獲取指定介面的html文字資訊 板塊

②獲取排名和連結,名字:因為名字,排名和連結 同在div class='pic'下面 獲取屬性值的時候直接用 .a.attrs['href'] 非常方便 strip()去除前後的\t\n\f

③獲取分數和評價板塊 用 select['span'] 返回的是 第二個span 標籤內容 xpath 1 就是1

④寫入excel模組

⑤整理大的列表

⑥執行:

①獲取指定介面的html文字資訊 板塊


②獲取排名和連結,名字:因為名字,排名和連結 同在div class='pic’下面 獲取屬性值的時候直接用 .a.attrs[‘href’] 非常方便 strip()去除前後的\t\n\f


③獲取分數和評價板塊 用 select[‘span’] 返回的是 第二個span 標籤內容 xpath 1 就是1

注:xpath 和bs4 的返回索引不一樣


④寫入excel模組


⑤整理大的列表


⑥執行:


具體程式碼:

import requests

from bs4 import BeautifulSoup

import csv


rank=[]

link=[]

names=[]

score=[]

assess=[]

aList=[]

def getHMLText(url):

try:


    headers = {

        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'

    }

    r=requests.get(url,timeout=30,headers=headers)

    r.raise_for_status()

    r.encoding = r.apparent_encoding

    return r.text

except Exception as e:

    print("產生的異常是",e)  #e.status_code 狀態碼

def getContent(Html):

soup = BeautifulSoup(Html,"html.parser")

for li in soup.select(".grid_view li"):

for item in li.findall('div',class='pic'):

rank.append(item.text.strip()) #排名

link.append(item.a.attrs['href'])

names.append(item.a.img.attrs['alt'])


def getScoreAndassess(Html):

soup = BeautifulSoup(Html, "html.parser")

for li in soup.select(".grid_view li"):

for info in li.findall('div', class='info'):

for bd in info.findall('div',class='bd'):

score.append(bd.div.select('span')[1].text)

assess.append(bd.div.select('span')[3].text)

#print(bd.div.select('span')[3].text)


def saveListCSV(fileName,aList):

try:

with open(fileName,'w',newline='')as fp:

writer = csv.writer(fp)

writer.writerow(["排名", "電影名稱", "評分", "評價數","URL"])

for item in aList:

writer.writerow(item)

print('{0}儲存成功!共{1}條記錄'.format(fileName,len(aList)))

except IOError as err:

print(fileName,'檔案建立錯誤:',err)


def allLsit(aList):

for i in range(len(rank)):

aList.append([rank[i],names[i],score[i],assess[i],link[i]])

return aList


if name=="main":

for i in range(1, 11):

url = " + str((int(i) - 1) * 25) + "&filter="

Html= getHMLText(url)

getContent(Html)

getScoreAndassess(Html)

aList=allLsit(aList)

#print(aList)

data=aList[1125:]

saveListCSV('./movie.csv',data)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996206/viewspace-2762302/,如需轉載,請註明出處,否則將追究法律責任。

相關文章