Python爬虫-豆瓣电影 Top 250

爬取的网页地址为:https://movie.douban.com/top250

打开网页后,可观察到:TOP250的电影被分成了10个页面来展示,每个页面有25个电影。

那么要爬取所有电影的信息,就需要知道另外9个页面的URL链接。

第一页:https://movie.douban.com/top250

第二页:https://movie.douban.com/top250?start=25&filter=

第三页:https://movie.douban.com/top250?start=50&filter=

以此类推...

分析网页源代码:以首页为例

观察后可以发现: 
所有电影信息在一个ol标签之内,该标签的 class属性值为grid_view; 
每个电影在一个li标签里面; 
每个电影的电影名称在:第一个 class属性值为hd 的div标签 下的 第一个 class属性值为title 的span标签里; 
每个电影的评分在对应li标签里的(唯一)一个 class属性值为rating_num 的span标签里; 
每个电影的评价人数在 对应li标签 里的一个 class属性值为star 的div标签中 的最后一个数字; 
每个电影的短评在 对应li标签 里的一个 class属性值为inq 的span标签里。

Python主要模块:requests模块  BeautifulSoup4模块

>pip install requests

>pip install BeautifulSoup4

主要代码:

Top250.py


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
 
# -*- coding:utf-8 -*-

import requests                             # requests模块

from bs4 import BeautifulSoup               # BeautifulSoup4模块

import re                                   # 正则表达式模块

import time                                 # 时间模块

import sys                                  # 系统模块

"""获取html文档"""

def getHTMLText(url, k):

try:

if(k == 0):             # 首页

kw = {}

else:                   # 其它页

kw = {‘start‘:k, ‘filter‘:‘‘}

r = requests.get(url, params = kw, headers = {‘User-Agent‘: ‘Mozilla/4.0‘})

r.raise_for_status()

r.encoding = r.apparent_encoding

return r.text

except:

print("Failed!")

"""解析数据"""

def getData(html):

soup = BeautifulSoup(html, "html.parser")

movieList = soup.find(‘ol‘, attrs = {‘class‘:‘grid_view‘})                  # 找到第一个class属性值为grid_view的ol标签

moveInfo = []

for movieLi in movieList.find_all(‘li‘):                                    # 找到所有li标签

data = []

# 得到电影名字

movieHd = movieLi.find(‘div‘, attrs = {‘class‘:‘hd‘})                   # 找到第一个class属性值为hd的div标签

movieName = movieHd.find(‘span‘, attrs = {‘class‘:‘title‘}).getText()   # 找到第一个class属性值为title的span标签

# 也可使用.string方法

data.append(movieName)

# 得到电影的评分

movieScore = movieLi.find(‘span‘, attrs={‘class‘:‘rating_num‘}).getText()

data.append(movieScore)

# 得到电影的评价人数

movieEval=movieLi.find(‘div‘,attrs={‘class‘:‘star‘})

movieEvalNum=re.findall(r‘\d+‘,str(movieEval))[-1]

data.append(movieEvalNum)

# 得到电影的短评

movieQuote = movieLi.find(‘span‘, attrs={‘class‘: ‘inq‘})

if(movieQuote):

data.append(movieQuote.getText())

else:

data.append("无")

print(outputMode.format(data[0], data[1], data[2], data[3], chr(12288)))

# 将输出重定向到txt文件

output = sys.stdout

outputfile = open("moviedata.txt", ‘w‘, encoding = ‘utf-8‘)

sys.stdout = outputfile

outputMode = "{0:{4}^20}\t{1:^10}\t{2:^10}\t{3:{4}<10}"

print(outputMode.format(‘电影名称‘, ‘评分‘, ‘评论人数‘, ‘短评‘, chr(12288)))

basicUrl = ‘https://movie.douban.com/top250‘

k = 0

while k <= 225:

html = getHTMLText(basicUrl, k)

time.sleep(2)

k += 25

getData(html)

outputfile.close()

sys.stdout = output

 参考出处:https://blog.csdn.net/linzch3/article/details/62444947

原文地址:https://www.cnblogs.com/MakeView660/p/9579306.html

时间: 2024-10-07 03:08:02

Python爬虫-豆瓣电影 Top 250的相关文章

Python开发简单爬虫之静态网页抓取篇:爬取“豆瓣电影 Top 250”电影数据

目标:爬取豆瓣电影TOP250的所有电影名称,网址为:https://movie.douban.com/top250 1)确定目标网站的请求头: 打开目标网站,在网页空白处点击鼠标右键,选择"检查".(小编使用的是谷歌浏览器). 点击"network",在弹出页面若长时间没有数据显示,则试一下F5刷新. 可以得到目标网页中Host和User-Agent两项. 2)找到爬取目标数据(即电影名称)在页面中的位置 右键"检查",选择"Elem

豆瓣电影 Top 250

# by luffycity.comimport refrom urllib.request import urlopen def getPage(url): # 获取网页的字符串 response = urlopen(url) return response.read().decode('utf-8') def parsePage(s): ret = com.finditer(s) # 从s这个网页源码中 找到所有符合com正则表达式规则的内容 并且以迭代器的形式返回 for i in ret

Python自定义豆瓣电影种类,排行,点评的爬取与存储(进阶)

Python 2.7 IDE Pycharm 5.0.3 具体Selenium及PhantomJS请看Python+Selenium+PIL+Tesseract真正自动识别验证码进行一键登录 一些自动化应用实例请看Selenium+PhantomJS自动续借图书馆书籍 至于GUI的入门使用请看Python基于Tkinter的二输入规则器(乞丐版) 比较综合的GUI例子请看基于Python的参考文献生成器1.0 想了想,还是稍微人性化一点,做个成品GUI出来 起因 没办法,在知乎预告了要做个GUI

【Python】从0开始写爬虫——豆瓣电影

1. 最近略忙..java在搞soap,之前是用工具自动生成代码的.最近可能会写一个soap的java调用 2. 这个豆瓣电影的爬虫.扒信息的部分暂时先做到这了.扒到的信息如下 from scrapy import app import re header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safar

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

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

[感想]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')  这句话的结果来选择返回结果,

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

参考文档:https://weread.qq.com/web/reader/37132a705e2b2f37196c138k98f3284021498f137082c2e 说明:我才接触网络爬虫,在看<python网络爬虫入门到实践>一书时,作者写了个实例获取豆瓣电影TOP250的所有电影的电影名称,我在此基础上进行了更进一步的改进,获取了所有的相关信息,并用表格将这些信息保存下来. 相关知识: 网络爬虫分为三个步骤: 第一步:伪装为浏览器访问:第二步:解析网页代码:第三步:存储数据. (1)

python爬虫爬取豆瓣电影前250名电影及评分(requests+pyquery)

写了两个版本: 1.面向过程版本: import requests from pyquery import PyQuery as pq url='https://movie.douban.com/top250' moves=[] def sec(item): return item[1] for i in range(0,255,25): content=requests.get(url+"?start="+str(i))#?start=25 for movie in pq(conte

[Python]计算豆瓣电影TOP250的平均得分

用python写的爬虫练习,感觉比golang要好写一点. 1 import re 2 import urllib 3 4 origin_url = 'https://movie.douban.com/top250?start=00&filter=' 5 urls = [] 6 scores = [] 7 8 9 def get_url(): 10 step = 0 11 while step <= 250: 12 tmp = origin_url[:38] 13 tmp += str(st