python爬豆瓣电影Top250

1.前期分析

完成豆瓣电影Top250网站https://movie.douban.com/top250)推荐电影名单的爬取 。
这里写图片描述

这里写图片描述

可见每页显示25部电影,总共10页.

chrome按F12:
这里写图片描述

所以用正则表达式表示为

<span.*?class="title">(.*?)</span>

但符合这样的有两行:

<span class="title">肖申克的救赎</span>
<span class="title">&nbsp;/&nbsp;The Shawshank Redemption</span>

我们需要提取的是第一行,所以我们还要在代码中过滤掉:

&nbsp;/&nbsp;The Shawshank Redemption

2.决战代码

注释详细,应该好懂..

#coding:utf8

import urllib2
import re

__author__ = 'binchasing'
'''
爬取豆瓣电影Top250 网站:https://movie.douban.com/top250
'''
class douban_movie():
    def __init__(self):
        self.my_url = r'https://movie.douban.com/top250'  #豆瓣Top250首页
        self.top_num = 1   #记录即将输出的电影编号
        self.total_page_num = 10   #网站每页记录25部电影,所有250部电影总共有10页

    '''
    get_page_html(self,page_index)返回相应页码的网页html内容
    page_index:页码编号,0表示第一页
    contents:返回相应网页的html

    '''
    def get_page_html(self,page_index):    
        cur_url =  self.my_url + '?start=' + str(25*page_index) + '&filter='   #第(page_index+1)页的url
        request = urllib2.Request(cur_url)      #创建请求
        response = urllib2.urlopen(request)     #得到响应
        contents = response.read()
        return contents
    '''
    print_movie(self,contents) 打印对应网页中的电影名称
    contents:网页的html
    '''
    def print_movie(self,contents):
        pattern = re.compile(r'<span.*?class="title">(.*?)</span>',re.S)       #构造正则表达式
        movie_items = re.findall(pattern,contents)   #找出所有匹配项
        for ind, item in enumerate(movie_items) :
            if item.find("&nbsp") == -1 :   #排除不满足条件的匹配项
                print ("Top" + str(self.top_num) + " " + item).decode("utf-8")  #utf-8转为unicode输出
                self.top_num = self.top_num + 1     #电影编号自增

    '''
    start_spider(self)启动爬虫
    '''
    def start_spider(self):
        index = 0
        while index < self.total_page_num:   #打印所有页
            contents = self.get_page_html(index)
            self.print_movie(contents)
            index = index + 1
def main():
    print '''
    ------------------《豆瓣Top250榜单》------------------
    '''
    douban = douban_movie()
    douban.start_spider()

if __name__ == '__main__':
    main()

3.输出结果

这里写图片描述
………
这里写图片描述

### Python 爬虫 豆瓣电影 Top250 源码 示例 为了实现Python豆瓣电影Top250榜单的功能,可以采用`requests`库发送HTTP请求并接收响应页面的内容。接着通过`BeautifulSoup`解析HTML文档结构,提取所需的数据字段。 #### 导入必要的库 ```python import requests from bs4 import BeautifulSoup import pandas as pd ``` #### 设置URL和头部信息 构建目标网址列表以及模拟浏览器访问所需的User-Agent头文件[^1]。 ```python url_template = 'https://movie.douban.com/top250?start={}' headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } ``` #### 发送GET请求获取网页内容 遍历每一页链接地址发起get请求,并调用lxml解析器创建soup对象方便后续操作处理[^2]。 ```python data_list = [] for start_num in range(0, 250, 25): url = url_template.format(start_num) response = requests.get(url=url, headers=headers).text soup = BeautifulSoup(response,'lxml') items = soup.find_all('div', class_='item') for item in items: rank=item.em.text.strip() title=item.span.text.strip() rating=item.find('span',class_="rating_num").text.strip() data_dict={ 'rank':rank, 'title':title, 'rating':rating } data_list.append(data_dict) df=pd.DataFrame(data=data_list) print(df.head()) ``` 此段代码实现了对豆瓣电影Top250榜单的抓取工作,能够收集到排名、名称及评分三个维度的信息存储于DataFrame表格之中以便进一步分析展示[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值