爬去豆瓣网中电影信息并保存到本地目录当中

爬取豆瓣网中电影信息并保存到本地目录当中

读者可以根据源代码来设计自己的爬虫,url链接不能通用,由于源代码中后续查找筛选中有不同类或者标签名,仅供参考,另外推荐b站上一个老师,叫路飞学城IT的,讲的很详细,我就是根据他的讲解来设计自己的爬虫,本来想用GUI界面展示的,中间遇到一点困难,下次再来发啦。
话不多说先上码`

from bs4 import BeautifulSoup
import requests
import os
import re
def restore_poster(src_url):           #下载海报,存储到指定位置
    if not os.path.exists('./douban_poster'):
        os.mkdir('./douban_poster')
    poster_data=requests.get(url=src_url,headers=headers).content
    poster_name=src_url.split('/')[-1]
    poster_path='./douban_poster/'+poster_name
    with open(poster_path,'wb') as fp:
        try:
            fp.write(poster_data)
            print('海报下载成功')
        except :
                print('海报下载失败')
                
                
def find_movie(movie_id):   #通过预告片链接获取MP4格式预告片并下载
    movie_text=requests.get(url=movie_id,headers=headers).text
    # soup=BeautifulSoup(movie_text,'lxml')
    #解析预告片
    # movie_list=soup.select('#movie_player video')
    # movie_source=movie_list.source['src']   #预告片资源
    movie_source=(re.findall(r'(http://.*?\.mp4)', movie_text,re.S))#S为单行匹配用re正则库是因为用BeatifulSoup不好找,视频链接类型会变,无法通用
    movie_source=movie_source[0].split('\"')[-1]
    if not os.path.exists('./douban_movie'):
        os.mkdir('./douban_movie')
    movie_data=requests.get(url=movie_source,headers=headers).content
    movie_name=movie_source.split('/')[-1]
    movie_path='./douban_movie/'+movie_name
    with open(movie_path,'wb')as fp:
        fp.write(movie_data)
        print('预告片下载成功')
    return movie_source


def operate(a1_list):           #通过遍历bs4.element.resultset类型找到所需要的视频相关信息
    fp=open('./douban.txt','w',encoding='utf_8')
    for a1 in a1_list:
        title=a1.div.h3.a.string   #影片名
        src_url=a1.a.img['src']    #海报链接
        print(title,'爬取成功')
        restore_poster(src_url)
        detail_url=a1.a['href']    #详情链接
        
        try:
            movie_id=a1.div.ul.a['href']      #获取预告片网页
            movie_source=find_movie(movie_id)           #获取电影预告片链接
            
        except TypeError:
            movie_source='暂无预告片链接'
            print(movie_source)
        #发起请求
        detail_text=requests.get(url=detail_url,headers=headers).text  #解析导演等等信息
        detail_soup=BeautifulSoup(detail_text,'lxml')
        div_tag=detail_soup.find('div',id='info')
        #解析链接内容
        content=div_tag.text
        fp.write('影片名:'+title+' '+content+'海报链接:'+src_url+'视频链接:'+movie_source+'\n')
    fp.close()
def main():
    #对首页数据获取
    global headers,title2
    url='https://movie.douban.com/cinema/later/nanchang/'
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36 Edg/87.0.664.41'
        }
    try:
        page_text=requests.get(url=url,headers=headers).text
        print("成功进入豆瓣网")
    except :
        print('访问失败')
    #在首页解析电影标题和详情链接url
    #1.实例化beautifulsoup对象
    soup=BeautifulSoup(page_text,'lxml')
    #解析电影标题和详情页url
    a1_list=soup.select('#showing-soon.tab-bd > div')
    operate(a1_list)
    # fp=open('./douban.txt','w',encoding='utf_8')
    # for a1 in a1_list:
    #     title=a1.div.h3.a.string   #影片名
    #     src_url=a1.a.img['src']    #海报链接
    #     print(title,'爬取成功')
    #     restore_poster(src_url)
    #     detail_url=a1.a['href']    #详情链接
        
    #     try:
    #         movie_id=a1.div.ul.a['href']      #获取预告片网页
    #         movie_source=find_movie(movie_id)           #获取电影预告片
            
    #     except TypeError:
    #         movie_source='暂无预告片链接'
    #         print(movie_source)
    #     #发起请求
    #     detail_text=requests.get(url=detail_url,headers=headers).text  #解析导演等等信息
    #     detail_soup=BeautifulSoup(detail_text,'lxml')
    #     div_tag=detail_soup.find('div',id='info')
    #     #解析链接内容
    #     content=div_tag.text
    #     fp.write('影片名:'+title+' '+content+'海报链接:'+src_url+'视频链接:'+movie_source+'\n')
    # fp.close()
    
    #GUI
    
if __name__=='__main__':
    main()

运行之后可以看到如下图片

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以给你提供一个简单的虫示例,用于豆瓣电影 top250。以下是代码,我会给你添加注释来解释每个部分的功能: ```python import requests from bs4 import BeautifulSoup # 设置请求头,模拟浏览器访问 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} # 定义一个函数,用于获取每一页的电影信息 def get_movies(url): movie_list = [] response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') # 找到电影列表 movies = soup.find('ol', class_='grid_view').find_all('li') for movie in movies: # 获取电影名称、评分、评分人数、导演和主演等信息 name = movie.find('span', class_='title').text rating = movie.find('span', class_='rating_num').text rating_num = movie.find('div', class_='star').find_all('span')[3].text[:-3] info = movie.find('div', class_='bd').p.text.strip() director, actors = info.split('\n')[0].strip(), info.split('\n')[1].strip() # 将电影信息添加到列表 movie_list.append({ 'name': name, 'rating': rating, 'rating_num': rating_num, 'director': director, 'actors': actors }) return movie_list # 定义一个函数,用于获取豆瓣 top250 的所有电影信息 def get_all_movies(): all_movies = [] for i in range(10): # 构造每一页的 URL url = f'https://movie.douban.com/top250?start={i * 25}' # 调用 get_movies 函数获取当前页的电影信息,并将其添加到 all_movies 列表 all_movies.extend(get_movies(url)) return all_movies # 打印所有电影信息 movies = get_all_movies() for movie in movies: print(movie) ``` 在这个虫示例,我们使用 requests 库发起 GET 请求获取页内容,然后使用 BeautifulSoup 库解析 HTML 文档。具体而言,我们先找到电影列表所在的 `ol` 标签,然后再找到每个电影所在的 `li` 标签,最后从提取需要的信息。 注意,这个虫示例只是为了帮助你了解虫的基本原理,实际还需要考虑很多其他问题,比如反机制、虫频率等。如果你需要真正的虫工具,可以考虑使用 Scrapy 等专业的虫框架。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值