python获取豆瓣电影TOP250的所有电影的相关信息

参考文档:https://weread.qq.com/web/reader/37132a705e2b2f37196c138k98f3284021498f137082c2e

说明:我才接触网络爬虫,在看《python网络爬虫入门到实践》一书时,作者写了个实例获取豆瓣电影TOP250的所有电影的电影名称,我在此基础上进行了更进一步的改进,获取了所有的相关信息,并用表格将这些信息保存下来。

相关知识:

网络爬虫分为三个步骤: 第一步:伪装为浏览器访问;第二步:解析网页代码;第三步:存储数据。

(1)第一步使用requests模块实现

我们需要使用到request模块的get()方法,该方法模仿为浏览器访问,返回的是网页代码内容。

参考文档:http://cn.python-requests.org/zh_CN/latest/user/quickstart.html#url

(2)第二步使用BeautifulSoup模块实现

我们需要用到BeautifulSoup的find()方法。使用find()方法可通过标签的不同属性过滤html页面。定义如下:

find(self, name=None, attrs={}, recursive=True, text=None, **kwargs)

name:可以传入一个标签或多个标签名称组成的python列表。例如:findAll([‘h1’, ‘h2’])

attrs:用一个python字典封装的一个标签的若干属性和对应的属性值。例如:findAll(‘span’, {‘class’: {‘green’, ‘red’}})

recursive:布尔变量,若为True,会根据要求去查找标签参数的所有子标签,以及子标签的子标签。若为False,只查找文档的一级标签。

text:用标签的文本内容去匹配,而不是标签的属性。

kwargs:选择那些具有指定属性的标签。

参考链接:https://www.crummy.com/software/BeautifulSoup/bs3/documentation.zh.html

第三步我们将数据存放在表格中。

我们使用xlwt模块进行表格的写入操作,将获取到的信息保存到表格中。

代码如下:

 1 # encoding:utf-8
 2
 3 ‘‘‘
 4 目的:获取豆瓣电影TOP250的所有电影的相关信息,网页地址为:https://movie.douban.com/。
 5 环境:python 3.7.3
 6 所需的库:requests、BeautifulSoup、xlwt
 7 ‘‘‘
 8
 9 import logging
10 import xlwt
11 import requests
12 import string
13 from bs4 import BeautifulSoup
14
15 headers = {
16     ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36‘,17     ‘Host‘: ‘movie.douban.com‘
18 }
19
20 # 将获取的信息保存到表格中
21 def save_movie(content):
22     workbook = xlwt.Workbook(encoding = ‘ascii‘)
23     worksheet = workbook.add_sheet(‘Movies info‘)
24     style = xlwt.XFStyle() # 初始化样式
25     font = xlwt.Font() # 为样式创建字体
26     font.name = ‘Times New Roman‘
27     font.bold = True # 黑体
28     font.underline = True # 下划线
29     font.italic = True # 斜体字
30     style.font = font # 设定样式
31     worksheet.write(0, 0, ‘title‘)
32     worksheet.write(0, 1, ‘actor‘)
33     worksheet.write(0, 2, ‘score‘)
34     worksheet.write(0, 3, ‘quote‘)
35     for i, item in enumerate(content):
36         for j in range(4):
37             worksheet.write(i+1, j, content[i][j])
38     workbook.save(‘./movie_info.xls‘) # 保存文件
39
40
41 # 获取与move相关的信息
42 # 主要包括:title、actor、score、quote
43 def get_moves():
44     movies_info = []
45     movies_titles = []
46     movies_actors = []
47     movies_scores = []
48     movies_quotes = []
49
50     for i in range(10):
51         link = ‘https://movie.douban.com/top250?start=%d&filter=‘ % i*25
52         r = requests.get(link, headers=headers, timeout=10)
53         print (str(i+1), ‘页响应状态码:‘, r.status_code)
54         soup = BeautifulSoup(r.text, ‘lxml‘)
55         soup = BeautifulSoup(r.text, ‘lxml‘)
56         div_hd_list = soup.findAll(‘div‘, {‘class‘: ‘hd‘})
57         div_bd_list = soup.findAll(‘div‘, {‘class‘: ‘bd‘})
58         score_list = soup.findAll(‘span‘, {‘class‘: ‘rating_num‘})
59         quote_list = soup.findAll(‘p‘, {‘class‘: ‘quote‘})
60         for item in div_hd_list:
61             title = item.a.span.text.strip()
62             movies_titles.append(title)
63         for i, item in enumerate(div_bd_list):
64             if (i == 0): continue
65             content = item.p.text.strip().replace(u‘\xa0‘, u‘‘)
66             actor = content[: content.find(u‘主演‘)]
67             actor = actor[:actor.find(u‘主‘)]
68             movies_actors.append(actor)
69         for item in score_list:
70             score = item.text.strip()
71             movies_scores.append(score)
72         for item in quote_list:
73             quote = item.span.text.strip()
74             movies_quotes.append(quote)
75     print (len(movies_actors))
76     print (len(movies_quotes))
77     for i in range(len(movies_titles)):
78         item = [movies_titles[i], movies_actors[i], movies_scores[i], movies_quotes[i]]
79         movies_info.append(item)
80
81     return movies_info
82
83
84 if __name__ == "__main__":
85     movies_info =  get_moves()
86     save_movie(movies_info)

