亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解Python爬取并下載《電影天堂》3千多部電影

 更新時(shí)間:2019年04月26日 09:55:53   作者:機(jī)靈鶴  
這篇文章主要介紹了Python爬取并下載《電影天堂》3千多部電影,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

不知不覺(jué),玩爬蟲(chóng)玩了一個(gè)多月了。

我愈發(fā)覺(jué)得,爬蟲(chóng)其實(shí)并不是什么特別高深的技術(shù),它的價(jià)值不在于你使用了什么特別牛的框架,用了多么了不起的技術(shù),它不需要。它只是以一種自動(dòng)化搜集數(shù)據(jù)的小工具,能夠獲取到想要的數(shù)據(jù),就是它最大的價(jià)值。

我的爬蟲(chóng)課老師也常跟我們強(qiáng)調(diào),學(xué)習(xí)爬蟲(chóng)最重要的,不是學(xué)習(xí)里面的技術(shù),因?yàn)榍岸思夹g(shù)在不斷的發(fā)展,爬蟲(chóng)的技術(shù)便會(huì)隨著改變。學(xué)習(xí)爬蟲(chóng)最重要的是,學(xué)習(xí)它的原理,萬(wàn)變不離其宗。

爬蟲(chóng)說(shuō)白了是為了解決需要,方便生活的。如果能夠在日常生活中,想到并應(yīng)用爬蟲(chóng)去解決實(shí)際的問(wèn)題,那么爬蟲(chóng)的真正意義也久發(fā)揮出來(lái)了。

這是些閑話啦,有感而發(fā)而已。

最近有點(diǎn)片荒,不知道該看什么電影,而且有些電影在網(wǎng)上找好久也找不到資源。后來(lái)我了解到這個(gè)網(wǎng)站,發(fā)現(xiàn)最近好多不錯(cuò)的電影上面都有資源(這里我就先不管它的來(lái)源正不正規(guī)啦,#掩面)。

所以這次我們要爬取的網(wǎng)站是:《電影天堂》,屯一些電影,等無(wú)聊的時(shí)候拿出來(lái)看看,消遣消遣也是不錯(cuò)。

這次的網(wǎng)站,從爬蟲(chóng)的技術(shù)角度上來(lái)講,難度不大,而且可以說(shuō)是非常簡(jiǎn)單了。但是,它實(shí)用??!你想嘛,早上上班前跑一下爬蟲(chóng),晚上回家以后已經(jīng)有幾十部最新大片在你硬盤(pán)里等著你啦,累了一天躺床上看看電影,這種感覺(jué)是不是很爽啊。

而且正因?yàn)檫@個(gè)爬蟲(chóng)比較簡(jiǎn)單,所以我會(huì)寫(xiě)的稍微細(xì)一點(diǎn),爭(zhēng)取讓 python 小白們也能盡可能看懂,并且能夠在這個(gè)爬蟲(chóng)的基礎(chǔ)上修改,得到爬取這個(gè)網(wǎng)站其他板塊或者其他電影網(wǎng)站的爬蟲(chóng)。

寫(xiě)在前面的話

