Crawler practical small case Python programming information
一、项目简介
本项目是一个爬虫实战小案例,旨在介绍如何使用Python的第三方库BeautifulSoup和requests来爬取指定页面的数据。本案例以爬取猫眼电影Top100为例,来展示爬虫实现的流程和细节。通过学习本案例,可以帮助读者入门Python爬虫,了解如何解析HTML页面和提取需要的数据。
二、实现步骤
1. 获取页面信息
使用requests库发送get请求获取指定页面的HTML文档。
import requests url = 'https://maoyan.com/top100' header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'} response = requests.get(url, headers=header) if response.status_code == 200: print('页面获取成功') html = response.text else: print('页面获取失败')
2. 解析HTML文档
使用BeautifulSoup库解析HTML文档,获取需要的数据。通过观察页面HTML源代码,可以发现当前top100页面的电影信息都在div标签class属性为”movie-item-info”的标签中。所以我们只需要解析该标签,即可获取每个电影的信息。
import requests from bs4 import BeautifulSoup url = 'https://maoyan.com/top100' header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'} response = requests.get(url, headers=header) if response.status_code == 200: print('页面获取成功') html = response.text else: print('页面获取失败') soup = BeautifulSoup(html, 'html.parser') movie_list = soup.find_all('div', class_='movie-item-info')
3. 提取需要的数据
对于每个电影的信息,我们需要获取其排名、电影名称、主演、上映时间和评分。通过分析每个div标签下包含哪些信息,我们可以编写如下代码来提取需要的数据。
import requests from bs4 import BeautifulSoup url = 'https://maoyan.com/top100' header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'} response = requests.get(url, headers=header) if response.status_code == 200: print('页面获取成功') html = response.text else: print('页面获取失败') soup = BeautifulSoup(html, 'html.parser') movie_list = soup.find_all('div', class_='movie-item-info') for movie in movie_list: # 获取电影排名 rank = movie.find('div', class_="movie-item-number").text.strip() # 获取电影名称 name = movie.find('a', class_="movie-name").text.strip() # 获取电影主演和上映时间 actor_and_time = movie.find('p', class_="star").text.strip() # 分离主演和上映时间 actor = actor_and_time.split('主演:')[1].split('\n')[0] time = actor_and_time.split('上映时间:')[1] # 获取评分 score = movie.find('p', class_="score").text.strip() # 打印结果 print(rank, name, actor, time, score)
三、代码分析
通过学习本案例,我们可以详细了解Python爬虫的工作流程和实现细节。首先我们需要发送HTTP请求获取指定页面的HTML文档,然后使用BeautifulSoup库解析HTML文档,最后提取需要的数据。
值得注意的是,为了避免网站的反爬虫机制导致请求失败,我们要在请求头中添加User-Agent等信息。同时,为了提高效率,可以使用多线程/协程等方式进行优化。在实际使用中,我们还需要注意遵守爬虫的相关法律法规,不做违规操作。
总之,通过学习本案例,读者可以掌握Python爬虫的基础知识和实践技能,为未来更复杂的项目做好准备。