需要的库
request库 响应http请求json库 将文本保存成json形式pyquery 类似JQuery,主要用于解析网页源代码 import requests import json from pyquery import PyQuery as pq # 从pyquery导入PyQuery并重命名为pq # import time # 获取页面源代码 def GetOnePage(n): # 爬取目标的URL url = f'https://maoyan.com/board/4?offset={n*10}' # 反爬虫机制 添加表头信息 header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/56.0.2924.90 Safari/537.36 2345Explorer/9.7.0.18838'} r = requests.get(url, headers=header) return r.text # 使用pyquery解析源代码 def parse(new_url): # 获取new_url的网页源代码 r = requests.get(new_url) # 将网页源代码解析为文本格式 html = r.text # 使用pyquery对文本进行解析 t = pq(html) # 定位 names = t('body > div.banner > div > div.celeInfo-right.clearfix > div.movie-brief-container > h3').text() film_type = t('body > div.banner > div > div.celeInfo-right.clearfix > div.movie-brief-container > ul > li:nth-child(1)').text() releasetimes = t('body > div.banner > div > div.celeInfo-right.clearfix > div.movie-brief-container > ul > li:nth-child(3)').text()[-4:-2] # print(names, film_type, releasetimes) # time.sleep(1) return releasetimes # 把获取的信息写入到本地 # movie.json # tyoe.json # year.json # nature.json def saveFile(data): with open('nature.json', 'a', encoding='utf-8') as f: # 把字典 列表 转化成字符串 \n 换行 data = json.dumps(data, ensure_ascii=False) + ',\n' f.write(data) # 主函数 def run(): for n in range(0, 10): # 获取每一页的电影 html_text = GetOnePage(n) doc = pq(html_text) for n in range(1,11): # (pyquery解析的是字符串) link = doc("#app > div > div > div.main > dl > dd:nth-child(" + str(n) + ") > div > div > div.movie-item-info > p.name > a").attr("href") # 进行字符串拼接 really_link = 'https://maoyan.com' + str(link) # 使用pyquery解析源代码 items = parse(really_link) saveFile(items) # print(items) # 运行程序入口 if __name__ == "__main__": run()下面是部分保存到本地的数据信息 _movie.json
jieba库介绍 jieba库,优良的中文分词工具
# jieba中文分词函数库 import jieba # type.json 类型---》词云图 # year.json 年份---》柱状图 # nature.json 国家---》饼状图 # 打开文件year.json 只读 json = open("猫眼/year.json", "r", encoding="utf-8").read() # jieba.lcut精确模式,饭后json文件中分词后的列表变量 words = jieba.lcut(json) # 定义一个字典 counts = {} # 遍历words列表的分词 并计数 for word in words: if len(word) == 1: continue else: counts[word] = counts.get(word, 0) + 1 # items()返回可遍历的元组数组 items = list(counts.items()) # sort()排序函数 # lambda匿名函数 items.sort(key=lambda x:x[1], reverse=True) for i in range(15): word, count = items[i] # format函数字符串格式化 print("{0:<10}{1:<5}".format(word, count))结果展示:
展示效果: maoyan_type.jpg maoyan_nature.jpg maoyan_year.jpg