去年就說要看一看 python(其實去年還說要看C++/JavaScript),看了一點兒語法之後一直沒再碰過了。最近寫 Android 寫的頭昏腦漲,決定看點 python 換下腦子。由於暫時打算用python玩一下,所以就不深入追究語言細節,只做一些有趣的事情。本文將簡單的提及以下內容:
- requests
- BeautifulSoup
- python io
用 Python 做什麼
這裡打算通過分析 豆瓣電影TOP250網頁來提取一些電影資訊,通過幹這件事來對 python 的 io 、http 請求方式做一些簡單的瞭解。分析網頁這裡選擇使用 Beautiful Soup 來做標籤解析,請求庫選用 requests。
準備工作
- 閱讀 requests 文件
這裡的目標是拿到網頁,也就是html,然後分析提取內容,這裡的目標網頁沒有什麼特殊的驗證機制,所以只需要通過 http 協議中的 get 請求方式獲取網頁響應就可以了。
r = requests.get('https://github.com/timeline.json')
複製程式碼
這裡就要好好的看看了,因為提取資訊需要用到這個庫。這裡我做了一些簡單的瞭解,這個庫遍歷了 html 生成了一個 python 物件,後續的解析就通過這個物件來完成。由於不瞭解這個庫的實現方式,所以還是有些擔憂效率的,因為 html 這種巢狀層級可能非常多的東西,生成的類查詢效率可能堪憂。不過現在也不想去考慮這些問題,暫時先用著~
- 分析網頁
分析主要就是分析一下一些自己感興趣資訊的標籤和屬性,以此為鍵提取出相應的值。分析網頁自帶的開發者工具真的是十分的好用,因為這裡的網頁比較簡單,在點選切換介面的時候發現網頁連結 url 變化如下: https://movie.douban.com/top250 -> https://movie.douban.com/top250?start=25
nice,很簡單,想拿到全部250部電影資訊只需要改變url的start引數值就可以了。這裡是簡單的通過 get 請求傳參,如果是 post 或者一些其他的方式傳引數,就需要我們通過抓包工具去抓包分析資料包。
編寫程式碼
程式碼其實非常簡單,如果按照我前面說的步驟來,基本不需要我做什麼過多累贅的解釋(所以這裡我就不做過多的解釋了):
# -*- coding: UTF-8 -*-
from bs4 import BeautifulSoup
import requests
count = 0
FILE_PATH = '豆瓣電影TOP250.txt'
def getMovieList():
global count
resp = requests.get('https://movie.douban.com/top250?start=' + str(count))
bs = BeautifulSoup(resp.text, 'html.parser')
for item in bs.find_all('div', {'class': 'item'}):
title = item.find('span', {'class': 'title'}).get_text()
rating_num = item.find('span', {'class': 'rating_num'}).get_text()
img = item.find('img')['src']
tag = item.find('span', {'class': 'inq'})
if tag is not None:
desc = tag.get_text()
print('標題:', title, ' 評分:', rating_num, ' 描述:', desc, ' image_url:', img)
# img = item.find('div', {'class': 'pic'}).find("a").get_text()
# print(title, img)
f.writelines('標題:' + title + ' 評分:' + rating_num + ' 描述:' + desc + ' image_url:' + img+"\n\n")
count += 25
if count >= 255:
print('獲取完畢')
else:
getMovieList()
f = open(FILE_PATH, 'w+', encoding='utf-8')
getMovieList()
f.close()
複製程式碼
輸出結果:
這裡其實可以開多執行緒去訪問,但是我對於 python 中的執行緒與執行緒安全還不是非常瞭解,等下一次再玩玩。