欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一個(gè)簡(jiǎn)單的python爬蟲(chóng)程序 爬取豆瓣熱度Top100以內(nèi)的電影信息

 更新時(shí)間:2021年05月20日 15:28:02   作者:joseph_ji  
這篇文章主要為大家詳細(xì)介紹了一個(gè)簡(jiǎn)單的python爬蟲(chóng)程序,爬取豆瓣熱度Top100以內(nèi)的電影信息,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

概述

這是一個(gè)簡(jiǎn)單的python爬蟲(chóng)程序,僅用作技術(shù)學(xué)習(xí)與交流,主要是通過(guò)一個(gè)簡(jiǎn)單的實(shí)際案例來(lái)對(duì)網(wǎng)絡(luò)爬蟲(chóng)有個(gè)基礎(chǔ)的認(rèn)識(shí)。

什么是網(wǎng)絡(luò)爬蟲(chóng)

簡(jiǎn)單的講,網(wǎng)絡(luò)爬蟲(chóng)就是模擬人訪問(wèn)web站點(diǎn)的行為來(lái)獲取有價(jià)值的數(shù)據(jù)。專業(yè)的解釋:百度百科

分析爬蟲(chóng)需求

確定目標(biāo)

爬取豆瓣熱度在Top100以內(nèi)的電影的一些信息,包括電影的名稱、豆瓣評(píng)分、導(dǎo)演、編劇、主演、類型、制片國(guó)家/地區(qū)、語(yǔ)言、上映日期、片長(zhǎng)、IMDb鏈接等信息。

分析目標(biāo)

1.借助工具分析目標(biāo)網(wǎng)頁(yè)

首先,我們打開(kāi)豆瓣電影·熱門(mén)電影,會(huì)發(fā)現(xiàn)頁(yè)面總共20部電影,但當(dāng)查看頁(yè)面源代碼當(dāng)時(shí)候,在源代碼中根本找不到這些電影當(dāng)信息。這是為什么呢?原來(lái)豆瓣在這里是通過(guò)ajax技術(shù)獲取電影信息,再動(dòng)態(tài)的將數(shù)據(jù)加載到頁(yè)面中的。這就需要借助Chrome的開(kāi)發(fā)者工具,先找到獲取電影信息的API。

然后對(duì)電影詳情頁(yè)進(jìn)行分析

思路分析

具體實(shí)現(xiàn)

開(kāi)發(fā)環(huán)境

python3.6

pycharm

主要依賴庫(kù)

urllib -- 基礎(chǔ)性的網(wǎng)絡(luò)相關(guān)操作

lxml -- 通過(guò)xpath語(yǔ)法解析HTML頁(yè)面

json -- 對(duì)通過(guò)API獲取的JSON數(shù)據(jù)進(jìn)行操作

re -- 正則操作

代碼實(shí)現(xiàn)

from urllib import request
from lxml import etree
import json
import re
import ssl


# 全局取消證書(shū)驗(yàn)證
ssl._create_default_https_context = ssl._create_unverified_context


def get_headers():
  """
  返回請(qǐng)求頭信息
  :return:
  """
  headers = {
    'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) "
           "AppleWebKit/537.36 (KHTML, like Gecko) "
           "Chrome/65.0.3325.181 Safari/537.36"
  }
  return headers


def get_url_content(url):
  """
  獲取指定url的請(qǐng)求內(nèi)容
  :param url:
  :return:
  """
  content = ''
  headers = get_headers()
  res = request.Request(url, headers=headers)
  try:
    resp = request.urlopen(res, timeout=10)
    content = resp.read().decode('utf-8')
  except Exception as e:
    print('exception: %s' % e)
  return content


def parse_content(content):
  """
  解析網(wǎng)頁(yè)
  :param content:
  :return:
  """
  movie = {}
  html = etree.HTML(content)
  try:
    info = html.xpath("http://div[@id='info']")[0]
    movie['director'] = info.xpath("./span[1]/span[2]/a/text()")[0]
    movie['screenwriter'] = info.xpath("./span[2]/span[2]/a/text()")[0]
    movie['actors'] = '/'.join(info.xpath("./span[3]/span[2]/a/text()"))
    movie['type'] = '/'.join(info.xpath("./span[@property='v:genre']/"
                      "text()"))
    movie['initialReleaseDate'] = '/'.\
      join(info.xpath(".//span[@property='v:initialReleaseDate']/text()"))
    movie['runtime'] = \
      info.xpath(".//span[@property='v:runtime']/text()")[0]

    def str_strip(s):
      return s.strip()

    def re_parse(key, regex):
      ret = re.search(regex, content)
      movie[key] = str_strip(ret[1]) if ret else ''

    re_parse('region', r'<span class="pl">制片國(guó)家/地區(qū):</span>(.*?)<br/>')
    re_parse('language', r'<span class="pl">語(yǔ)言:</span>(.*?)<br/>')
    re_parse('imdb', r'<span class="pl">IMDb鏈接:</span> <a href="(.*?)" rel="external nofollow" '
             r'target="_blank" >')
  except Exception as e:
    print('解析異常: %s' % e)
  return movie


def spider():
  """
  爬取豆瓣前100部熱門(mén)電影
  :return:
  """
  recommend_moives = []
  movie_api = 'https://movie.douban.com/j/search_subjects?' \
        'type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend' \
        '&page_limit=100&page_start=0'
  content = get_url_content(movie_api)
  json_dict = json.loads(content)
  subjects = json_dict['subjects']
  for subject in subjects:
    content = get_url_content(subject['url'])
    movie = parse_content(content)
    movie['title'] = subject['title']
    movie['rate'] = subject['rate']
    recommend_moives.append(movie)
    print(len(recommend_moives))
  print(recommend_moives)


if __name__ == '__main__':
  spider()

效果

 

總結(jié)

本文較詳細(xì)的闡述了一個(gè)爬蟲(chóng)從需求->分析->實(shí)現(xiàn)的過(guò)程,并給出了具體的代碼實(shí)現(xiàn)。通過(guò)對(duì)本文的學(xué)習(xí),我們可以了解到網(wǎng)絡(luò)爬蟲(chóng)的一些基本的知識(shí),以及python的一些基本庫(kù)的使用方法。接下來(lái)我會(huì)使用一些高級(jí)些的網(wǎng)絡(luò)操作相關(guān)的庫(kù)以及對(duì)抓取到的數(shù)據(jù)做個(gè)存儲(chǔ)的方式,來(lái)更深層次的理解python網(wǎng)絡(luò)爬蟲(chóng)。

特別聲明

1. 本文涉及到的豆瓣網(wǎng)是國(guó)內(nèi)知名網(wǎng)站,若有侵權(quán)之處,請(qǐng)告知。
2. 本文屬作者原創(chuàng),轉(zhuǎn)載請(qǐng)標(biāo)明出處;未經(jīng)允許,不得用于商業(yè)用途。
3. 本文只是用作網(wǎng)絡(luò)爬蟲(chóng)技術(shù)學(xué)習(xí)交流,讀者涉及到的任何侵權(quán)問(wèn)題,與本文作者無(wú)關(guān)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論