Python爬蟲學習==>第十章:使用Requests+正則表達式爬取貓眼電影

来源:https://www.cnblogs.com/wuzhiming/archive/2018/04/10/8723002.html
-Advertisement-
Play Games

學習目的: 通過一個一個簡單的爬蟲應用,初窺門徑。 正式步驟 Step1:流程框架 Step2:實際步驟+分析 1. 在pycharm中新建一個Python項目,新建一個文件spider.py 2.運行代碼: 運行結果不添加了,此外,最後註釋掉的代碼,功能是非多線程的 學習總結: 爬蟲涉及的Pyth ...


學習目的:

   通過一個一個簡單的爬蟲應用,初窺門徑。

 

正式步驟


 

Step1:流程框架

  1.  抓取單頁內容:利用requests請求目標站點,得到單個頁面的html代碼,返回結果;
  2. 正則表達式分析:根據html頁面代碼分析得到貓眼電影的名稱、主演、上映時間、評分、圖片信息等;
  3. 保存至文件:通過文件的形式將結果保存,每一部電影一個結果一行json字元串;
  4. 開啟迴圈及多線程:對頁面內容進行遍歷,開啟多線程提高抓取效率

 

Step2:實際步驟+分析

1. 在pycharm中新建一個Python項目,新建一個文件spider.py

2.運行代碼:

# -*-  coding:utf-8 -*-

import requests
import re
import json
from requests.exceptions import RequestException
from multiprocessing import Pool

def get_page_html(url):
    #設置headers是貓眼加了反爬機制
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
    }
    try:
        response = requests.get(url,headers=headers)
        if response.status_code == 200:
            return response.text
        return None  #如果頁面狀態碼不為200,則函數終止
    except RequestException:
        return None  #如果測試代碼異常,則無返回,函數結束

def parse_page_html(html):
    pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'
                         +'.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'
                          +'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S)
    items = re.findall(pattern,html)
    for item in items:
        yield {
            'index':item[0],
            'image':item[1],
            'name':item[2],
            'actor':item[3].strip()[3:],
            'date':item[4].strip()[5:],
            'score':item[5]+item[6]

        }

def save_file(content):
    with open("detail.txt",'a',encoding='utf-8') as f:
        f.write(json.dumps(content,ensure_ascii=False)+'\n')
        f.close()



def main(offset):
    url = "http://maoyan.com/board/4?offset="  + str(offset)
    html = get_page_html(url)
    for detail in parse_page_html(html):
        save_file(detail)


if __name__ == '__main__':
    # for offset in range(10):
    #     main(offset*10)
    pool = Pool()
    pool.map(main,[i*10 for i in range(10)])

 

運行結果不添加了,此外,最後註釋掉的代碼,功能是非多線程的 

 

 

學習總結:


 

   爬蟲涉及的Python基礎應用非常多,還是那個8/2原則,先掌握20%最常用的,最重要的,再慢慢熟悉80%需要學會用即可的功能


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 使用方法 synchronized 是 java 中最常用的保證線程安全的方式,synchronized 的作用主要有三方面: 語義上來講,synchronized主要有三種用法: 2. 實現原理 2.1. 監視器鎖 synchronized 同步代碼塊的語義底層是基於對象內部的監視器鎖(mo ...
  • 安裝qrcode庫和PIL庫 ========== 在命令行中分別輸入pip install qrcode 和pip install pillow 導入庫格式如下: 下麵以生成一個帶圖標的二維碼為例 運行效果如下 上面這個例子是我之前看別人的,但是卻運行不了,之後自己修改過後的程式,如有侵犯立刻刪除 ...
  • 學習目的: 解決AJAX請求的爬蟲,網頁解析庫的學習,MongoDB的簡單應用 正式步驟 Step1:流程分析 Step2:實例分析 1. 打開今日頭條搜索頁,搜索“中超”,查看頁面的請求方法為:GET 2. 創建一個Python文件:spider_ajax.py 3.網站url信息獲取 4. 列印 ...
  • Java基礎 首先,來看一下Java基礎知識圖解,以下便是在java學習中我們需要學習設計到的一些知識(當然不是很完全)。 這些都是接下來在以後的學習中我們會學到的一些知識。 1 關鍵字 首次先來學習一下Java中的關鍵字,關鍵字的定義是:被java語言賦予了特殊含義,用作專門用途的一些單詞,其特點 ...
  • 最近在學Python,嘗試著用for和while迴圈做一個簡單的學生管理系統,現在遇到的問題是沒法限定輸入的數據類型和從for迴圈中跳出 第一個限定是:如果沒有沒有輸入整數,程式直接報錯,在其中使用了轉換,代碼18行 第二個跳出for迴圈:目的是要對錄入的信息進行一個初步的判斷,確保關鍵信息不重覆 ...
  • go語言聖經-複合數據類型 1.以不同的方式組合基本類型可以構造出來的複合數據類型 2.四種類型——數組、slice、map和結構體 3.數組是由同構的元素組成——每個數組元素都是完全相同的類型——結構體則是由異構的元素組成的 4.slice和map則是動態的數據結構,它們將根據需要動態增長 go語 ...
  • 上一篇我們成功以把Opotaplanner規劃引擎下載回來,並把它的示例運行起來,簡單解析了一下它的Cloud balance示例。這一篇我們這些示例的源代碼導入到Eclipse中,看看它在後臺是怎麼運行的。 一、推薦使用Maven 在上一篇,我們已經從Optaplanner的官網下載了它的壓縮包, ...
  • https://promotion.aliyun.com/ntms/act/group/team.html?group=lWCcBOsP3g ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...