Python爬蟲學習:抓取電影網站內容的爬蟲

2021-02-14 python教程
點擊藍字python教程」關注我們喲!

Python現在非常火,語法簡單而且功能強大,很多同學都想學Python!所以小的給各位看官們準備了高價值Python學習視頻教程及相關電子版書籍,歡迎前來領取!

實現思路:

抓取一個電影網站中的所有電影的思路如下:

根據一個URL得到電影網站的所有分類

得到每個分類中的電影的頁數

根據其電影分類的URL規律構造每個分類中每個頁面的URL

分析每個頁面中的html,並用正則把電影信息過濾出來

準備工作:

安裝python(我用的是mac系統,默認的版本是Python 2.7.1 )

安裝mongodb,從官網下載最新版本,然後啟動即可,注意如放在外網的話,要設定驗證密碼或綁定地址為127.0.0.1,否則黑客輕易就進去了

安裝BeautifulSoup和pymongo模塊

安裝一個python編輯器,我個人喜歡用sublime text2

編寫部分:

這次以騰訊視頻為例,其他視頻網站只是換一下正則表達式。

根據視頻所有分類的URL獲取網站中所有視頻分類

騰訊的所有視頻的URL為:http://v.qq.com/list/1_-1_-1_-1_1_0_0_20_0_-1_0.html

首先我們import urllib2包,封裝一個讀取url中html的方法,詳細代碼如下:

導入需要的模塊並定義全局變量:

 

# -*- coding: utf-8 -*-
import re
import urllib2
from bs4 import BeautifulSoup
import string
import pymongo

NUM = 0 #全局變量,電影數量
m_type = u'' #全局變量,電影類型
m_site = u'qq' #全局變量,電影網站

 gethtml方法,傳入一個url,返回這個url的html內容:

 

#根據指定的URL獲取網頁內容
def gethtml(url):
req = urllib2.Request(url)
response = urllib2.urlopen(req)
html = response.read()
return html

 

然後查看這個URL的源碼文件,得知其電影分類的信息在<ul class="clearfix _group" gname="mi_type" gtype="1">標籤內部,每條電信分類的格式為:

<a _hot="tag.sub" href="http://v.qq.com/list/1_0_-1_-1_1_0_0_20_0_-1_0.html" title="動作" tvalue="0">動作</a>

ok,我們再寫一個gettags方法,將所有的電影分類及url存放於一個字典中,代碼如下:#從電影分類列表頁面獲取電影分類

def gettags(html):
global m_type
soup = BeautifulSoup(html) #過濾出分類內容
#print soup
#<ul gname="mi_type" gtype="1">
tags_all = soup.find_all('ul', {'class' : 'clearfix _group' , 'gname' : 'mi_type'})

  #分離出包含電影分類信息的html,接下來用正則表達式過濾出來,只用(.+?)匹配我們興趣的欄位即可

#<a _hot="tag.sub" href="http://v.qq.com/list/1_0_-1_-1_1_0_0_20_0_-1_0.html" title="動作" tvalue="0">動作</a>
re_tags = r'<a _hot=\"tag\.sub\" class=\"_gtag _hotkey\" href=\"(.+?)\" title=\"(.+?)\" tvalue=\"(.+?)\">.+?</a>'
p = re.compile(re_tags, re.DOTALL)

tags = p.findall(str(tags_all[0]))
if tags:
tags_url = {}
#print tags
for tag in tags:
tag_url = tag[0].decode('utf-8')
#print tag_url
m_type = tag[1].decode('utf-8')
tags_url[m_type] = tag_url

else:
print "Not Find"
return tags_url

 

接下來用一個循環分類獲取每個分類下電影的頁數,代碼如下:

 

for url in tag_urls.items():
print str(url[1]).encode('utf-8') #,url[0]
maxpage = int(get_pages(str(url[1]).encode('utf-8')))
print maxpage

 

獲取每個分類中有多少頁電影的代碼如下:

#獲取每個分類的頁數
def get_pages(tag_url):
tag_html = gethtml(tag_url)
#divmod_pagenav" id="pager">
div_page = soup.find_all('div', {'class' : 'mod_pagenav', 'id' : 'pager'})
#print div_page #len(div_page), div_page[0]

