python爬取貓眼電影前100,生成本地txt文件

import requests
from bs4 import BeautifulSoup
#json  數據格式 字典

"""
data = {"name":"ming"}
字典
data = {'name':'ming'}
"""
#在網頁中爬取的數據保存到python對象中爲字典,但是文件寫入不了對象所以我們要轉成json字符串寫入
import json

"""
思路:
1、使用網絡請求包去請求網站,利用這個包去獲取網站上的前端源代碼[html,json,xml]
2、在前端源代碼中篩選出我們想要的數據
3、把篩選出來的數據存放文件中
"""
"""
爬蟲原理:
模擬瀏覽器想服務器發送http請求【get post option...】,網站接收到請求後,返回數據
"""
#瀏覽器請求頭設置
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}
#去獲取請求頁面
def getPage(url):
    #異常處理  他能捕獲異常【錯誤】
    try:
        #get()是一種http請求,拿到數據
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            return response.text
        else:
            return None
    except:
        return None

#獲取電影信息
def getInfo(html):
    #使用BeautifulSoup匹配電影的排行 電影名 主演 評分 上映時間,html解析庫
    soup = BeautifulSoup(html, 'lxml')
    items = soup.select('dd')
    #從dd標籤中提取排行 電影名 主演 評分 上映時間
    for item in items:
        index = item.find(name='i', class_='board-index').get_text()
        name = item.find(name='p', class_='name').get_text()
        start = item.find(name='p', class_='star').get_text().strip()[3:]
        time = item.find(name='p', class_='releasetime').get_text()[5:]
        score = item.find(name='p', class_='score').get_text()
        #return 吃內存 如果你返回的數據有一百萬部電影 他會全部存入到內存當中
        #return index, name, start, time, score

        #生成器 一部一部的返回 保持內存中只有一部電影的信息 惰性加載
        yield {
            '排行': index,
            '電影名稱': name,
            '主演': start,
            '上映時間': time,
            '評分': score
        }

def writeData(field):
    #文件處理
    with open('maoyan_info.txt', 'a', encoding='utf-8') as f:
        f.write(json.dumps(field, ensure_ascii=False) + '\n')

#程序入口
if __name__ == "__main__":
    for num in [i*10 for i in range(10)]:
        url = 'https://maoyan.com/board/4?offset=' + str(num)
        html = getPage(url)

        for item in getInfo(html):
            print(item)
            writeData(item)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章