python爬虫之豆瓣网及作业


1.豆瓣电影排行榜TOP25

'''
主页:
    https://movie.douban.com/top250
    GET
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36
    re正则:
    如何书写正则表达式,根据.*?一直匹配到自己想要查找的内容,中间的内容就过滤
    在此需要找到固定标识,再通过(.*?)提取到自己想要的内容
    <div class="item">.*?href="(.*?)">.*?src="(.*?)">.*?<span class="title">(.*?)</span>.*?<span class="rating.num".*?>(.*?)</span>.*?<span>(.*?)人评价
    <div class="item">.*?href="(.*?)">.*?src="(.*?)">.*?<span class="title">(.*?)</span>.*? <p class="">导演:(.*?).*?主演:(.*?).*?...(.*?)/.*?/(.*?)</p>.*?<span class="rating.num".*?>(.*?)</span>.*?<span>(.*?)人评价
        <div class="item">
                <div class="pic">
                    <em class="">2</em>
                    <a href="https://movie.douban.com/subject/1291546/">
                        <img width="100" alt="霸王别姬" src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p1910813120.webp" class="">
                    </a>
                </div>
                <div class="info">
                    <div class="hd">
                        <a href="https://movie.douban.com/subject/1291546/" class="">
                            <span class="title">霸王别姬</span>
                                <span class="other">&nbsp;/&nbsp;再见,我的妾  /  Farewell My Concubine</span>
                        </a>


                            <span class="playable">[可播放]</span>
                    </div>
                    <div class="bd">
                        <p class="">
                            导演: 陈凯歌 Kaige Chen&nbsp;&nbsp;&nbsp;主演: 张国荣 Leslie Cheung / 张丰毅 Fengyi Zha...<br>
                            1993&nbsp;/&nbsp;中国大陆 香港&nbsp;/&nbsp;剧情 爱情 同性
                        </p>


                        <div class="star">
                                <span class="rating5-t"></span>
                                <span class="rating_num" property="v:average">9.6</span>
                                <span property="v:best" content="10.0"></span>
                                <span>1074955人评价</span>
                        </div>

                            <p class="quote">
                                <span class="inq">风华绝代。</span>
                            </p>
                    </div>
                </div>
            </div>
'''

import requests
import  re
url='https://movie.douban.com/top250'
headers={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36'
}
# 1.向豆瓣top250发送请求获取响应数据
response=requests.get(url,headers=headers)
# 2.通过正则提取数据
# 需要提取的数据为:电影详情页url,图片链接,电影名称,电影评分,评价人数
movie_content_list=re.findall(' <div class="item">.*?href="(.*?)">.*?src="(.*?)">.*?<span class="title">(.*?)</span>.*?<span class="rating.num".*?>(.*?)</span>.*?<span>(.*?)人评价',response.text,re.S)
# 解析文本 response.text
# 匹配模式 re.S
# 4.使用元组解压赋值每一部电影
for movie_content in movie_content_list:
    detail_url,movie_jpg,name,point,num=movie_content  # 逐个取出列表中获取的电影数据,因为取出的是元组模式,所以将其中的内容对应赋值给每一个变量 detail_url,movie_jpg,name,num=movie_content
    data=f'电影名称:{name},详情页:{detail_url},图片url:{movie_jpg},评分:{point},评价人数:{num}\n'
    print(data)
# 5.保存数据,把电影信息写入文件中
with open('爬取豆瓣的前25部电影.txt','a',encoding='utf-8')as f:
    f.write(data)
# 找到每一页的规律
# 爬取豆瓣的250部电影
# 提取画框信息

 3.更新的作业爬取豆瓣top250,已通过验证

''''''
'''
爬取豆瓣TOP250电影信息

主页:
    第一页:
        https://movie.douban.com/top250?start=0&filter=
    第二页:
        https://movie.douban.com/top250?start=25&filter=
    第三页:
        https://movie.douban.com/top250?start=50&filter=
    第四页:
        https://movie.douban.com/top250?start=75&filter=
    第十页:
        https://movie.douban.com/top250?start=225&filter=
        
    GET
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36

re正则:
    # 电影详情页url、图片链接、电影名称、导演、主演、电影上映时间、电影评分、评价人数、简介
   <div class="item">.*?href="(.*?)">.*?src="(.*?)" class="">.*?<span class="title">(.*?)</span>.*?<div class="bd">.*?导演:(.*?)<br>(.*?)</p>.*?<span class="rating_num".*?>(.*?)</span>.*?<span>(.*?)人评价.*?<span class="inq">(.*?)</span>
'''
import requests
import re


headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36'
}
base_url = 'https://movie.douban.com/top250?start={}&filter='

n = 0
for line in range(10):
    url = base_url.format(n)
    print(type(n))
    n += 25
    print(url)

    # 1、往豆瓣TOP250发送请求获取响应数据
    response = requests.get(url, headers=headers)

    # print(response.text)

    # 2、通过正则解析提取数据
    # 电影详情页url、图片链接、电影名称、电影评分、评价人数
    movie_content_list = re.findall(
        # 正则规则
        # '<div class="item">.*?href="(.*?)">.*?src="(.*?)".*?<span class="title">(.*?)</span>.*?<span class="rating_num".*?>(.*?)</span>.*?<span>(.*?)人评价',
        '<div class="item">.*?href="(.*?)">.*?src="(.*?)" class="">.*?<span class="title">(.*?)</span>.*?<div class="bd">.*?导演:(.*?)<br>(.*?)</p>.*?<span class="rating_num".*?>(.*?)</span>.*?<span>(.*?)人评价.*?<span class="inq">(.*?)</span>',

        # 解析文本
        response.text,

        # 匹配模式
        re.S)

    for movie_content in movie_content_list:
        # 解压赋值每一部电影
        detail_url, movie_jpg, name, daoyan, timer,point, num,  desc= movie_content
        data = f'电影名称:{name},   详情页url:{detail_url}, 图片url:{movie_jpg}, 导演: {daoyan} 上映时间: {timer}评分: {point}, 评价人数: {num} 简介:{desc}\n'
        print(data)

        # 3、保存数据,把电影信息写入文件中
        with open('douban.txt', 'a', encoding='utf-8') as f:
            f.write(data)

 

posted @ 2019-06-16 21:43  lhhhha  阅读(566)  评论(0编辑  收藏  举报