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

控制台输出

保存到文件

 


__EOF__

本文作者cnhkzyy
本文链接https://www.cnblogs.com/my_captain/p/9249198.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   cnhkzyy  阅读(1573)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示