利用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()

控制台输出

保存到文件

猜你喜欢

转载自www.cnblogs.com/cnhkzyy/p/9249198.html