#<a href="http://v.qq.com/list/1_2_-1_-1_1_0_24_20_0_-1_0.html" title="25"><span>25</span></a>
re_pages = r'<a class=.+?><span>(.+?)</span></a>'
p = re.compile(re_pages, re.DOTALL)
pages = p.findall(str(div_page[0]))
#print pages
if len(pages) > 1:
return pages[-2]
else:
return 1

 

然後在每個分類中,根據其URL的規律生成具體的每頁的URL,詳細代碼如下:

for url in tag_urls.items():
print str(url[1]).encode('utf-8') #,url[0]
maxpage = int(get_pages(str(url[1]).encode('utf-8')))
print maxpage

for x in range(0, maxpage):
#http://v.qq.com/list/1_0_-1_-1_1_0_0_20_0_-1_0.html
m_url = str(url[1]).replace('0_20_0_-1_0.html', '')
movie_url = "%s%d_20_0_-1_0.html" % (m_url, x)
print movie_url
movie_html = gethtml(movie_url.encode('utf-8'))
#print movie_html
getmovielist(movie_html)

 

getmovielist函數的作用是將每頁地址返回的html傳入,然後從中過濾出電影信息所在的html塊,詳細代碼如下:

def getmovielist(html):
soup = BeautifulSoup(html)

#<ul>
divs = soup.find_all('ul', {'class' : 'mod_list_pic_130'})
#print divs
for div_html in divs:
div_html = str(div_html).replace('\n', '')
#print div_html
getmovie(div_html)

 

將過濾出來的包含電影信息的html代碼塊傳入getmovie函數來分離出具體的電影信息併入庫,詳細代碼如下:

def getmovie(html):
global NUM #電影數量
global m_type #電影類型
global m_site #電影所在網站

#<h6> <a href="http://www.tudou.com/albumcover/Z7eF_40EL4I.html" target="_blank" title="徒步旅行隊">徒步旅行隊</a> </h6> <ul> <li>法國賣座喜劇片</li> <li> </li> </ul> </div> <div> <div> <h3>徒步旅行隊</h3> <div> <span>地區: 法國</span> <span>導演: </span> <span>年代: 2009</span> <span>類型: 喜劇</span> </div> <p>理察·達奇擁有一家小的旅遊公司,主要經營法國遊客到非洲大草原的旅遊服務。六個法國遊客決定參加理察·達奇組織的到非洲的一...</p>

re_movie = r'<li><a class=\"mod_poster_130\" href=\"(.+?)\" target=\"_blank\" title=\"(.+?)\"><img.+?</li>'
p = re.compile(re_movie, re.DOTALL)
movies = p.findall(html)
if movies:
conn = pymongo.Connection('localhost', 27017)
movie_db = conn.dianying
playlinks = movie_db.playlinks
#print movies
for movie in movies:
#print movie
NUM += 1
print "%s : %d" % ("=" * 70, NUM)
values = dict(
movie_title = movie[1],
movie_url = movie[0],
movie_site = m_site,
movie_type = m_type
)
print values
playlinks.insert(values)
print "_" * 70
NUM += 1
print "%s : %d" % ("=" * 70, NUM)

 

總結一下:爬蟲實現的原理就是通過對其網頁內容規律的觀察,然後分離出包含我們感興趣的html代碼塊,然後用正則表達式從將這些代碼塊中將想要的信息分離出來。



對Python開發技術感興趣的同學,歡迎加下方的交流群一起學習,相互討論。

學習python過程中有不懂的可以加入我的python零基礎系統學習交流秋秋qun:934109170,與你分享Python企業當下人才需求及怎麼從零基礎學習Python,和學習什麼內容。相關學習視頻資料、開發工具都有分享

好啦!文章就給看官們分享到這兒

最後,如果覺得有幫助,記得關注、轉發、收藏喲

