利用selenium爬取豆瓣电影Top250
这几天在学习selenium,顺便用selenium + python写了一个比较简陋的爬虫,现附上源码,有时间再补充补充:
1 from selenium import webdriver 2 from selenium.webdriver.support.wait import WebDriverWait 3 from selenium.webdriver.support import expected_conditions as EC 4 from selenium.webdriver.common.by import By 5 import os 6 7 class DouBan_Movies: 8 9 def __init__(self): 10 #初始化chromedriver 11 self.driver = webdriver.Chrome() 12 #调用函数进入豆瓣电影top250官网 13 self.__enter_douban() 14 #在当前目录下建一个文本文件用来写入电影信息 15 self.fs = open(os.getcwd() + r"\douban_top250.txt", "w+", encoding="utf-8") 16 17 def __enter_douban(self): 18 #打开百度首页 19 self.driver.get("http://www.baidu.com") 20 #窗口最大化 21 self.driver.maximize_window() 22 #百度首页输入框的元素表达式 23 input_id = "kw" 24 #设置显性等待,等待百度首页输出框的出现 25 WebDriverWait(self.driver, 3, 0.3).until(EC.visibility_of_element_located((By.ID, input_id))) 26 #定位百度输入框并输入豆瓣电影Top250 27 self.driver.find_element_by_id(input_id).send_keys("豆瓣电影Top250") 28 #定位百度一下按钮并点击 29 self.driver.find_element_by_id("su").click() 30 #第一条搜索结果的元素表达式 31 top250_css = "div[id='1'] h3 a" 32 #设置显性等待,等待第一条搜索结果的出现 33 WebDriverWait(self.driver, 5, 0.3).until(EC.visibility_of_element_located((By.CSS_SELECTOR, top250_css))) 34 #获得当前浏览器的所有窗口句柄 35 windows = self.driver.window_handles 36 #定位到第一条搜索结果并点击 37 self.driver.find_element_by_css_selector(top250_css).click() 38 #设置显性等待,等待新窗口的出现 39 WebDriverWait(self.driver, 10, 0.3).until(EC.new_window_is_opened(windows)) 40 #获得当前浏览器的所有窗口句柄 41 windows = self.driver.window_handles 42 #切换到新的窗口 43 self.driver.switch_to.window(windows[-1]) 44 45 def __get_datas(self): 46 if self.page_num == 1: 47 #得到标题 48 title = self.driver.find_element_by_xpath("//div[@id='content']//h1").text 49 #打印标题 50 print(title) 51 self.fs.write(title + "\r\n") 52 #获得当前页面电影信息的元素对象的列表,总共有25条 53 movies_list = self.driver.find_elements_by_xpath("//ol//li") 54 for element in movies_list: 55 print(element.text + "\n") 56 self.fs.write(element.text + "\r\n") 57 58 def get_all_pages(self): 59 self.page_num = 1 60 while self.page_num < 26: 61 self.__get_datas() 62 print("-------------第{0}页-----------\n".format(self.page_num)) 63 self.fs.write("-------------第{0}页-----------\n".format(self.page_num)) 64 self.page_num += 1 65 #关闭文件 66 self.fs.close() 67 68 douban_movies = DouBan_Movies() 69 douban_movies.get_all_pages()
控制台输出
保存到文件