Python開發學習筆記 抓取貓眼電影排行

2021-09-19 13:24:12 字數 2697 閱讀 4839

# python開發學習筆記:爬取貓眼電影排行

# 匯入包:匯入包如果沒有使用顏色會保持為灰色

import json

import requests

# re模組:提供了對正規表示式的支援

import re

# 實現獲取貓眼電影排行第一頁的函式

def get_one_page(url):

# 設定請求頭中的ua(user-agent):特殊的字串頭,可以是伺服器識別客戶端使用的

# 作業系統及版本、瀏覽器集版本資訊,做爬蟲時加上此資訊可以偽裝成瀏覽器

headers =

# 使用requests的get發起請求並獲得響應結果

response = requests.get(url,headers=headers)

# 判斷響應結果的狀態碼;200代表成功

if response.status_code == 200:

return response.text

return none

# 定義html頁面內容解析函式

def parse_one_page(html):

# print("列印html內容")

# print(html)

print("開始解析文字內容")

# re.compile(pattern[,flags]):根據包含正規表示式的字串建立模式物件,以提高匹配效率

# .*:匹配任意字元;?:匹配0個或1個前面的正規表示式定義的片段,非貪婪模式

# ():匹配括號內的表示式,也表示乙個組

# 根據原始碼分析正規表示式:

# (1)匹配電影排行:.*?board-index.*?>(.*?)

# (2)匹配電影:.*?data-src="(.*?)"

# (3)匹配電影名稱:.*?name.*?a.*?>(.*?)

# (4)匹配主演人員:.*?star.*?>(.*?)

# (6)匹配電影評分:.*?integer.*?>(.*?).*?fraction.*?>(.*?).*?

pattern = re.compile('.*?board-index.*?>(.*?).*?data-src="(.*?)".*?name.*?a.*?>(.*?)'

'.*?star.*?>(.*?)

' '.*?releasetime.*?>(.*?)

.*?integer.*?>(.*?).*?fraction.*?>(.*?).*?', re.s)

# 獲取匹配結果

# re.findall(pattern,string):返回乙個列表,其中包含字串中所有與模式匹配的子串

items = re.findall(pattern, html)

# 遍歷結果並生成字典

# str.strip():刪除字串開頭和末尾的空白(不包括中間的空白)並返回結果

# item[3].strip()[3:]:利用切片擷取字串;[3:]代表從item[3]的第四位開始擷取一直到末尾

# yield:生成器,包含yield的語句都是生成器

for item in items:

yield

# 定義文字寫入函式

# open(檔名,開啟模式,編碼):

# 開啟模式:

# (1).'x':獨佔寫入模式

# (2).'a':附加模式

# (3).'b':二進位制模式(與其它模式結合使用)

# (4).'t':文字模式(預設值,與其它模式結合使用)

# (5).'+':讀寫模式(與其它模式結合使用)

# (6).'r':讀取模式(預設值)

# (7).'w':寫入模式

# with語句:開啟檔案並將其賦值給乙個變數(如 f ),在語句體中將資料寫入檔案,到達語句末尾時將自動關閉檔案

# 即便出現異常也是如此

# json.dumps:用於將 python 物件編碼成 json 字串

# json.loads 用於解碼 json 資料。該函式返回 python 欄位的資料型別。

def write_in_txt(content):

with open('result.txt', 'a', encoding='utf-8') as f:

print(type(json.dumps(content)))

f.write(json.dumps(content, ensure_ascii=false)+'\n')

# 定義主函式

def main(offset):

url = ""+str(offset)

html = get_one_page(url)

# 函式parse_one_page使用了生成器,生成器會返回多個結果

results = parse_one_page(html)

for result in results:

write_in_txt(result)

# 執行主函式

# __name__ == '__main__':用於判斷當前檔案是自己直接執行還是被其他檔案當做模組呼叫執行:

# 如果是直接執行則為true,否則為false

if __name__ == '__main__':

for i in range(10):

main(offset=i*10)

爬蟲基礎 Python 抓取網頁(學習筆記)

import urllib.request url headers 瀏覽器偽裝 request urllib.request.request url,headers headers 發出請求 開啟和讀取url請求並且爬取網頁內容 try response urllib.request.urlopen...

Python開發簡單爬蟲 學習筆記

1.爬蟲簡介 爬蟲是能夠自動抓取網際網路資訊的程式 2.簡單爬蟲架構 3.url管理器 url管理器 管理待抓取url集合和已抓取url集合 防止重複抓取 防止迴圈抓取 urllib2 python官方基礎模組 requests 第三方包更強大,後期推薦使用 import urllib2 直接請求 ...

Python學習筆記 簡單GUI開發

使用tkinter進行開發 簡單文字視窗實現 1 yum y install tkinter 最簡單的tkinter視窗 1 2 3 4 5 from tkinter import 將tkinter模組中 的符號都 匯入進來 root tk 為了 初始化tkinter,首先 建立乙個tk的根部 件 ...