相關焦點

  • 初學者如何用「python爬蟲」技術抓取網頁數據?
    而這裡的「技術手段」就是指網絡爬蟲。 今天,小編將與您分享一個爬蟲的基本知識和入門教程:什麼是爬蟲?網絡爬蟲,也叫作網絡數據採集,是指通過編程從Web伺服器請求數據(HTML表單),然後解析HTML以提取所需的數據。
  • Python爬蟲數據抓取方法匯總!所有方法都在此!
    1、python進行網頁數據抓取有兩種方式:一種是直接依據url連結來拼接使用get方法得到內容,一種是構建post
  • python爬蟲收入 - CSDN
    個人爬蟲掙錢方法大致如下爬蟲技術掙錢方法1:接外包爬蟲項目這是網絡爬蟲最通常的的掙錢方式,通過外包網站,熟人關係接一個個中小規模的爬蟲項目,一般向甲方提供數據抓取,數據結構化,數據清洗等服務。美國學生也懶,老猿09年接觸freelancer時,上面還有美國學生python作業沒完成,在freelancer上花60美刀找人幫忙做作業。做外包越來越難,做的人太多,網上能接爬蟲外包的人從在校大學生、兩鬢白髮的老猿,到幾個人團隊作戰都在搶幾千元一個的項目,交付時間又很緊,你如果沒有客戶資源,現成的解決方案,和穩定,高效率的爬蟲技術來支撐,是搶不到好單的。
  • Python爬蟲學到什麼程度就可以去找工作了?
    有朋友在群裡和大家討論,問的最多的問題就是,python 爬蟲學到什麼程度可以去找工作了,關於這點,和大家分享下我的理解。確立目標、了解需求首先我們要先定位自己的目標,當然我們先以爬蟲工程師來做個說明。
  • python為什麼叫爬蟲?為啥那麼多人通過python兼職都能掙不少錢?
    Python能做什麼之前有很多文章介紹python能做什麼。今天介紹python爬蟲的學習。網絡爬蟲 網絡爬蟲,也叫網絡蜘蛛(Web Spider)。爬蟲是根據網頁地址(URL)爬取網頁上的內容,這裡說的網頁地址(URL)就是我們在瀏覽器中輸入的網站連結。例如:https://www.baidu.com/,這就是一個URL。
  • 開課吧Python:Python爬蟲是什麼?爬蟲工程師薪資怎麼樣?
    Python爬蟲是什麼?Python爬蟲是什麼?Python爬蟲是由Python程序開發的網絡爬蟲(webspider,webrobot),是按照一定規則自動抓取全球資訊網信息的程序或腳本。其實一般是通過程序在網頁上獲取你想要的數據,也就是自動抓取數據。為什麼需要用爬蟲?你可以想像一個場景:你在微博上崇拜一個名人,被他的微博迷住了。你要把他這十年微博裡的每一句話都摘抄下來。這個時候你會怎麼做?手動上Ctrl+C和Ctrl+V?這個方法是對的。在數據量很小的情況下我們還是可以這樣做的,但是在數據數千的情況下你還是要這樣做嗎?
  • Python 爬蟲實戰:貓眼電影
    ·背景  筆者上一篇文章《基於貓眼票房數據的可視化分析》中爬取了貓眼實時票房數據,用於展示近三年電影票房概況。由於數據中缺少導演/演員/編劇陣容等信息,所以爬取貓眼電影數據進行補充。關於爬蟲的教學內容,網絡上一搜就有很多了,這裡我以個人的爬蟲習慣,介紹此次過程中所用到的庫和代碼。流程圖,如下圖所示:
  • Python漫畫爬蟲——漫畫喵的100行代碼逆襲
    這次的博客,講的是使用python編寫一個爬蟲工具。為什麼要寫這個爬蟲呢?
  • 為什麼開發爬蟲都用Python呢?
    C/C++ 各種搜尋引擎大多使用C/C++開發爬蟲,可能是因為搜尋引擎爬蟲重要的是採集網站信息,對頁面的解析要求不高。Python寫起程序來很便捷,尤其是對聚焦爬蟲,目標網站經常變換,要根據目標的變化修改爬蟲程序,使用Python開發就顯得很方便。 Java Java有很多解析器,對網頁的解析支持很好,缺點是網絡部分支持較差。 對於一般性的需求,無論Java還是Python都可以勝任。
  • Python3網絡爬蟲(一):利用urllib進行簡單的網頁抓取
    一、預備知識1.Python3.x基礎知識學習:    可以在通過如下方式進行學習:    (1)廖雪峰Python3教程(文檔):    URL:http://www.liaoxuefeng.com/    (2)菜鳥教程Python3教程(文檔):    URL:http://www.runoob.com
  • 不用代碼玩轉爬蟲實例(1) - 抓取貓眼電影信息
    之前分享過一些關於用python抓取網頁數據的文章,可能有朋友會覺得自己不會寫代碼,或者寫代碼很費時費勁不夠方便。其實完全不用寫代碼一樣可以玩爬蟲!今天這篇文章開始就來陸續分享一下關於web scraper這款chrome插件的一些實例用法。關於web scraper,之前介紹了很多次了。
  • Node.js爬蟲實戰 - 爬你喜歡的
    首先咱們說哈,爬蟲不是「蟲子」,姑涼們不要害怕。爬蟲 - 一種通過一定方式按照一定規則抓取數據的操作或方法。開篇第二問:爬蟲能做什麼嘞?來來來,談談需求產品MM:愛豆的新電影上架了,整體電影評價如何呢?暗戀的妹子最近又失戀了,如何在她發微博的時候第一時間知道發了什麼,好去呵護呢?總是在看小說的時候點到廣告?
  • Python網頁爬蟲工具有哪些?
    不管文本處理,機器學習和數據發掘,都需求數據,除了通過一些途徑購買或者下載的專業數據外,常常需求我們自己著手爬數據,爬蟲就顯得分外重要。那麼,Python網頁爬蟲東西有哪些呢?1、ScrapyScrapy相Scrapy, a fast high-level screen scraping and web crawling framework for Python.信不少同學都有耳聞,課程圖譜中的許多課程都是依託Scrapy抓去的,這方面的介紹文章有許多,引薦大牛pluskid早年的一篇文章:《Scrapy 輕鬆定製網絡爬蟲》,歷久彌新。
  • 什麼是Python爬蟲?華為科普知識來看看
    中關村在線消息:為了讓更多的人理解Python爬蟲,華為中國在今天發布了一篇很有乾貨的科普文章,文章就叫《小白看過來,讓Python爬蟲成為你的好幫手》,大家可以來學習一下知識。不用愁,下面一文帶你走近爬蟲世界,讓即使身為ICT技術小白的你,也能秒懂使用Python爬蟲高效抓取圖片。什麼是專用爬蟲?網絡爬蟲是一種從網際網路抓取數據信息的自動化程序。如果我們把網際網路比作一張大的蜘蛛網,數據便是存放於蜘蛛網的各個節點,而爬蟲就是一隻小蜘蛛(程序),沿著網絡抓取自己的獵物(數據)。
  • python爬蟲實戰:爬取全站小說排行榜
    新筆趣閣是廣大書友最值得收藏的網絡小說閱讀網,網站收錄了當前.我就不打廣告了(其他滿足下文條件的網站也行,之前已經有做過簡單爬取章節的先例了,但效果不太理想,有很多不需要的成分被留下了,來連結:http://python.jobbole.com
  • 編寫你的第一個爬蟲程序
    因此,對於未來想進入中高級數據分析相關領域的朋友,掌握爬蟲就成為了必要不充分條件。《論語》有云:工欲善其事,必先利其器。市面上很多爬蟲類教程書籍,包括我非常喜歡的O』REILLY系列書籍,基本上都是以urllib、beautifulSoup等python庫入手。這些庫雖然功能強大,也具備一定的簡潔性,但是對於初學者而言,可以做的事真的比較少。
  • 關於反爬蟲,看這一篇就夠了
    三、什麼是爬蟲和反爬蟲因為反爬蟲暫時是個較新的領域,因此有些定義要自己下。我們內部定義是這樣的:爬蟲 : 使用任何技術手段,批量獲取網站信息的一種方式。關鍵在於批量。反爬蟲 : 使用任何技術手段,阻止別人批量獲取自己網站信息的一種方式。
  • Python網絡爬蟲-第一行代碼-windows環境
    Python有強大的支持爬蟲功能的庫,是爬取網頁數據的首選。先看看是否有Python:cmd界面執行Python已經安裝完成,版本是2.7.15。可能是我安裝vue開發環境或者安卓開發環境的時候順便裝上了。然後檢查pip是否安裝。
  • 5分鐘快速學習掌握python爬蟲Beautifulsoup解析網頁
    python爬蟲用Beatifulsoup庫解析網頁提取所需元素新手看懂個人觀點:之前我們有講過爬蟲和網頁的一些聯繫,網頁的一些組成部分,爬蟲就是對網頁裡面的數據進行提取然後對其進行數據處理,篩選出所需部分,供需要者使用。
  • 網站反爬蟲常見方法
    凡是有一定規模的網站,大公司的網站,或是盈利性質比較強的網站,都是有防爬措施的。網站為了正常運營,通常會設置各種反爬機制,讓爬蟲知難而退。今天神龍代理IP就給大家盤點一下網站常見的反爬蟲機制。網站反爬蟲常見方法1.通過UA判定UA即User Agent,它是請求瀏覽器的身份標誌。