• 利用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 + "
    ")
    52         #获得当前页面电影信息的元素对象的列表,总共有25条
    53         movies_list = self.driver.find_elements_by_xpath("//ol//li")
    54         for element in movies_list:
    55             print(element.text + "
    ")
    56             self.fs.write(element.text + "
    ")
    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}页-----------
    ".format(self.page_num))
    63             self.fs.write("-------------第{0}页-----------
    ".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()

    控制台输出

    保存到文件

  • 相关阅读:
    Exception handling 异常处理的本质
    一个人运气不好怎么办?做什么事能够马上改变运气?
    autoreleasing on a thread
    Tagged Pointer
    Objective-C 引用计数原理
    oc引用计数原理-引用计数相关变化
    黑箱中的 retain 和 release
    黑幕背后的Autorelease
    自动释放池的前世今生 ---- 深入解析 autoreleasepool
    Exceptions and Errors on iOS
  • 原文地址:https://www.cnblogs.com/my_captain/p/9249198.html
Copyright © 2020-2023  润新知