Python实战:从Scrape Center SSR1页面批量抓取电影数据

Python实战:从Scrape Center SSR1页面批量抓取电影数据 1. 准备工作与环境搭建在开始抓取Scrape Center SSR1页面的电影数据之前我们需要先准备好Python开发环境。我推荐使用Python 3.7或更高版本因为这个项目会用到一些较新的库特性。如果你是Python新手建议直接安装Anaconda它包含了我们需要的绝大多数科学计算和数据处理的库。安装必要的库非常简单打开命令行工具Windows用户用CMD或PowerShellMac/Linux用户用终端依次执行以下命令pip install requests pip install xlwings pip install fake-useragent这里解释下这几个库的作用requests这是Python中最流行的HTTP请求库我们将用它来获取网页源代码xlwings用于将抓取到的数据写入Excel文件fake-useragent可以随机生成浏览器User-Agent帮助我们更好地伪装成普通浏览器访问我建议使用PyCharm或VS Code作为开发环境它们对Python的支持都非常好。特别是PyCharm的专业版对网络爬虫开发有很多贴心的功能提示。2. 分析目标网站结构首先我们需要了解Scrape Center SSR1页面的结构。打开浏览器访问https://ssr1.scrape.center/page/1这是一个模拟的电影列表网站。通过右键检查或按F12打开开发者工具我们可以查看网页的HTML结构。这个网站有几个特点需要注意分页URL很有规律每页的URL只是最后的数字不同每部电影的信息都包含在一个class为el-col-md-4的div中电影数据包括图片URL、名称、类别、国家、时长、上映时间和评分我建议先用浏览器手动访问几页观察URL变化规律和页面加载方式。这个网站没有复杂的反爬机制但为了养成良好的爬虫习惯我们还是要设置合理的请求间隔。3. 实现网页请求功能让我们从最基础的网页请求开始。创建一个新的Python文件比如命名为scrape_ssr1.py然后编写获取网页内容的函数import requests from requests.exceptions import RequestException from fake_useragent import UserAgent import time def get_html(url): try: # 使用fake-useragent随机生成浏览器头 ua UserAgent() headers {User-Agent: ua.random} # 设置超时时间为30秒 response requests.get(url, headersheaders, timeout30) response.encoding response.apparent_encoding # 自动检测编码 if response.status_code 200: return response.text return None except RequestException as e: print(f请求出错: {e}) return None这个函数有几个关键点使用随机User-Agent模拟不同浏览器访问设置了合理的超时时间自动检测网页编码避免乱码添加了异常处理防止程序因网络问题崩溃我建议在每次请求后添加一个短暂的延时这样既礼貌又不容易被屏蔽time.sleep(1) # 每次请求间隔1秒4. 解析网页内容获取到网页HTML后我们需要从中提取出电影信息。这里我选择使用正则表达式虽然有些人可能更喜欢BeautifulSoup但对于这种结构规整的页面正则表达式效率更高。先定义一个解析函数import re def parse_movies(html): pattern re.compile( rdiv.*?el-col-md-4.*? rsrc(.*?).*? # 图片URL rh2.*?(.*?)/h2.*? # 电影名称 rbutton.*?span(.*?)/span.*? # 类别1 rbutton.*?span(.*?)/span.*? # 类别2 rbutton.*?span(.*?)/span.*? # 类别3 rinfo.*?span.*?(.*?)/span.*? # 国家 rspan.*?(.*?)/span.*? # 时长 rspan.*?(.*?)/span.*? # 上映时间 rscore.*?(.*?)/p, # 评分 re.S ) items re.findall(pattern, html) movies [] for item in items: movie { image: item[0], name: item[1].strip(), categories: list(set([item[2], item[3], item[4]])), # 去重 country: item[5], duration: item[6], release_date: item[7], score: item[8].strip() } movies.append(movie) return movies这个正则表达式看起来复杂但其实每一部分都对应着网页中的一个数据字段。我使用了re.S标志让.可以匹配换行符因为HTML经常跨越多行。5. 处理分页逻辑Scrape Center SSR1的页面有10页我们需要处理分页。观察URL可以发现规律https://ssr1.scrape.center/page/1 https://ssr1.scrape.center/page/2 ... https://ssr1.scrape.center/page/10我们可以写一个循环来处理所有页面def scrape_all_pages(): base_url https://ssr1.scrape.center/page/ all_movies [] for page in range(1, 11): # 抓取1-10页 url base_url str(page) print(f正在抓取第{page}页: {url}) html get_html(url) if html: movies parse_movies(html) all_movies.extend(movies) print(f第{page}页抓取完成共{len(movies)}部电影) time.sleep(1) # 礼貌性延时 return all_movies这个函数会依次抓取每一页将结果合并到一个列表中返回。我添加了打印语句方便跟踪进度这在调试时很有帮助。6. 数据存储到Excel最后一步是将抓取到的数据保存到Excel文件。我们使用xlwings库来实现import xlwings as xw def save_to_excel(movies, filenamemovies.xlsx): # 准备表头 headers [图片URL, 电影名称, 类别, 国家, 时长, 上映时间, 评分] # 准备数据行 data [] for movie in movies: row [ movie[image], movie[name], 、.join(movie[categories]), movie[country], movie[duration], movie[release_date], movie[score] ] data.append(row) # 创建Excel工作簿 with xw.App(visibleFalse) as app: wb xw.Book() sht wb.sheets[0] # 写入表头 sht.range(A1).value headers # 写入数据 if data: sht.range(A2).value data # 自动调整列宽 sht.autofit() # 保存文件 wb.save(filename) print(f数据已保存到 {filename})这里有几个优化点使用上下文管理器(with)确保Excel进程正确关闭设置visibleFalse避免弹出Excel窗口自动调整列宽使表格更美观使用列表推导式提高代码可读性7. 完整代码与执行现在我们把所有部分组合起来if __name__ __main__: print(开始抓取Scrape Center SSR1电影数据...) start_time time.time() movies scrape_all_pages() print(f共抓取到{len(movies)}部电影信息) save_to_excel(movies) end_time time.time() print(f任务完成耗时{end_time - start_time:.2f}秒)执行这个脚本你会看到控制台输出抓取进度最终在当前目录生成一个movies.xlsx文件包含所有电影数据。8. 常见问题与优化建议在实际运行中可能会遇到一些问题这里分享几个我遇到的坑和解决方案请求被拒绝如果遇到403错误可以尝试更换User-Agent增加请求间隔时间使用代理IP注意合规性数据解析错误如果发现某些字段解析不对可能是网页结构变化了需要更新正则表达式某些字段可能为空需要添加异常处理性能优化可以使用多线程加速抓取但要注意控制并发数考虑使用缓存避免重复抓取相同页面对于大规模抓取建议使用Scrapy框架数据清洗添加数据验证确保字段格式正确处理可能的空值或异常值对文本数据进行标准化处理如去除多余空格这个项目虽然不大但涵盖了网络爬虫的主要环节请求、解析、存储。掌握了这些基础后你可以尝试更复杂的爬虫项目比如处理JavaScript渲染的页面或者需要登录的网站。