上述代码在获取“导演”这个信息时,使用div_bd_list = soup.findAll(‘div‘, {‘class‘: ‘bd‘})获取到的列表第一个元素需要除去,不是我们想要的元素。

另外代码中的header信息可以在浏览器(我使用的是chrome)中获得:在chrome中点击检查,在选择network可以看到Request Headers请求头的主要信息。

原文地址:https://www.cnblogs.com/mrlayfolk/p/12319414.html

时间: 2024-10-07 11:30:31

python获取豆瓣电影TOP250的所有电影的相关信息的相关文章

python爬虫——豆瓣图书top250信息

# -*- coding: utf-8 -*- import requests import re import sys reload(sys) sys.setdefaultencoding('utf-8') class Spider(object): def __init__(self): print('开始爬取豆瓣图书top250的内容......') # 传入url,返回网页源代码 def getSourceCode(self, url): html = requests.get(url)

python爬虫获取豆瓣网前250部电影的详细信息

网址 https://movie.douban.com/top250 一共250部电影,有分页,获取每一部的详细信息 不采用框架,使用 urilib读取网页,re进行正则表达式匹配,lxml进行xpath查找 1 from film import * 2 from urllib import request 3 import time,re 4 url=r'https://movie.douban.com/top250?start=' 5 for i in range(10): 6 url=ur

Python获取豆瓣用户读过的书

好久好久不写博客了,最近也光顾着玩了,前几天跟导师联系了一下毕设的事,要再爬点东西,想了想,就拿豆瓣图书练练手,爬一下某个用户读过的书(当然也可以好多用户或者其他信息),由于豆瓣提供了API,所以首先想到用API,图书API地址:https://developers.douban.com/wiki/?title=book_v2,看了看,好像没有获取用户读过的书之类的,擦亮眼再看看,有一个获取某用户所有图书收藏信息,那这个到底是不是呢,试一下就知道了. 那个接口里有个参数status,表示收藏状态

iOS获取手机相关信息

iOS具体的设备型号: #include <sys/types.h> #include <sys/sysctl.h> - (void)test { //手机型号. size_t size; sysctlbyname("hw.machine", NULL, &size, NULL, 0); char *machine = (char*)malloc(size); sysctlbyname("hw.machine", machine, &

运维学python之爬虫高级篇(五)scrapy爬取豆瓣电影TOP250

对于scrapy我们前面已经介绍了简单的应用,今天我们用一个完整的例子,爬取豆瓣电影TOP250来做一个小的练习,把scrapy阶段做一个总结. 1 环境配置 语言:Python 3.6.1 IDE: Pycharm 浏览器:firefox 爬虫框架:Scrapy 1.5.0 操作系统:Windows 10 家庭中文版 2 爬取前分析 2.1 需要保存的数据 首先确定我们要获取的内容,在items中定义字段,来将非结构化数据生成结构化数据,获取的内容主要包括:排名.电影名称.得分.评论人数.如下

Python小爬虫——抓取豆瓣电影Top250数据

写LeetCode太累了,偶尔练习一下Python,写个小爬虫玩一玩~ 确定URL格式 先找到豆瓣电影TOP250任意一页URL地址的格式,如第一页为:https://movie.douban.com/top250?start=0&filter=,分析该地址: https:// 代表资源传输协议使用https协议: movie.douban.com/top250 是豆瓣的二级域名,指向豆瓣服务器: /top250 是服务器的某个资源: start=0&filter= 是该URL的两个参数,

[Python]从豆瓣电影批量获取看过这部电影的用户列表

前言 由于之后要做一个实验,需要用到大量豆瓣用户的电影数据,因此想到了从豆瓣电影的“看过这部电影 的豆瓣成员”页面上来获取较为活跃的豆瓣电影用户. 链接分析 这是看过"模仿游戏"的豆瓣成员的网页链接:http://movie.douban.com/subject/10463953/collections. 一页上显示了20名看过这部电影的豆瓣用户.当点击下一页时,当前连接变为:http://movie.douban.com/subject/10463953/collections?st

python爬虫练习1:豆瓣电影TOP250

项目1:实现豆瓣电影TOP250标题爬取: 1 from urllib.request import urlopen 2 from bs4 import BeautifulSoup 3 import re 4 5 class doubanSpider(): 6 def __init__(self): 7 """ 8 初始化, 9 页码,URL,存储数据, 10 """ 11 self.page = 0; 12 # "http://mov

[感想]Web crawler with Python - 03.豆瓣电影TOP250

按照大牛的步骤简单地爬了豆瓣电影top250.过程感想记录一下. 教程链接:在这里 爬虫写完以后,一直出现错误 AttributeError: 'NoneType' object has no attribute 'find' #'nonetype'的对象没有属性发现 出错原因:调用对象是个None,然后调用出错.出错行原本是在第10页没有下一页的链接时候,判断soup.find('span', attrs={'class', 'next'}).find('a')  这句话的结果来选择返回结果,