PYTHON爬虫爬取豆瓣电影的一周口碑电影排行榜

代码前准备:
1.使用Eclipse进行开发,关于eclipse搭建python的环境见:https://www.cnblogs.com/telwanggs/p/7016803.html
2.使用bs4的BeautifulSoup
3.使用MySQL for Python连接数据库。
4.数据库表的设计:PYTHON爬虫爬取豆瓣电影的一周口碑电影排行榜_第1张图片

一、主函数代码(doubanInsect.py)

import datetime
import pymysql
from douban.ranke_dao import insert_message
from douban.ranke_dao import find_message
from douban.html_outputer import output_html
from bs4 import BeautifulSoup
from pip._vendor import requests

allMovie=[]
connect = pymysql.connect(host='localhost', user='root', password='1111', db='python_class')#这些你的数据库信息,db为数据库名
 
def getHTMLText(url):#获取豆瓣电影网站的h5代码
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = 'utf-8'
        return r.text
    except:
        return ""

def fillRanke(soup):#定位到一周口碑电影排行榜的div,并且获取每条数据并保存在allMovie
    data = soup.find_all('div', class_="billboard-bd")
    for td in data:
        ltd = td.find_all('td')
        if len(ltd) == 0:
            continue
        singleUniv = []
        for td in ltd:
            singleUniv.append(td.string)
        allMovie.append(singleUniv)
        
def saveRanke():#将数据保存至mysql数据库
    i = 0
    ranke = 0
    name = ''
    date = datetime.datetime.now().strftime('%Y-%m-%d')
    while i < 20:
        if i % 2 == 0:
            ranke = int(i/2) + 1
        else:
            name = allMovie[0][i]
            insert_message(connect, ranke, name, date)
        i = i + 1
     
def selectRanke():#将数据呈现在一个新的html中
    data = find_message(connect)
    output_html(data)
    
def main():
    url = "https://movie.douban.com/"
    html = getHTMLText(url)
    soup = BeautifulSoup(html, "html.parser")
    fillRanke(soup)
    saveRanke()
    selectRanke()
    
main()

二、关于数据库的插入与查找的操作(ranke_dao.py)


def insert_message(connect, ranke, name, date):#插入数据
    
    cursor = connect.cursor()
    
    sql = "INSERT INTO message(ranke, name, date) VALUES('%d','%s','%s')"%(ranke, name, date)
    
    cursor.execute(sql)
    
    connect.commit()
    connect.close();
    
def find_message(connect):#查找数据
    cursor = connect.cursor()
    
    sql = "select ranke, name, date from message"
    
    cursor.execute(sql.encode('utf-8'))
    data = cursor.fetchall()
    connect.close();
    
    return data

三、将数据显示在html中(html_output.py)

def output_html(datas):
    i = 0
    fout = open('output.html', 'w')
        
    fout.write("")
    fout.write("")
    fout.write("")
    fout.write("")
    fout.write("")
    fout.write("")
    fout.write("")
        
    for data in datas:
        if(i % 10 == 0):
            fout.write("
") fout.write("

%s

"%data[2]) fout.write("") fout.write(""%data[0]) fout.write(""%data[1]) fout.write("") if(i % 9 == 0 and i != 0): fout.write("
%d%s
") i = i + 1 fout.write("") fout.write("") fout.close()

最后效果展示(之前运行过一次,所以有两次数据展示):
mysql中:
PYTHON爬虫爬取豆瓣电影的一周口碑电影排行榜_第2张图片
out_put.html的效果:
PYTHON爬虫爬取豆瓣电影的一周口碑电影排行榜_第3张图片
------------------------------------分界线-------------------------------------------------
将功能升级,使其可以跳转查看预告片。
豆瓣有两个ID我们需要获取。
第一个就是每个电影的ID。在这里插入图片描述

第二个就是通过每个电影的ID进入相应界面来获取的每个电影的预告片ID。(通过F12查看)在这里插入图片描述

所以我们修改doubanInsect.py中的fillRanke代码,用来获取电影ID,并存到allId中。

def fillRanke(soup):
    data = soup.find_all('div', class_="billboard-bd")
    for td in data:
        ltd = td.find_all('td')
        for i in td.find_all('a'):
            allId.append(i['href'][33:])
        if len(ltd) == 0:
            continue
        singleUniv = []
        for td in ltd:
            singleUniv.append(td.string)
        allMovie.append(singleUniv)

创建一个新的py文件,传给他电影ID,通过电影ID爬取预告片ID并返回。

import datetime
import pymysql
from douban.ranke_dao import insert_message
from douban.ranke_dao import find_message
from douban.html_outputer import output_html
from bs4 import BeautifulSoup
from pip._vendor import requests
import re
 
def getHTMLText(url)
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = 'utf-8'
        return r.text
    except:
        return ""

def fillRanke(soup):#定位到一周口碑电影排行榜的div,并且获取每条数据并保存在allMovie
    data = soup.find_all('a', class_="related-pic-video")
    for td in data:
        return td['href'][33:]
     
def cha(url):
    html = getHTMLText(url)
    soup = BeautifulSoup(html, "html.parser")
    return fillRanke(soup)

修改doubanInsect.py中的main代码,添加循环调用新的py文件的代码,获取每一个预告片ID。

def main():
    for i in range(0,10):
        new_url = 'https://movie.douban.com/subject/' + allId[i]
        pianId.append(cha(new_url))

最后将预告片拼接为预告片URL用网页显示。
PYTHON爬虫爬取豆瓣电影的一周口碑电影排行榜_第4张图片

在这里插入图片描述

你可能感兴趣的:(python爬虫)