您现在的位置是:主页 > news > vs怎么添加做网站/网站主题

vs怎么添加做网站/网站主题

admin2025/5/15 1:58:12news

简介vs怎么添加做网站,网站主题,五金 东莞网站建设,移动网络建设26. 实战练习:提取电影详细信息(崔庆才2.5) 文章目录26. 实战练习:提取电影详细信息(崔庆才2.5)1. 准备工作2. 目标任务3. 源代码4. 爬取结果5. 温馨提示1. 准备工作 在电脑D盘新建一个【26】文件夹。 用V…

vs怎么添加做网站,网站主题,五金 东莞网站建设,移动网络建设26. 实战练习:提取电影详细信息(崔庆才2.5) 文章目录26. 实战练习:提取电影详细信息(崔庆才2.5)1. 准备工作2. 目标任务3. 源代码4. 爬取结果5. 温馨提示1. 准备工作 在电脑D盘新建一个【26】文件夹。 用V…

26. 实战练习:提取电影详细信息(崔庆才2.5)

文章目录

  • 26. 实战练习:提取电影详细信息(崔庆才2.5)
    • 1. 准备工作
    • 2. 目标任务
    • 3. 源代码
    • 4. 爬取结果
    • 5. 温馨提示

1. 准备工作

  1. 在电脑D盘新建一个【26】文件夹。

  2. 用VScode编辑器打开【26】文件夹。

  3. 在【26】文件夹中新建一个26.py文件。

  4. 26.py文件中编写代码。

2. 目标任务

【要访问的网址】

BASE_URL = 'https://ssr1.scrape.center'

base [beɪs]:基础,根。

BASE_URL:根网址。

【网址首页】

在这里插入图片描述

【目标任务】

提取每部电影的名称、上映时间、评分、剧情简介等内容,用JSON文本进行存储。

3. 源代码

import json
from os import makedirs
from os.path import exists
import requests
import logging
import re
from urllib.parse import urljoin
import multiprocessinglogging.basicConfig(filename="26日志.log", level=logging.INFO,format='%(asctime)s - %(levelname)s: %(message)s')BASE_URL = 'https://ssr1.scrape.center'
TOTAL_PAGE = 10RESULTS_DIR = 'json数据'
exists(RESULTS_DIR) or makedirs(RESULTS_DIR)def scrape_page(url):"""scrape page by url and return its html:param url: page url:return: html of page"""logging.info('scraping %s...', url)try:response = requests.get(url)if response.status_code == 200:return response.textlogging.error('get invalid status code %s while scraping %s',response.status_code, url)except requests.RequestException:logging.error('error occurred while scraping %s', url, exc_info=True)def scrape_index(page):"""scrape index page and return its html:param page: page of index page:return: html of index page"""index_url = f'{BASE_URL}/page/{page}'return scrape_page(index_url)def parse_index(html):"""parse index page and return detail url:param html: html of index page"""pattern = re.compile('<a.*?href="(.*?)".*?class="name">')items = re.findall(pattern, html)if not items:return []for item in items:detail_url = urljoin(BASE_URL, item)logging.info('get detail url %s', detail_url)yield detail_urldef scrape_detail(url):"""scrape detail page and return its html:param page: page of detail page:return: html of detail page"""return scrape_page(url)def parse_detail(html):"""parse detail page:param html: html of detail page:return: data"""cover_pattern = re.compile('class="item.*?<img.*?src="(.*?)".*?class="cover">', re.S)name_pattern = re.compile('<h2.*?>(.*?)</h2>')categories_pattern = re.compile('<button.*?category.*?<span>(.*?)</span>.*?</button>', re.S)published_at_pattern = re.compile('(\d{4}-\d{2}-\d{2})\s?上映')drama_pattern = re.compile('<div.*?drama.*?>.*?<p.*?>(.*?)</p>', re.S)score_pattern = re.compile('<p.*?score.*?>(.*?)</p>', re.S)cover = re.search(cover_pattern, html).group(1).strip() if re.search(cover_pattern, html) else Nonename = re.search(name_pattern, html).group(1).strip() if re.search(name_pattern, html) else Nonecategories = re.findall(categories_pattern, html) if re.findall(categories_pattern, html) else []published_at = re.search(published_at_pattern, html).group(1) if re.search(published_at_pattern, html) else Nonedrama = re.search(drama_pattern, html).group(1).strip() if re.search(drama_pattern, html) else Nonescore = float(re.search(score_pattern, html).group(1).strip()) if re.search(score_pattern, html) else Nonereturn {'cover': cover,'name': name,'categories': categories,'published_at': published_at,'drama': drama,'score': score}def save_data(data):"""save to json file:param data::return:"""name = data.get('name')data_path = f'{RESULTS_DIR}/{name}.json'json.dump(data, open(data_path, 'w', encoding='utf-8'),ensure_ascii=False, indent=2)def main(page):"""main process:return:"""index_html = scrape_index(page)detail_urls = parse_index(index_html)for detail_url in detail_urls:detail_html = scrape_detail(detail_url)data = parse_detail(detail_html)logging.info('get detail data %s', data)logging.info('saving data to json file')save_data(data)logging.info('data saved successfully')if __name__ == '__main__':pool = multiprocessing.Pool()pages = range(1, TOTAL_PAGE + 1)pool.map(main, pages)pool.close()print("程序结束!")

4. 爬取结果

【输出一个日志文件】

在这里插入图片描述

【输出一个JSON文件】

在这里插入图片描述

【JSON具体内容】

在这里插入图片描述

5. 温馨提示

案例来源于书籍《Python3 网络爬虫开发实战》,作者崔庆才。

有基础的小伙伴可参考下文。

[参考文档:崔庆才的个人站点-python爬虫教程]https://cuiqingcai.com/202224.html

没基础的小伙伴,等待我的更新,我会对文中的每行代码的语法及作用进行解析。