在編寫(xiě)爬蟲(chóng)程序之前,我先捋一捋我們的思路。

  1. 爬蟲(chóng)的原理,是通過(guò)給定的一個(gè) URL(就是類(lèi)似于 http://www.baidu.com 這樣的,俗稱(chēng)網(wǎng)址的東東) 請(qǐng)求,去訪問(wèn)一個(gè)網(wǎng)頁(yè),獲取那個(gè)網(wǎng)頁(yè)上的源代碼(不知道源代碼的,隨便打開(kāi)一個(gè)網(wǎng)頁(yè),右鍵,查看網(wǎng)頁(yè)源代碼,出來(lái)的一大堆像亂碼一樣的東西就是網(wǎng)頁(yè)源代碼,我們需要的數(shù)據(jù)就藏在這些源代碼里面)并返回來(lái)。
  2. 然后,通過(guò)一些手段(比如說(shuō)json庫(kù),BeautifulSoup庫(kù),正則表達(dá)式等)從網(wǎng)頁(yè)源代碼中篩選出我們想要的數(shù)據(jù)(當(dāng)然,前提是我們需要分析網(wǎng)頁(yè)結(jié)構(gòu),知道自己想要什么數(shù)據(jù),以及這些數(shù)據(jù)存放在網(wǎng)頁(yè)的哪兒,存放的位置有什么特征等)。
  3. 最后,將我們獲取到的數(shù)據(jù)按照一定的格式,存儲(chǔ)到本地或者數(shù)據(jù)庫(kù)中,這樣就完成了爬蟲(chóng)的全部工作。

當(dāng)然,也有一些 「騷操作」,如果你嫌爬蟲(chóng)效率低,可以開(kāi)多線程(就是相當(dāng)于幾十只爬蟲(chóng)同時(shí)給你爬,效率直接翻了幾十倍);如果擔(dān)心爬取頻率過(guò)高被網(wǎng)站封 IP,可以掛 IP 代理(相當(dāng)于打幾槍換個(gè)地方,對(duì)方網(wǎng)站就不知道你究竟是爬蟲(chóng)還是正常訪問(wèn)的用戶(hù)了);如果對(duì)方網(wǎng)站有反爬機(jī)制,那么也有一些騷操作可以繞過(guò)反爬機(jī)制(有點(diǎn)黑客攻防的感覺(jué),有木有?。?。這些都是后話了。

爬蟲(chóng)部分

一、分析網(wǎng)站結(jié)構(gòu)(以動(dòng)作片電影為例)

1. 分析網(wǎng)頁(yè)的 URL 的組成結(jié)構(gòu)

首先,我們需要分析網(wǎng)頁(yè)的 URL 的組成結(jié)構(gòu),主要關(guān)注兩方面,一是如何切換選擇的電影類(lèi)型,二是網(wǎng)頁(yè)如何翻頁(yè)的。

點(diǎn)擊網(wǎng)頁(yè)上的電影類(lèi)型的按鈕,觀察地址欄中的 URL ,發(fā)現(xiàn)網(wǎng)址和電影類(lèi)型的關(guān)系如下:

電影類(lèi)型 網(wǎng)址
劇情片 https://www.dy2018.com/0/
喜劇片 https://www.dy2018.com/1/
動(dòng)作片 https://www.dy2018.com/2/
愛(ài)情片 https://www.dy2018.com/3/
科幻片 https://www.dy2018.com/4/
動(dòng)畫(huà)片 https://www.dy2018.com/5/
懸疑片 https://www.dy2018.com/6/
驚悚片 https://www.dy2018.com/7/
恐怖片 https://www.dy2018.com/8/
記錄片 https://www.dy2018.com/9/
...... ......
災(zāi)難片 https://www.dy2018.com/18/
武俠片 https://www.dy2018.com/19/
古裝片 https://www.dy2018.com/20/

發(fā)現(xiàn)規(guī)律了吧,以后如果想爬其他類(lèi)型的電影,只要改變 url 中的數(shù)字即可,甚至你可以寫(xiě)一個(gè)循環(huán),把所有板塊中的電影全部爬取下來(lái)。

隨便打開(kāi)一個(gè)分類(lèi),我們滾動(dòng)到頁(yè)面的最下面,發(fā)現(xiàn)這里有翻頁(yè)的按鈕,點(diǎn)擊按鈕翻頁(yè)的同時(shí),觀察 url 的變化。

頁(yè)碼 URL
第一頁(yè) https://www.dy2018.com/2/index.html
第二頁(yè) https://www.dy2018.com/2/index_2.html
第三頁(yè) https://www.dy2018.com/2/index_3.html
第四頁(yè) https://www.dy2018.com/2/index_4.html

除了第一頁(yè)是 「index」外,其余頁(yè)碼均是 「index_頁(yè)碼」的形式。

所以我們基本掌握了網(wǎng)站的 url 的構(gòu)成形式,這樣我們就可以通過(guò)自己構(gòu)造 url 來(lái)訪問(wèn)任意類(lèi)型電影的任意一頁(yè)了,是不是很酷。

2. 分析網(wǎng)站的頁(yè)面結(jié)構(gòu)

其次,我們分析一下網(wǎng)站的頁(yè)面結(jié)構(gòu),看一看我們需要的信息都藏在網(wǎng)頁(yè)的什么地方(在這之前我們先要明確一下我們需要哪些數(shù)據(jù)),由于我們這個(gè)目的是下載電影,所以對(duì)我有用的數(shù)據(jù)只有兩個(gè),電影名稱(chēng)和下載電影的磁力鏈接。

按 F12 召喚出開(kāi)發(fā)者工具(這個(gè)工具可以幫助你快速定位網(wǎng)頁(yè)中的元素在 html 源代碼中位置)。

然后,我們可以發(fā)現(xiàn),電影列表中,每一部電影的信息存放在一個(gè) <table> 標(biāo)簽里,而電影的名字,就藏在里面的一個(gè) <a> 標(biāo)簽中。電影下載的磁力鏈接在電影的詳情頁(yè)面,而電影詳情頁(yè)面的網(wǎng)址也在這個(gè) <a> 標(biāo)簽中( href 屬性的值)。

 而下載的磁力鏈接,存放在 <tbody> 標(biāo)簽下的 <a> 標(biāo)簽中,是不是很好找??!

最后我們來(lái)縷一縷思路,一會(huì)兒我們準(zhǔn)備這樣操作:通過(guò)前面的網(wǎng)址的構(gòu)造規(guī)則,訪問(wèn)到網(wǎng)站的某一頁(yè),然后獲取到這個(gè)頁(yè)面里的所有 table 標(biāo)簽(這里存放著電影的數(shù)據(jù)),然后從每一個(gè) table 標(biāo)簽中找到存有電影名稱(chēng)的 a 標(biāo)簽(這里可以拿到電影名稱(chēng)以及詳情頁(yè)面的網(wǎng)址),然后通過(guò)這里獲取的網(wǎng)址訪問(wèn)電影的詳情頁(yè)面,在詳情頁(yè)面挑選出 <tbody> 標(biāo)簽下的 <a> 標(biāo)簽(這里存放著電影的下載鏈接),這樣我們就找到了我們所需要的全部數(shù)據(jù)了,是不是很簡(jiǎn)單啊。

二、爬蟲(chóng)編碼階段 

爬蟲(chóng)的程序,我一般習(xí)慣把它分成五個(gè)部分, 一是主函數(shù),作為程序的入口,二是爬蟲(chóng)調(diào)度器,三是網(wǎng)絡(luò)請(qǐng)求函數(shù),四是網(wǎng)頁(yè)解析函數(shù),五是數(shù)據(jù)存儲(chǔ)函數(shù)。

  1. get_data :其參數(shù)是目標(biāo)網(wǎng)頁(yè) url,這個(gè)函數(shù)可以模擬瀏覽器訪問(wèn) url,獲取并將網(wǎng)頁(yè)的內(nèi)容返回。
  2. parse_data :其參數(shù)是網(wǎng)頁(yè)的內(nèi)容,這個(gè)函數(shù)主要是用來(lái)解析網(wǎng)頁(yè)內(nèi)容,篩選提取出關(guān)鍵的信息,并打包成列表返回。
  3. save_data :其參數(shù)是數(shù)據(jù)的列表,這個(gè)函數(shù)用來(lái)將列表中的數(shù)據(jù)寫(xiě)入本地的文件中。
  4. main :這個(gè)函數(shù)是爬蟲(chóng)程序的調(diào)度器,可以根據(jù)事先分析好的 url 的規(guī)則,不斷的構(gòu)造新的請(qǐng)求 url,并調(diào)用其他三個(gè)函數(shù),獲取數(shù)據(jù)并保存到本地,直到結(jié)束。
  5. if __name__ == '__main__' :這是主程序的入口,在這里調(diào)用 main 函數(shù),啟動(dòng)爬蟲(chóng)調(diào)度器即可。
# 我們用到的庫(kù)
import requests
import bs4
import re
import pandas as pd

1. 網(wǎng)絡(luò)請(qǐng)求函數(shù) :get_data (url)

負(fù)責(zé)訪問(wèn)指定的 url 網(wǎng)頁(yè),并將網(wǎng)頁(yè)的內(nèi)容返回,此部分功能比較簡(jiǎn)單固定,一般不需要做修改(除非你要掛代理,或者自定義請(qǐng)求頭等,可以做一些相應(yīng)的調(diào)整)。

def get_data(url):
  '''
  功能:訪問(wèn) url 的網(wǎng)頁(yè),獲取網(wǎng)頁(yè)內(nèi)容并返回
  參數(shù):
    url :目標(biāo)網(wǎng)頁(yè)的 url
  返回:目標(biāo)網(wǎng)頁(yè)的 html 內(nèi)容
  '''
  headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
  }
 
  try:
    r = requests.get(url, headers=headers)
    r.raise_for_status()
    return r.text
  
  except requests.HTTPError as e:
    print(e)
    print("HTTPError")
  except requests.RequestException as e:
    print(e)
  except:
    print("Unknown Error !")

2. 網(wǎng)頁(yè)解析函數(shù):parse_data(html)

 這個(gè)函數(shù)是整個(gè)爬蟲(chóng)程序的核心所在,整體思路在上一部分已經(jīng)講過(guò)了。我這里使用的庫(kù)是 BeautifulSoup。

這部分的寫(xiě)法多種多樣,有很多發(fā)揮的空間,也沒(méi)有什么太多固定的模式,因?yàn)檫@部分的寫(xiě)法是要隨著不同網(wǎng)站的頁(yè)面結(jié)構(gòu)來(lái)做調(diào)整的,比如說(shuō)有的網(wǎng)站提供了數(shù)據(jù)的 api 接口,那么返回的數(shù)據(jù)就是 json 格式,我們只需要調(diào)用 json 庫(kù)就可以完成數(shù)據(jù)解析,而大部分的網(wǎng)站只能通過(guò)從網(wǎng)頁(yè)源代碼中一層層篩選(篩選手段也多種多樣,什么正則表達(dá)式,beautifulsoup等等)。

