欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

爬取豆瓣电影

程序员文章站 2023-03-09 16:14:45
1:创建爬虫文件,获取url地址 2:使用request获取第一页的请求信息 3:获取多页的请求信息 4:下载电影图片地址到本地 5:爬取豆瓣热门美剧存储到mongodb中 将json数据转换为字典,然后根据键subjects循环取出里面的值 取出我们想要的数据 获取多页数据 保存数据到mongod ......

1:创建爬虫文件,获取url地址

 

爬取豆瓣电影

 

 爬取豆瓣电影

2:使用request获取第一页的请求信息

# -*- coding:utf-8 -*-
#作者:    baikai  
#创建时间: 2019/2/24 14:58 
#文件:    douban_spider.py  
#ide:    pycharm
import requests
from bs4 import beautifulsoup

url="https://movie.douban.com/top250"
wb_data=requests.get(url)
# 获取网页文本信息
soup=beautifulsoup(wb_data.text,'lxml')
# 从soup中提取我们想要的信息
titles=soup.select('div.hd>a')
rates=soup.select('span.rating_num')
imgs=soup.select('img[width="100"]')
for title,rate,img in zip(titles,rates,imgs):
    data={
        'title':list(title.stripped_strings),
        'rate':rate.get_text(),
        'img':img.get('src')
    }
    print(data)

3:获取多页的请求信息

# -*- coding:utf-8 -*-
#作者:    baikai  
#创建时间: 2019/2/24 14:58 
#文件:    douban_spider.py  
#ide:    pycharm
import requests
from bs4 import beautifulsoup

urls=['https://movie.douban.com/top250?start=n&filter=' for n in range(0,250,25)]
for url in urls:
    wb_data=requests.get(url)
    # 获取网页文本信息
    soup=beautifulsoup(wb_data.text,'lxml')
    # 从soup中提取我们想要的信息
    titles=soup.select('div.hd>a')
    rates=soup.select('span.rating_num')
    imgs=soup.select('img[width="100"]')
    for title,rate,img in zip(titles,rates,imgs):
        data={
            'title':list(title.stripped_strings),
            'rate':rate.get_text(),
            'img':img.get('src')
        }
        print(data)

 4:下载电影图片地址到本地

# -*- coding:utf-8 -*-
#作者:    baikai  
#创建时间: 2019/2/24 14:58 
#文件:    douban_spider.py  
#ide:    pycharm
import requests
from bs4 import beautifulsoup
i=0
urls=['https://movie.douban.com/top250?start=n&filter=' for n in range(0,250,25)]
for url in urls:
    wb_data=requests.get(url)
    # 获取网页文本信息
    soup=beautifulsoup(wb_data.text,'lxml')
    # 从soup中提取我们想要的信息
    titles=soup.select('div.hd>a')
    rates=soup.select('span.rating_num')
    imgs=soup.select('img[width="100"]')
    for title,rate,img in zip(titles,rates,imgs):
        data={
            'title':list(title.stripped_strings),
            'rate':rate.get_text(),
            'img':img.get('src')
        }
        # 保存图片到本地
        i+=1
        filename=str(i)+'、'+data['title'][0]+''+data['rate']+'分.jpg'
        pic=requests.get(data['img'])
        with open('e:/envs/douban/douban_imgs/'+filename,'wb')as photo:
            photo.write(pic.content)
        print(data)

爬取豆瓣电影

5:爬取豆瓣热门美剧存储到mongodb中

将json数据转换为字典,然后根据键subjects循环取出里面的值

 爬取豆瓣电影

爬取豆瓣电影

取出我们想要的数据

# -*- coding:utf-8 -*-
#作者:    baikai  
#创建时间: 2019/2/24 20:06 
#文件:    douban_tv_us.py  
#ide:    pycharm
import requests,json

url='https://movie.douban.com/j/search_subjects?type=tv&tag=%e7%be%8e%e5%89%a7&sort=recommend&page_limit=20&page_start=0'
response_data=requests.get(url)
# 将json数据转换为字典类型并根据键名循环取出值
json_data=json.loads(response_data.text)
# 查看键名
# print(json_data)
for tv in json_data['subjects']:
    # print(tv)
    # 取出我们需要的数据
    data={
        'rate':tv['rate'],
        'title':tv['title'],
        'img_url':tv['cover'],
        'id':tv['id'],
        # 自定义一个标志
        'tag':"美剧"
    }
    print(data)

爬取豆瓣电影

获取多页数据

# -*- coding:utf-8 -*-
#作者:    baikai  
#创建时间: 2019/2/24 20:06 
#文件:    douban_tv_us.py  
#ide:    pycharm
import requests,json

# url='https://movie.douban.com/j/search_subjects?type=tv&tag=%e7%be%8e%e5%89%a7&sort=recommend&page_limit=20&page_start=0'
# 这里的200可以修改为更高数字,目前只爬取200条数据
urls=['https://movie.douban.com/j/search_subjects?type=tv&tag=%e7%be%8e%e5%89%a7&sort=recommend&page_limit=20&page_start='+str(n) for n in range(0,200,20)]
for url in urls:
    response_data=requests.get(url)
    # 将json数据转换为字典类型并根据键名循环取出值
    json_data=json.loads(response_data.text)
    # 查看键名
    # print(json_data)
    for tv in json_data['subjects']:
        # print(tv)
        # 取出我们需要的数据
        data={
            'rate':tv['rate'],
            'title':tv['title'],
            'img_url':tv['cover'],
            'id':tv['id'],
            # 自定义一个标志
            'tag':"美剧"
        }
        print(data)

 保存数据到mongodb数据库里面

# -*- coding:utf-8 -*-
#作者:    baikai  
#创建时间: 2019/2/24 20:06 
#文件:    douban_tv_us.py  
#ide:    pycharm
import requests,json,pymongo

# url='https://movie.douban.com/j/search_subjects?type=tv&tag=%e7%be%8e%e5%89%a7&sort=recommend&page_limit=20&page_start=0'
# 这里的200可以修改为更高数字,目前只爬取200条数据
client=pymongo.mongoclient(host='localhost',port=27017)
db=client.db_bk
collection = db.douban
urls=['https://movie.douban.com/j/search_subjects?type=tv&tag=%e7%be%8e%e5%89%a7&sort=recommend&page_limit=20&page_start='+str(n) for n in range(0,200,20)]
for url in urls:
    response_data=requests.get(url)
    # 将json数据转换为字典类型并根据键名循环取出值
    json_data=json.loads(response_data.text)
    # 查看键名
    # print(json_data)
    for tv in json_data['subjects']:
        # print(tv)
        # 取出我们需要的数据
        data={
            'rate':tv['rate'],
            'title':tv['title'],
            'img_url':tv['cover'],
            'id':tv['id'],
            # 自定义一个标志
            'tag':"美剧"
        }
        collection.insert_one(data)
        print(data)