Python入手(一)

xiasuhuei321發表於2017-12-13

去年就說要看一看 python(其實去年還說要看C++/JavaScript),看了一點兒語法之後一直沒再碰過了。最近寫 Android 寫的頭昏腦漲,決定看點 python 換下腦子。由於暫時打算用python玩一下,所以就不深入追究語言細節,只做一些有趣的事情。本文將簡單的提及以下內容:

  • requests
  • BeautifulSoup
  • python io

用 Python 做什麼

這裡打算通過分析 豆瓣電影TOP250網頁來提取一些電影資訊,通過幹這件事來對 python 的 io 、http 請求方式做一些簡單的瞭解。分析網頁這裡選擇使用 Beautiful Soup 來做標籤解析,請求庫選用 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 中的執行緒與執行緒安全還不是非常瞭解,等下一次再玩玩。

相關文章