這里需要根據(jù)數(shù)據(jù)的形式來(lái)選擇不同的篩選策略,所以,知道原理就可以了,習(xí)慣什么方法就用什么方法,反正最后能拿到數(shù)據(jù)就好了。

def parse_data(html):
  '''
  功能:提取 html 頁(yè)面信息中的關(guān)鍵信息,并整合一個(gè)數(shù)組并返回
  參數(shù):html 根據(jù) url 獲取到的網(wǎng)頁(yè)內(nèi)容
  返回:存儲(chǔ)有 html 中提取出的關(guān)鍵信息的數(shù)組
  '''
  bsobj = bs4.BeautifulSoup(html,'html.parser')
  info = []
  
  # 獲取電影列表
  tbList = bsobj.find_all('table', attrs = {'class': 'tbspan'})
  
  # 對(duì)電影列表中的每一部電影單獨(dú)處理
  for item in tbList:
 
    movie = []
    link = item.b.find_all('a')[1]
 
    # 獲取電影的名稱(chēng)
    name = link["title"]
 
    # 獲取詳情頁(yè)面的 url
    url = 'https://www.dy2018.com' + link["href"]
 
    # 將數(shù)據(jù)存放到電影信息列表里
    movie.append(name)
    movie.append(url)
    
    try:
      # 訪問(wèn)電影的詳情頁(yè)面,查找電影下載的磁力鏈接
      temp = bs4.BeautifulSoup(get_data(url),'html.parser')
      tbody = temp.find_all('tbody')
      
      # 下載鏈接有多個(gè)(也可能沒(méi)有),這里將所有鏈接都放進(jìn)來(lái)
      for i in tbody:
        download = i.a.text
        movie.append(download)
        
      #print(movie)
 
      # 將此電影的信息加入到電影列表中
      info.append(movie)
      
    except Exception as e:
      print(e)
  
  return info

