首页 > 技术文章 > 爬虫——豆瓣250

shof 2020-09-23 17:33 原文

import requests     # 模拟请求模块
from bs4 import BeautifulSoup   # 格式化模块
import re   # 正则模块
import time   # 时间模块

# 创建一个空白文档
with open('D:\豆瓣.text',mode='w',encoding='utf-8') as f:
    # for循环拼接网址
    for start in range(0,251,25):
        url = 'https://movie.douban.com/top250?start=%s'%start
        headers = {
        'Host': 'movie.douban.com',
        '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; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
        }
        # 申请数据
        res = requests.get(url=url,headers=headers)
        # 取出装有电影信息的列表
        soup = BeautifulSoup(res.text,'lxml')
        li = soup.find('ol').find_all('li')
        # 开始循环每一部电影
        for i in li:
            murl = i.a.get('href')
            mres = requests.get(url=murl,headers=headers)
            soup = BeautifulSoup(mres.text, 'lxml')
            # 切片拿到电影排名
            no = re.findall('<span class="top250-no">(.*?)</span>',mres.text)
            # 切片拿到电影名称
            name = re.findall('<span property="v:itemreviewed">(.*?)<', mres.text)
            # 切片拿到电影评分
            lv = re.findall('"ratingValue": "(.*?)"', mres.text)
            # 切片拿到电影图片地址
            pc = re.findall('src="(.*?)" title="点击看更多海报"', mres.text)
            vu = {}     # 事先创造一个控制点准备用来存放视频播放地址
            # 找出所有a标签
            ull = soup.find_all("a")
            time.sleep(2)
            for l in ull:
                # 找出所有a标签中是否有关键字'playBtn'
                if 'playBtn' in str(l):
                    # 取视频网站名称
                    d = re.findall('data-cn="(.*?)"', str(l))
                    # 取视频播放地址
                    v = re.findall('href="(.*?)" target="_blank"', str(l))
                    vu[d[0]] = v[0]     # 加入实现准备好的字典
            # 拼接字符串成一条完整信息
            s = '排名:' + no[0] + '\t名字:' + name[0] + '\t评分:' + lv[0] + '\t图片:' + pc[0] + '\t视频地址:' + str(vu) + '\n'
            # 追加写入实现准备好的文件中
            with open('D:\豆瓣.text', mode='a', encoding='utf-8') as f:
                f.write(s)
                print(s)
                time.sleep(3)
    else:
        print(no,'结束')






推荐阅读