好久沒有去電影院看電影了,就寫個最熱電影和票房的統計吧,豆瓣電影排行什麼的作為爬蟲入門最合適不過了。同時學習或者溫習一下beautifulsoup、還有csv資料的儲存。這些就是各種各樣爬蟲的基礎和原理,說的不太準確爬蟲就是模擬瀏覽器get/post請求,爬取、解析、儲存,再複雜的爬蟲也都是在這個基礎上慢慢衍化而來的,由淺入深。再將儲存的資料,通過資料清洗、視覺化展示,這就是做專案的路子。
好了進入正題,從豆瓣網上查到全球電影票房總排行榜,有了目標開始了,用的還是萬年不變的requests模組,帶上瀏覽器的標識user-agent。
import requests
headers={
url = ''
res= requests.get(url=url,headers=headers)
res.encoding = 'utf-8'
if res.status_code==200:
r=res.text
這樣最簡單的爬蟲就完成了,怪不得網上有人說寫爬蟲和寫hello world沒什麼太大的區別,再寫複雜的爬蟲也離不開這個最原始的框架,headers模擬瀏覽器各種各樣的資訊,這裡只有模擬瀏覽器的名稱user-agent就行,複雜一些的還要cookie、host、referer這些資訊,這些資訊通過瀏覽器f12查詢或者其他抓包軟體就可以獲得,以後有機會介紹各種抓包軟體用法。
之後就是資料的解析了,beautifulsoup就派上用場了,還有其他各種各樣的解析方法,這個看自己的習慣。
from bs4 import beautifulsoup
soup = beautifulsoup(r,"lxml") #接上面的**,這裡的r就是請求返回的內容,建立soup物件
items=soup.find_all(class_='doulist-item') #分析返回的html檔案,發現資料都在class為doulist-item
的div標籤中,於是用find_all()方法獲取到。
list1=
list2=
for item in items: #遍歷找到所有獲得的內容
it = item.div.contents #再在這些內容中找到div的子節點,獲取得到列表
i = it[3].find_all(class_='title') #經過分析發現所有電影的名稱都在列表的第4項,所以下標為[3]
for ii in i:#由於得到的『title』不止乙個,需要進一步篩選
s=ii.get_text().strip() #再通過get_text()獲得標題的名稱,之後用strip()刪除前後的空格
title = s #那麼就得到電影的名稱了
m=it[5].find_all(class_='comment')[0].get_text() #經過分析發現所有電影的票房在it列表的第6項,下標[5]
mon = m.split(':')[1].split('$')[1].replace(',','').strip()#得到冒號和$後面的資料,將科學資料計數法的逗號去掉,再刪除前後的空格
這樣就將整個頁面解析好了,並將電影名字、票房的資料儲存好了,這時候的資料都在電腦的記憶體中,需要將資料存在電腦硬碟中。儲存的方式太多了,mysql資料庫,或者其他輕量級的資料庫,要麼就用csv格式。csv格式檔案在windows中跟excel檔案挺相似的,但是excel檔案有各種格式、公式,csv檔案就相對輕便多了。好了就將這些資料寫入csv中,**如下
with open('d:\\ysw11.csv','w', newline='')as csvfile: #建立csv檔案
writer = csv.writer(csvfile)
writer.writerow(['name','type','value','data']) #寫入第一行表頭
for i in range(len(list1)):
writer.writerow([list1[i],'票房',float(list2[i])*100000,2019]) #將電影名稱、票房寫入這個csv檔案中
需要注意的是在with open方法中,一定要加上newline=''這句,要不然建立的csv檔案資料行都有一行空白行。票房資料先轉換成浮點小數,由於它的單位是百萬所以要乘以100000,時間是2023年。
這樣乙個簡單爬蟲,從爬取到解析到儲存就完成了,很簡單吧。最後祝大家五一快樂!
import requests
from bs4 import beautifulsoup
import csv
list1=
list2=
def funn():
headers={
url = ''
res= requests.get(url=url,headers=headers)
res.encoding = 'utf-8'
print(res.status_code)
if res.status_code==200:
r=res.text
soup = beautifulsoup(r,"lxml")
items=soup.find_all(class_='doulist-item')
for item in items:
it = item.div.contents
i = it[3].find_all(class_='title')
for ii in i:
s=ii.get_text().strip()
title = s
m=it[5].find_all(class_='comment')[0].get_text()
mon = m.split(':')[1].split('$')[1].replace(',','').strip()
print(title,mon)
funn()
with open('d:\\ysw11.csv','w', newline='')as csvfile: #建立csv檔案
writer = csv.writer(csvfile)
writer.writerow(['name','type','value','data']) #寫入第一行表頭
for i in range(len(list1)):
writer.writerow([list1[i],'票房',float(list2[i])*100000,1]) #將電影名稱、票房寫入這個csv檔案中
python爬取電影票房網並儲存csv
目標 電影票房網 目標 目標資料 1 名次 2 電影名稱 3 日期 4 票房 5 總場次 6 廢場 7 人次 8 上座率 9 票價 任務要求 1 使用urllib或requests庫實現該 網頁源 的獲取,並將源 進行儲存 2 自主選擇re bs4 lxml中的一種解析方法對儲存的的源 讀取並進行解...
電影票房案例分析
import pandas as pd 載入資料 def read data file root dataframe pd.read csv file root print 資料的基本資訊 print dataframe.info print 資料的行是 i,列是 i dataframe.shape...
Python貓眼電影最近上映的電影票房資訊
前言 ps 如程式設計客棧有需要python學習資料的小夥伴可以加點選下方鏈結自行獲取 基本環境配置 相關模組pip安裝即可 目標 資料介面 請求網頁獲取資料 import requests url params cookies headers response requests.get url u...