3. 數(shù)據(jù)存儲(chǔ)函數(shù):save_data(data)

 這個(gè)函數(shù)目的是將數(shù)據(jù)存儲(chǔ)到本地文件或數(shù)據(jù)庫(kù)中,具體的寫(xiě)法要根據(jù)實(shí)際需要的存儲(chǔ)形式來(lái)定,我這里是將數(shù)據(jù)存放在本地的 csv 文件中。

當(dāng)然這個(gè)函數(shù)也并不只能做這些事兒,比如你可以在這里寫(xiě)一些簡(jiǎn)單的數(shù)據(jù)處理的操作,比如說(shuō):數(shù)據(jù)清洗,數(shù)據(jù)去重等操作。

def save_data(data):
  '''
  功能:將 data 中的信息輸出到文件中/或數(shù)據(jù)庫(kù)中。
  參數(shù):data 將要保存的數(shù)據(jù) 
  '''
  filename = 'Data/電影天堂/動(dòng)作片.csv'
  
  dataframe = pd.DataFrame(data)
  dataframe.to_csv(filename, mode='a', index=False, sep=',', header=False)

4. 爬蟲(chóng)調(diào)度器:main()

這個(gè)函數(shù)負(fù)責(zé)根據(jù) url 生成規(guī)則,構(gòu)造新的 url 請(qǐng)求,然后依次調(diào)用網(wǎng)絡(luò)請(qǐng)求函數(shù),網(wǎng)頁(yè)解析函數(shù),數(shù)據(jù)存儲(chǔ)函數(shù),爬取并保存該頁(yè)數(shù)據(jù)。

