爬取電影天堂-二級頁面抓取


# 地址
  電影天堂 - 2019年新片精品 - 更多
# 目標
  電影名稱、下載鏈接

# 分析
*********一級頁面需抓取***********
    1、電影名稱
    2、電影鏈接

*********二級頁面需抓取***********
    1、下載鏈接

 

實現步驟

1、確定響應內容中是否存在所需抓取數據

 

2、找URL規律

第1頁 :https://www.dytt8.net/html/gndy/dyzz/list_23_1.html
第2頁 :https://www.dytt8.net/html/gndy/dyzz/list_23_2.html
第n頁 :https://www.dytt8.net/html/gndy/dyzz/list_23_n.html

 

3、寫正則表達式

1、一級頁面正則表達式
   <table width="100%".*?<td width="5%".*?<a href="(.*?)".*?ulink">(.*?)</a>.*?</table>
2、二級頁面正則表達式
   <td style="WORD-WRAP.*?>.*?>(.*?)</a>

 

4、代碼實現

from urllib import request
import re
from useragents import ua_list
import time
import random

class FilmSkySpider(object):
  def __init__(self):
    # 一級頁面url地址
    self.url = 'https://www.dytt8.net/html/gndy' \
               '/dyzz/list_23_{}.html'

  # 獲取html功能函數
  def get_html(self,url):
    headers = {
      'User-Agent':random.choice(ua_list)
    }
    req = request.Request(url=url,headers=headers)
    res = request.urlopen(req)
    # 通過網站查看網頁源碼,查看網站charset='gb2312'
    # 如果遇到解碼錯誤,識別不了一些字符,則 ignore 忽略掉
    html = res.read().decode('gb2312','ignore')

    return html

  # 正則解析功能函數
  def re_func(self,re_bds,html):
    pattern = re.compile(re_bds,re.S)
    r_list = pattern.findall(html)

    return r_list

  # 獲取數據函數 - html是一級頁面響應內容
  def parse_page(self,html):
    re_bds = r'<table width="100%".*?<td width="5%".*?<a href="(.*?)".*?ulink">(.*?)</a>.*?</table>'
    # one_page_list: [('/html/xxx','幸福獵人'),()]
    one_page_list = self.re_func(re_bds,html)
    item = {}
    for film in one_page_list:
      item['name'] = film[1].strip()
      link = 'https://www.dytt8.net' + film[0]
      item['download'] = self.parse_two_page(link)

      # uniform: 浮點數,爬取1個電影信息后sleep
      time.sleep(random.uniform(1, 3))

      print(item)

  # 解析二級頁面數據
  def parse_two_page(self,link):
    html = self.get_html(link)
    re_bds = r'<td style="WORD-WRAP.*?>.*?>(.*?)</a>'
    # two_page_list: ['ftp://xxxx.mkv']
    two_page_list = self.re_func(re_bds,html)
    download = two_page_list[0].strip()

    return download

  def main(self):
    for page in range(1,11):
      url = self.url.format(page)
      html = self.get_html(url)
      self.parse_page(html)
      # uniform: 浮點數
      time.sleep(random.uniform(1,3))

if __name__ == '__main__':
  spider = FilmSkySpider()
  spider.main()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM