🎈 博主:一只程序猿子
🎈 博客主页:一只程序猿子 博客主页
🎈 个人介绍:爱好(bushi)编程!
🎈 创作不易:喜欢的话麻烦您点个👍和⭐!
🎈 欢迎访问我的主页(点我直达)
🎈 除此之外您还可以通过个人名片联系我
目录
1.介绍
2.网页分析
(1)获取电影列表
(2)获取电影信息
3.源码
4.效果展示
5.结语
1.介绍
本文将详细介绍如何编写Python爬虫爬取豆瓣电影排行榜Top250榜单电影信息!
首先,感谢各位童鞋们的点赞、关注、收藏!!!
其次,如果在编写代码的过程中,如果有任何疑问,可以在评论区留言、私信或名片联系我!!!
2.网页分析
(1)获取电影列表
这里我们需要获取电影的名称和对应的URL地址:
每一个li标签下都存放着一个电影,可见一页共有25个电影,一共有10个页面。我们需要把10个页面的电影名称和电影URL获取出来。
每一页的url变化:
可以看到只需要修改参数start=?即可实现换页!
(2)获取电影信息
第一步我们获取到了电影名称和电影URL,通过电影URL可以进入到电影的详情页面:
红色框标记出了我们需要获取的信息,我们将在代码中使用BeautifulSoup来匹配出对应的内容!当然,你也可以选择使用xpath或者正则表达式匹配数据!
3.源码
import random
import timeimport requestsfrom bs4 import BeautifulSoupclass DouBan_top250(object):def __init__(self):self.cookies = {'''换成你自己的cookies'''}self.headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*''/*;q=0.8,application/signed-exchange;v=b3;q=0.7','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6','Cache-Control': 'max-age=0','Connection': 'keep-alive','Sec-Fetch-Dest': 'document','Sec-Fetch-Mode': 'navigate','Sec-Fetch-Site': 'none','Sec-Fetch-User': '?1','Upgrade-Insecure-Requests': '1','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'' Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0','sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"','sec-ch-ua-mobile': '?0','sec-ch-ua-platform': '"Windows"',}def get_movie_list(self, start):params = {'start': str(start),'filter': '',}html_content = requests.get('https://movie.douban.com/top250', params=params, cookies=self.cookies,headers=self.headers).textsoup = BeautifulSoup(html_content, 'html.parser')ol_tag = soup.find('ol', {'class': 'grid_view'})li_tags = ol_tag.find_all('div', {'class': 'info'})titles =[]urls = []for li_tag in li_tags:title = li_tag.find('span', {'class': 'title'}).get_text()url = li_tag.find('a').get('href')titles.append(title)urls.append(url)return titles, urlsdef get_movie_info(self, url):resp = requests.get(url, headers=self.headers, cookies=self.cookies)if resp.status_code == 200:soup = BeautifulSoup(resp.text, 'html.parser')info = soup.find('div', {'id': 'info'})# 封面图片的URLimg_url = soup.find('a', {'class': 'nbgnbg'}).find('img').get('src')# 导演director = info.find_all('span', {'class': 'attrs'})[0].get_text()# 编剧scriptwriter = info.find_all('span', {'class': 'attrs'})[1].get_text().split(' /')# 主演actors = info.find_all('span', {'class': 'attrs'})[2].get_text().split(' /')# 类型type_tags = info.find_all('span', {'property': 'v:genre'})types = []for type_tag in type_tags:types.append(type_tag.get_text())# 制片国家/地区country = info.find_all('span', {'class': 'pl'})[4].next_sibling.strip().split(' / ')# 语言language = info.find_all('span', {'class': 'pl'})[5].next_sibling.strip().split(' / ')try:# 简介intro = soup.find('div', {'class': 'indent', 'id': 'link-report-intra'})\.find('span', {'class': 'all hidden'}).get_text()\.replace(' ', '').replace('\u3000', ' ').replace('\n\n', '\n').strip('\n')except AttributeError as e:# 简介intro = soup.find('div', {'class': 'indent', 'id': 'link-report-intra'})\.find('span').get_text()\.replace(' ', '').replace('\u3000', ' ').replace('\n\n', '\n').strip('\n')rating = soup.find('strong', {'class': 'll rating_num'}).get_text()rating_people = soup.find('span', {'property': 'v:votes'}).get_text()# print(director, scriptwriter, actors, types, country, language, intro, rating, rating_people, img_url)movie_info = [director, scriptwriter, actors, types, country, language, intro, rating, rating_people, img_url]else:print(f'数据请求失败。。。状态码:{resp.status_code}')movie_info = ['', '', '', '', '', '', '', '', '', '']return movie_infodef main(self):start = 0while start <= 25:titles, urls = self.get_movie_list(start)time.sleep(1)for title, url in zip(titles, urls):print(title, url)movie_info = self.get_movie_info(url)movie_info.insert(0, title)print(movie_info)time.sleep(random.randint(2, 5))start += 25time.sleep(random.randint(2, 5))if __name__ == '__main__':douban = DouBan_top250()douban.main()
这是一个完整的源码, 你拿到后只要不缺少相关的模块库,添加上你自己浏览器访问豆瓣网的cookies就可正常运行!!
因为时间关系,这次我在代码中添加的注释很少,后续有时间我再优化一下这一部分!争取添加更多的注释帮助你理解代码!!
4.效果展示
列表中的数据分别对应的是:【电影名称、导演、编剧、主演、电影类型、制片国家、 语言、电影简介、评分、评分人数、封面URL】
5.结语
本篇文章中,我仅实现了获取到豆瓣网电影排行榜Top250的电影信息,但是我还没有实现把获取到的信息保存到表格中或保存到数据库,把电影封面图片下载到本地,后续的文章中我将把这些功能实现!
如果你对本文感兴趣且想要把数据持久化存储,可以留意我后续发布的文章!