所謂爬蟲(chóng)調(diào)度器,就是控制爬蟲(chóng)什么時(shí)候開(kāi)始爬,多少只爬蟲(chóng)一起爬,爬哪個(gè)網(wǎng)頁(yè),爬多久休息一次,等等這些事兒。

def main():
  # 循環(huán)爬取多頁(yè)數(shù)據(jù)
  for page in range(1, 114):
    print('正在爬?。旱? + str(page) + '頁(yè)......')    
    # 根據(jù)之前分析的 URL 的組成結(jié)構(gòu),構(gòu)造新的 url
    if page == 1:
      index = 'index'
    else:
      index = 'index_' + str(page)      
    url = 'https://www.dy2018.com/2/'+ index +'.html'
    # 依次調(diào)用網(wǎng)絡(luò)請(qǐng)求函數(shù),網(wǎng)頁(yè)解析函數(shù),數(shù)據(jù)存儲(chǔ)函數(shù),爬取并保存該頁(yè)數(shù)據(jù)
    html = get_data(url)
    movies = parse_data(html)
    save_data(movies)
    
    print('第' + str(page) + '頁(yè)完成!')

5. 主函數(shù):程序入口

主函數(shù)作為程序的入口,只負(fù)責(zé)啟動(dòng)爬蟲(chóng)調(diào)度器。

這里我一般習(xí)慣在 main() 函數(shù)前后輸出一條語(yǔ)句,以此判斷爬蟲(chóng)程序是否正常啟動(dòng)和結(jié)束。

if __name__ == '__main__':
  print('爬蟲(chóng)啟動(dòng)成功!')
  main()
  print('爬蟲(chóng)執(zhí)行完畢!')

三、程序運(yùn)行結(jié)果

 運(yùn)行了兩個(gè)小時(shí)左右吧,終于爬完了 113 頁(yè),共 3346 部動(dòng)作片電影的數(shù)據(jù)(本來(lái)不止這些的,但是有一些電影沒(méi)有提供下載鏈接,我在 excel 中排序后直接手動(dòng)剔除了)。

 

然后想看什么電影的話,直接復(fù)制這些電影下載的磁力鏈接,到迅雷里面下載就好啦。 

四、爬蟲(chóng)程序的一些小優(yōu)化

1. 在網(wǎng)站提供的下載鏈接中,我試了一下,發(fā)現(xiàn) magnet 開(kāi)頭的這類(lèi)鏈接放在迅雷中可以直接下載,而 ftp 開(kāi)頭的鏈接在迅雷中總顯示資源獲取失?。ㄎ也恢朗遣皇俏掖蜷_(kāi)的方式不對(duì),反正就是下載不來(lái)),于是我對(duì)程序做了一些小的調(diào)整,使其只獲取 magnet 這類(lèi)的鏈接。

修改的方式也很簡(jiǎn)單,只需要調(diào)整 網(wǎng)頁(yè)解析函數(shù) 即可(爬蟲(chóng)的五個(gè)部分是相對(duì)獨(dú)立的,修改時(shí)只需調(diào)整相應(yīng)的模塊即可,其余部分無(wú)需修改)。

