python3.5.4爬取豆瓣中國內地電影票房總排行輸出到excel
首先,作為練手,我也是看別人的部落格文章學習寫爬蟲的,過程中遇到很多問題,不過經過自己的努力完成了此項任務,雖然過程波折,但是收穫不會少,作為自學可謂加深印象。先說下需求,使用Python3.5版本獲取豆瓣950多部電影排行資訊,包含電影名稱、導演、主演、編劇、型別、時長、上映時間、評分、票房、評分人數等一系列資訊。
#!/usr/bin/python #-*- coding: utf-8 -*- from bs4 import BeautifulSoup import re import urllib.request import xlwt #得到頁面全部內容 def askURL(url): fakeHeaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; rv:16.0) (Gecko/20100101 Firefox/16.0)'}#偽裝請求頭 request = urllib.request.Request(url, headers=fakeHeaders)#傳送請求 proxy = urllib.request.ProxyHandler({'http': 'http://192.168.1.11:1080'})#設定代理 opener = urllib.request.build_opener(proxy)#開啟代理 urllib.request.install_opener(opener)#使用代理 try: response = urllib.request.urlopen(request)#取得響應 html = response.read()#獲取網頁內容 return html except urllib.request.URLError as e: if hasattr(e, "code"): print(e.code) if hasattr(e, "reason"): print(e.reason) #獲取相關內容 def getData(baseurl): #re.M或re.MULTILINE:使用^或$時會匹配每一行的行首或行尾 #re.S或re.DOTALL:使用.時能匹配換行符 # 找到片名 findTitle=re.compile(r'<a .*?>(.*?)</a>', re.S|re.M) #找到評分 findRating=re.compile(r'<span class="rating_nums">(.*)</span>') #找到評價人數 findJudge=re.compile(r'<span>(.*)</span>') #找到影片相關內容:導演,主演,型別,製片國家,年份 findAbstract=re.compile(r'<div class="abstract">(.*)</div>', re.S) #找到發行類別、上映時間、總票房 findQuote=re.compile(r'<blockquote class="comment">(.*)</blockquote>', re.S) datalist = [] for i in range(0,39): #url每頁顯示25條資料,所以需要迴圈遍歷 url=baseurl+str(i*25)#+'&sort=seq&sub_type=' html=askURL(url) soup = BeautifulSoup(html, "html5lib", from_encoding="utf-8") for item in soup.find_all('div', class_='doulist-item'):#找到每一個影片項 data = [] item = str(item)#轉換成字串 titles = re.findall(findTitle, item)#獲取電影名稱 newtitles = re.sub('\s', '', titles[1])#去掉\n符和空白 data.append(newtitles) # 新增中文片名 rating = re.findall(findRating, item)#獲取評分,評分貌似也有為空的 if (len(rating) == 1): score = rating[0] data.append(score)#新增評分 else: data.append(' ')# 留空 judgeNum=re.findall(findJudge, item)[0]#獲取評價數量,評價數量貌似也有為空的 newJudgeNum = re.findall(r'\d+', judgeNum)#取出數字 if len(newJudgeNum) != 0: peoplenum = newJudgeNum[0] data.append(peoplenum)#新增評價數量 else: data.append(' ')# 留空 a = re.findall(findAbstract, item) #這裡可能會有空字串出現 if len(a) != 0: abstract=re.findall(findAbstract, item)[0] abstract = re.sub('\s', "", abstract)#替換/ abstract = re.sub('</div>', "", abstract) # 去掉<br> words=abstract.split("<br/>") #測試發現主演有為空值的現象,此處在為空值的位置新增字眼“主演:”,便於切割字串 if (len(words) != 5): words.insert(1, '主演: ') # 留空 #對字串進行切割,得到導演、主演、電影型別、製片國家、電影所屬年份 director = words[0].split(':')[1]#導演 data.append(director) # 放到列表data中 mainactor = words[1].split(':')#主演有為空的 if len(mainactor) != 0: actor = mainactor[1] data.append(actor)#新增主演 else: data.append(' ') # 留空 movietype = words[2].split(':')[1]#電影型別 data.append(movietype) # 放到列表data中 makercountry = words[3].split(':')[1]#製片國家 data.append(makercountry) # 存入列表data中 movieofyear = words[4].split(':')#電影所屬年份 if len(movieofyear) != 0: year = movieofyear[1] data.append(year[:4]) else: data.append(' ') # 留空 else: words=['導演: ', '主演: ', '型別: ', '製片國家/地區: ', '年份: '] director = words[0].split(':')[1] # 導演 data.append(director) # 放到列表data中 mainactor = words[1].split(':') data.append(mainactor) movietype = words[2].split(':')[1] data.append(movietype) makercountry = words[3].split(':')[1] # 製片國家 data.append(makercountry) # 存入列表data中 movieofyear = words[4].split(':') # 電影所屬年份 data.append(movieofyear) quote = re.findall(findQuote, item) # 處理空列表的情況出現 if len(quote) != 0: info = re.sub('\s', '', quote[0]) # 去掉\n符和空白 else: quote.insert(0, '總票房: | 上映日期: | 發行類別: ')#當發現有空資料時 info = quote[0] #對獲取到的字串進行切割處理,以豎線為分割線進行切割 separatequote = info.split("|") # 對字串進行切割,得到總票房、上映日期、發行類別 pricehouse = separatequote[0].split(":")[2:]#總票房 if len(pricehouse) != 0: data.append(pricehouse[0]) else: data.append(' ') releasedate = separatequote[1].split(":")[1:] # 上映日期 if len(releasedate) != 0: data.append(releasedate[0]) else: data.append(' ') releasetype = separatequote[2].split(":")[1:]#發行類別 if len(releasetype) != 0: data.append(releasetype[0]) else: data.append(' ') #print(data) datalist.append(data) # 放到大列表datalist中 return datalist #將相關資料寫入excel中 def saveData(datalist, savepath): book = xlwt.Workbook(encoding='utf-8', style_compression=0) sheet=book.add_sheet(u'豆瓣電影', cell_overwrite_ok=True) col = ('影片名', '評分', '評價人數', '導演', '主演', '型別', '製片國家', '年份', '總票房', '上映時間', '發行類別') for i in range(0, len(col)): sheet.write(0, i, col[i])#列名,表格的第一行開始寫。第一列,第二列。。。。 for i in range(0, 953):#從第零行開始至952行 data = datalist[i] for j in range(0, len(col)): sheet.write(i+1, j, data[j])#資料 book.save(savepath)#儲存 if __name__ == '__main__': baseurl = 'https://www.douban.com/doulist/1295618/?start=' datalist = getData(baseurl) savepath = u'中國內地電影票房總排行.xls' saveData(datalist, savepath)
輸出效果:
注意事項:這裡輸出發現第50條資料有問題,可通過手動刪除得到其餘952條電影資訊,暫時不知道原因無法修正,如果你們發現了告訴我一聲,我也好改正。我在程式中寫入了953行,這樣多餘的冗餘資料可通過手動刪除來規避。
轉載請標明原作者出處,謝謝
相關推薦
python3.5.4爬取豆瓣中國內地電影票房總排行輸出到excel
首先,作為練手,我也是看別人的部落格文章學習寫爬蟲的,過程中遇到很多問題,不過經過自己的努力完成了此項任務,雖然過程波折,但是收穫不會少,作為自學可謂加深印象。先說下需求,使用Python3.5版本獲取豆瓣950多部電影排行資訊,包含電影名稱、導演、主演、編劇、型別、時長、上
Python3.5:爬取網站上電影數據
x64 沒有 () nbsp 運行 lpar target __init__ doc 首先我們導入幾個pyhton3的庫: from urllib import requestimport urllibfrom html.parser import HTMLParser 在
Python爬蟲入門 | 4 爬取豆瓣TOP250圖書信息
Python 編程語言 Python爬蟲先來看看頁面長啥樣的:https://book.douban.com/top250 我們將要爬取哪些信息:書名、鏈接、評分、一句話評價……1. 爬取單個信息我們先來嘗試爬取書名,利用之前的套路,還是先復制書名的xpath:得到第一本書《追風箏的人》的書名xpath如下:
Python3.5+requests 爬取網站遇到中文亂碼怎麼辦?ä½è ï¼å¾®è½¯äºæ´²ç 究é¢
import requests from bs4 import BeautifulSoup url = 'http://quote.eastmoney.com/stocklist.html' user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Wind
python3.6.4爬取裁判文書網----------基本js逆向解析----玉米都督
如果您覺得我的文章對您有用,請您給我一個關注,您的每一個關注都是對我極大的支援,我也會極大的提高產出效率,To_share_code 裁判文書網:http://wenshu.court.gov.cn/ 這個政府網站垃圾慢,需要耐心 ps: 其實沒必要關心js函式的內部細
Python爬蟲入門 | 4 爬取豆瓣TOP250圖書資訊
我們將要爬取哪些資訊:書名、連結、評分、一句話評價…… 1. 爬取單個資訊 我們先來嘗試爬取書名,利用之前的套路,還是先複製書名的xpath: 得到第一本書《追風箏的人》的書名xpath如下: //*[@id=
python日常—爬取豆瓣250條電影記錄
ring 分層 com line gets ret 同仁 http 一個 # 感興趣的同仁可以相互交流哦import requests import lxml.html,csv doubanUrl = ‘https://movie.douban.com/top2
爬取豆瓣的tp250電影名單
info urlopen lose from port tps div turn data # https://movie.douban.com/top250?start=25&filter= 要爬取的網頁 import re from urlli
用Python爬取豆瓣Top250的電影標題
ive f11 parse www 表達 star import utf-8 各類 所以我們可以這麽寫去得到所有頁面的鏈接我們知道標題是在 target="_blank"> 標題的位置</a> 之中 所以可以通過正則表達式找到所有符合條
基於BeautifulSoup爬取豆瓣網上的電影資訊
基於BeautifulSoup實現爬取豆瓣網上的電影資訊 這些天在學習Python,瞭解到用Python做網頁網頁爬蟲非常的方便,於是琢磨著寫了一個簡單的爬蟲程式(感謝萬能的beautifulSoup框架,ps:做網頁解析太方便了)。當然這是計劃中的一部分,說
python3爬取豆瓣圖書Top250圖片
本部落格只爬取豆瓣圖書Top250的圖片,各位愛書的小夥伴趕緊學起來,爬完的效果圖如下: 我這段程式碼的目錄結構如下: 程式碼在此: # -*- coding:utf-8 -*- import requests from lxml import etree def spid
python3爬蟲--爬取豆瓣Top250的圖書
from lxml import etree import requests import csv fp = open('doubanBook.csv', 'wt', newline='', encoding='utf-8') writer = csv.writer(fp) writer.
Python3 爬取豆瓣圖書Top250並存入Excel中
#coding=utf-8 import re import xlwt import requests from bs4 import BeautifulSoup def getHtml(url): headers = {'User-Agent': 'Mo
Python3 Scrapy框架學習二:爬取豆瓣電影Top250
開啟專案裡的items.py檔案,定義如下變數, import scrapy from scrapy import Item,Field class DoubanItem(scrapy.Item): # define the fields for your it
Python3 Scrapy框架學習五:使用crawl模板爬取豆瓣Top250,並存入MySql、MongoDB
1.新建專案及使用crawl模板 2.頁面解析 rules = (Rule(LinkExtractor(allow=r'subject/\d+/',restrict_css = '.hd > a[class = ""]'), callback='parse_it
【Python3爬蟲】爬取中國國家地理的62個《古鎮》和363張攝影照片
宣告:爬蟲為學習使用,請各位同學務必不要對當放網站或i伺服器造成傷害。務必不要寫死迴圈。 - 思路:古鎮——古鎮列表(迴圈獲取古鎮詳情href)——xx古鎮詳情(獲取所有img的src) - from bs4 import BeautifulSoup import u
Python3網路爬蟲:requests+mongodb+wordcloud 爬取豆瓣影評並生成詞雲
Python版本: python3.+ 執行環境: Mac OS IDE: pycharm 一 前言 二 豆瓣網影評爬取 網頁分析 程式碼編寫 三 資料庫實裝 四
Scrapy爬蟲(4)爬取豆瓣電影Top250圖片
在用Python的urllib和BeautifulSoup寫過了很多爬蟲之後,本人決定嘗試著名的Python爬蟲框架——Scrapy. 本次分享將詳細講述如何利用Scrapy來下載豆瓣電影Top250, 主要解決的問題有: 如何利用ImagesPi
Python3 爬蟲(三) -- 爬取豆瓣首頁圖片
序 前面已經完成了簡單網頁以及偽裝瀏覽器的學習。下面,實現對豆瓣首頁所有圖片爬取程式,把圖片儲存到本地一個路徑下。 首先,豆瓣首頁部分圖片展示 這只是擷取的一部分。下面給出,整個爬蟲程式。 爬蟲程式
【Python3爬蟲】Scrapy爬取豆瓣電影TOP250
今天要實現的就是使用是scrapy爬取豆瓣電影TOP250榜單上的電影資訊。 步驟如下: 一、爬取單頁資訊 首先是建立一個scrapy專案,在資料夾中按住shift然後點選滑鼠右鍵,選擇在此處開啟命令列視窗,輸入以下程式碼: scrapy startprojec