Python案例:schedule+selenium爬取豆瓣电影

来自CloudWiki
跳转至: 导航搜索

爬取百度

import schedule
import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager

def get_baidu(key_word):
    browser = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
    browser.get(r'https://www.baidu.com')  
    search = browser.find_element_by_id('kw')
    search.send_keys(key_word)
    search.send_keys(Keys.ENTER)

schedule.every(1).minutes.do(get_baidu,"济南")    # 每隔十分钟执行一次任务

 
while True:
    schedule.run_pending()  # run_pending:运行所有可以运行的任务

爬取豆瓣

import schedule
import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager

def get_baidu(key_word):
    browser = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
    browser.get(r'https://www.baidu.com')  
    search = browser.find_element_by_id('kw')
    search.send_keys(key_word)
    search.send_keys(Keys.ENTER)

# 关闭浏览器
#browser.close()

def get_movies():
    driver = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")

    for page in range(0,3): 
    #这里只爬了前3个页面,要怕爬10个的话把3改成10就可以了
        url = 'https://movie.douban.com/top250?start='+str(page*25)    
        driver.get(url)
        conts = driver.find_elements_by_xpath('//div[@class="item"]') #conts包含了一个页面中25电影的信息(len(conts)=25)
        for i in range(2):
        #这里只爬取了每个页面的前两部电影,要爬该页面的所有电影,把2改成25就可以
            rank=conts[i].find_element_by_tag_name('em').text 
            print(rank) #拿到排名
            movie_name = conts[i].find_element_by_class_name('title').text
            print(movie_name)  #拿到电影名字
            score = conts[i].find_element_by_xpath('.//div[@class="star"]/span[2]').text
            print(score) #拿到评分
            judge_counts = conts[i].find_element_by_xpath('.//div[@class="star"]/span[4]').text[:-3]
            print(judge_counts) #拿到参评人数
            link = conts[i].find_element_by_xpath('.//div[1]/a').get_attribute('href')
            print(link) #拿到电影链接
            inq = conts[i].find_element_by_class_name('inq').text
            print(inq) #拿到一句话简介
            crew = conts[i].find_element_by_xpath('.//div[@class="bd"]/p[1]').text.split('...')[0] #拿到演职员信息
            more_info = conts[i].find_element_by_xpath('.//div[@class="bd"]/p[1]').text.split('...')[-1].strip() #拿到影片的其他相关信息
            print(crew)
            print(more_info)
            print('*'*20)

    driver.close() #这里一定要关闭
    



schedule.every(3).minutes.do(get_movies)    # 每隔十分钟执行一次任务

 
while True:
    schedule.run_pending()  # run_pending:运行所有可以运行的任务