专业编程基础技术教程

网站首页 > 基础教程 正文

10分钟学会用Python抓取电影排行榜

ccvgpt 2024-11-25 10:18:04 基础教程 1 ℃

本文介绍用Python抓取豆瓣电影TOP250的所有电影的名称,网页地址为: https://movie.douban.com/top250 。在此爬虫中,将请求头定制为实际浏览器的请求头。

为有利提供学习资料,请告知您的Python程度:

10分钟学会用Python抓取电影排行榜

抓数据源分析

打开豆瓣电影TOP250的网站,使用“检查”功能查看该网页的请求头,如图3-4所示。

按照3.3.2中的方法提取其中重要的请求头:


headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',
'Host': 'movie.douban.com'
}

第一页只有25个电影,如果要获取所有的250页电影,就需要获取总共10页的内容。

通过单击第二页可以发现网页地址变成了:

https://movie.douban.com/top250?start=25

第三页的地址为: https://movie.douban.com/top250?start=50 ,这就很容易理解了,每多一页,就给网页地址的start参数加上25。

项目实践

通过以上分析发现,可以使用requests获取电影网页的代码,并利用for循环翻页。其代码如下:


import requests

def get_movies():
 headers = {
 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',
 'Host': 'movie.douban.com'
 }
 for i in range(0,10):
 link = 'https://movie.douban.com/top250?start=' + str(i * 25)
 r = requests.get(link, headers=headers, timeout= 10)
 print (str(i+1),"页响应状态码:", r.status_code)
 print (r.text)
 
get_movies()

运行上述代码,得到的结果是:

1页响应状态码:200

<!DOCTYPE html>

<html lang="zh-cmn-Hans"class="ua-windows ua-webkit">

<head>

<meta http-equiv="Content-Type"content="text/html;charset=UTF-8">

<meta name="renderer"content="webkit">

<meta name="referrer"content="always">

<title>

豆瓣电影TOP250

...

这时,得到的结果只是网页的HTML代码,我们需要从中提取需要的电影名称。接下来会涉及第5章解析网页的内容,读者可以先使用下面的代码,至于对代码的理解,可以等到第5章再学习。


import requests
from bs4 import BeautifulSoup

def get_movies():
 headers = {
 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',
 'Host': 'movie.douban.com'
 }
 movie_list = []
 for i in range(0,10):
 link = 'https://movie.douban.com/top250?start=' + str(i*25)
 r = requests.get(link, headers=headers, timeout= 10)
 print (str(i+1),"页响应状态码:", r.status_code)
 
 soup = BeautifulSoup(r.text, "lxml")
 div_list = soup.find_all('div', class_='hd')
 for each in div_list:
 movie = each.a.span.text.strip()
 movie_list.append(movie)
 return movie_list
 
movies = get_movies()
print (movies)

在上述代码中,使用BeautifulSoup对网页进行解析并获取其中的电影名称数据。运行代码,得到的结果是:

['肖申克的救赎','这个杀手不太冷','霸王别姬','阿甘正传','美丽人生','千与千寻','辛德勒的名单','泰坦尼克号','盗梦空间','机器人总动员','海上钢琴师','三傻大闹宝莱坞','忠犬八公的故事','放牛班的春天','大话西游之大圣娶亲','教父','龙猫','楚门的世界','乱世佳人','天堂电影院','当幸福来敲门','触不可及','搏击俱乐部','十二怒汉','无间道','熔炉','指环王3:王者无敌','怦然心动','天空之城','罗马假日',...]

课后作业

读者若有时间,可以实践进阶问题:获取TOP 250电影的英文名、港台名、导演、主演、上映年份、电影分类以及评分。

还想获取更多的爬虫知识吗?点击这里:

最近发表
标签列表