def parse_data(html):
  '''
  功能:提取 html 頁(yè)面信息中的關(guān)鍵信息,并整合一個(gè)數(shù)組并返回
  參數(shù):html 根據(jù) url 獲取到的網(wǎng)頁(yè)內(nèi)容
  返回:存儲(chǔ)有 html 中提取出的關(guān)鍵信息的數(shù)組
  '''
  bsobj = bs4.BeautifulSoup(html,'html.parser')
  info = []
  
  # 獲取表頭信息
  tbList = bsobj.find_all('table', attrs = {'class': 'tbspan'})
  
  for item in tbList:
    movie = []
    link = item.b.find_all('a')[1]
    name = link["title"]
    url = 'https://www.dy2018.com' + link["href"]
    
    try:
      # 查找電影下載的磁力鏈接
      temp = bs4.BeautifulSoup(get_data(url),'html.parser')
      tbody = temp.find_all('tbody')
      
      for i in tbody:
        download = i.a.text
        if 'magnet:?xt=urn:btih' in download:
          movie.append(name)
          movie.append(url)
          movie.append(download)
          #print(movie)
          info.append(movie)
          break
    except Exception as e:
      print(e)
  
  return info

注意代碼 26 行處,我加了一個(gè) if 語(yǔ)句的判斷,如果下載鏈接中包含 magnet:?xt=urn:btih 字符串,則視為有效鏈接,下載下來(lái),否則跳過(guò)。

2. 我一直在想能不能有個(gè)辦法讓迅雷一鍵批量下載我們爬到的電影。使用 python 操縱第三方的軟件,這其實(shí)挺難的。不過(guò)后來(lái)找到了一種方法,也算是解決了這個(gè)問(wèn)題。

就是我們發(fā)現(xiàn)迅雷軟件啟動(dòng)后,會(huì)自動(dòng)檢測(cè)我們的剪切板,只要我們復(fù)制了下載鏈接,它便會(huì)自動(dòng)彈出下載的提示框。借助這個(gè)思路,我們可以使用代碼,將下載的鏈接復(fù)制進(jìn)入剪切板,等下載框自動(dòng)出現(xiàn)后,手動(dòng)確認(rèn)開(kāi)始下載(這是我目前想到的最好的辦法了,不知道各位大佬有沒(méi)有更好的思路,歡迎指導(dǎo)交流)。

import pyperclip
import os
import pandas as pd
 
imageData = pd.read_csv("Data/電影天堂/動(dòng)作片2.csv",names=['name','link','download'],encoding = 'gbk')
# 獲取電影的下載鏈接,并用換行符分隔
a_link = imageData['download']
links = '\n'.join(a_link)
 
# 復(fù)制到剪切板
pyperclip.copy(links);
print('已粘貼');
 
# 打開(kāi)迅雷
thunder_path = r'D:\Program Files (x86)\Thunder Network\Thunder9\Program\Thunder.exe'
os.startfile(thunder_path)

親測(cè)可以實(shí)現(xiàn),但是。。。不建議嘗試(你能想象迅雷打開(kāi)的一瞬間創(chuàng)建幾百個(gè)下載任務(wù)的場(chǎng)景嗎?反正我的電腦是緩了好久好久才反應(yīng)過(guò)來(lái))。大家還是老老實(shí)實(shí)的,手動(dòng)復(fù)制鏈接下載吧(csv文件可以用 excel 打開(kāi),豎著選中一列,然后復(fù)制,也能達(dá)到相同的效果) ,這種騷操作太蠢了還是不要試了。

寫(xiě)在后面的話

啰啰嗦嗦的寫(xiě)了好多,也不知道關(guān)鍵的問(wèn)題講清楚了沒(méi)有。有哪里沒(méi)講清楚,或者哪里講的不合適的話,歡迎騷擾。
 其實(shí)吧,寫(xiě)文章,寫(xiě)博客,寫(xiě)教程,都是一個(gè)知識(shí)重新熔煉內(nèi)化的過(guò)程,在寫(xiě)這篇博客的時(shí)候,我也一直在反復(fù)審視我學(xué)習(xí)爬蟲(chóng)的過(guò)程,以及我爬蟲(chóng)代碼一步步的變化,從一開(kāi)始的所有代碼全部揉在主函數(shù)中,到后來(lái)把一些變動(dòng)較少的功能提取出來(lái),寫(xiě)成單獨(dú)的函數(shù),再到后來(lái)形成基本穩(wěn)定的五大部分。

以至于在我后來(lái)學(xué)習(xí)使用 scrapy 框架時(shí)候,驚人的發(fā)現(xiàn) scrapy 框架的結(jié)構(gòu)跟我的爬蟲(chóng)結(jié)構(gòu)有著異曲同工之妙,我的這個(gè)相當(dāng)于是一個(gè)簡(jiǎn)易版的爬蟲(chóng)框架了,純靠自己摸索達(dá)到這個(gè)效果,我感覺(jué)還是挺有成就感的。

以上所述是小編給大家介紹的Python爬取并下載《電影天堂》3千多部電影詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Python實(shí)現(xiàn)C#代碼生成器應(yīng)用服務(wù)于Unity示例解析

    Python實(shí)現(xiàn)C#代碼生成器應(yīng)用服務(wù)于Unity示例解析

    為了滿(mǎn)足項(xiàng)目需要,需要實(shí)現(xiàn)一個(gè)c#代碼生成器,為此設(shè)計(jì)了一個(gè)語(yǔ)法模板適用于Unity的代碼生成器。本次使用了Python的Template模板,使用python開(kāi)發(fā)
    2021-10-10
  • PyQt5結(jié)合QtDesigner實(shí)現(xiàn)文本框讀寫(xiě)操作

    PyQt5結(jié)合QtDesigner實(shí)現(xiàn)文本框讀寫(xiě)操作

    本文將結(jié)合實(shí)例代碼,介紹PyQt5結(jié)合QtDesigner實(shí)現(xiàn)文本框讀寫(xiě)操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • python redis連接 有序集合去重的代碼

    python redis連接 有序集合去重的代碼

    這篇文章主要介紹了python redis連接 有序集合去重的代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python可變參數(shù)會(huì)自動(dòng)填充前面的默認(rèn)同名參數(shù)實(shí)例

    Python可變參數(shù)會(huì)自動(dòng)填充前面的默認(rèn)同名參數(shù)實(shí)例

    今天小編就為大家分享一篇Python可變參數(shù)會(huì)自動(dòng)填充前面的默認(rèn)同名參數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • Python控制線程和函數(shù)超時(shí)處理

    Python控制線程和函數(shù)超時(shí)處理

    這篇文章主要介紹了Python控制線程和函數(shù)超時(shí)處理,文中利用兩種方法進(jìn)行eventlet庫(kù)和@func_set_timeout修飾器,文章具體詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-06-06
  • Pytorch相關(guān)知識(shí)介紹與應(yīng)用

    Pytorch相關(guān)知識(shí)介紹與應(yīng)用

    最近又重拾了機(jī)器學(xué)習(xí)的相關(guān)技術(shù),在本科畢設(shè)的階段下學(xué)習(xí)使用了Tensorflow 2.x工具,當(dāng)時(shí)也是不求甚解,直接拿來(lái)用了,但現(xiàn)在已經(jīng)有充足的時(shí)間、精力和基礎(chǔ)知識(shí)來(lái)重新學(xué)習(xí)一下
    2022-11-11
  • Python如何通過(guò)百度翻譯API實(shí)現(xiàn)翻譯功能

    Python如何通過(guò)百度翻譯API實(shí)現(xiàn)翻譯功能

    這篇文章主要介紹了Python如何通過(guò)百度翻譯API實(shí)現(xiàn)翻譯功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Numpy之如何改變數(shù)組形狀

    Numpy之如何改變數(shù)組形狀

    這篇文章主要介紹了Numpy之如何改變數(shù)組形狀問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Python函數(shù)遞歸調(diào)用實(shí)現(xiàn)原理實(shí)例解析

    Python函數(shù)遞歸調(diào)用實(shí)現(xiàn)原理實(shí)例解析

    這篇文章主要介紹了Python函數(shù)遞歸調(diào)用實(shí)現(xiàn)原理過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 利用python實(shí)現(xiàn)微信頭像加紅色數(shù)字功能

    利用python實(shí)現(xiàn)微信頭像加紅色數(shù)字功能

    通過(guò)Python實(shí)現(xiàn)將你的 QQ 頭像(或者微博頭像)右上角加上紅色的數(shù)字,類(lèi)似于微信未讀信息數(shù)量那種提示效果。下面通過(guò)本文給大家分享python實(shí)現(xiàn)微信頭像加紅色數(shù)字功能,感興趣的朋友一起看看吧
    2018-03-03

最新評(píng)論