这几天在学习selenium,顺便用selenium + python写了一个比较简陋的爬虫,现附上源码,有时间再补充补充:

 from selenium import webdriver
 from selenium.webdriver.support.wait import WebDriverWait
 from selenium.webdriver.support import expected_conditions as EC
 from selenium.webdriver.common.by import By
 import os

 class DouBan_Movies:

     def __init__(self):
         #初始化chromedriver
         self.driver = webdriver.Chrome()
         #调用函数进入豆瓣电影top250官网
         self.__enter_douban()
         #在当前目录下建一个文本文件用来写入电影信息
         self.fs = open(os.getcwd() + r"\douban_top250.txt", "w+", encoding="utf-8")

     def __enter_douban(self):
         #打开百度首页
         self.driver.get("http://www.baidu.com")
         #窗口最大化
         self.driver.maximize_window()
         #百度首页输入框的元素表达式
         input_id = "kw"
         #设置显性等待,等待百度首页输出框的出现
         WebDriverWait(self.driver, 3, 0.3).until(EC.visibility_of_element_located((By.ID, input_id)))
         #定位百度输入框并输入豆瓣电影Top250
         self.driver.find_element_by_id(input_id).send_keys("豆瓣电影Top250")
         #定位百度一下按钮并点击
         self.driver.find_element_by_id("su").click()
         #第一条搜索结果的元素表达式
         top250_css = "div[id='1'] h3 a"
         #设置显性等待,等待第一条搜索结果的出现
         WebDriverWait(self.driver, 5, 0.3).until(EC.visibility_of_element_located((By.CSS_SELECTOR, top250_css)))
         #获得当前浏览器的所有窗口句柄
         windows = self.driver.window_handles
         #定位到第一条搜索结果并点击
         self.driver.find_element_by_css_selector(top250_css).click()
         #设置显性等待,等待新窗口的出现
         WebDriverWait(self.driver, 10, 0.3).until(EC.new_window_is_opened(windows))
         #获得当前浏览器的所有窗口句柄
         windows = self.driver.window_handles
         #切换到新的窗口
         self.driver.switch_to.window(windows[-1])

     def __get_datas(self):
         if self.page_num == 1:
             #得到标题
             title = self.driver.find_element_by_xpath("//div[@id='content']//h1").text
             #打印标题
             print(title)
             self.fs.write(title + "\r\n")
         #获得当前页面电影信息的元素对象的列表,总共有25条
         movies_list = self.driver.find_elements_by_xpath("//ol//li")
         for element in movies_list:
             print(element.text + "\n")
             self.fs.write(element.text + "\r\n")

     def get_all_pages(self):
         self.page_num = 1
         while self.page_num < 26:
             self.__get_datas()
             print("-------------第{0}页-----------\n".format(self.page_num))
             self.fs.write("-------------第{0}页-----------\n".format(self.page_num))
             self.page_num += 1
         #关闭文件
         self.fs.close()

 douban_movies = DouBan_Movies()
 douban_movies.get_all_pages()

控制台输出

保存到文件

利用selenium爬取豆瓣电影Top250的更多相关文章

  1. scrapy框架 + selenium 爬取豆瓣电影top250......

    废话不说,直接上代码..... 目录结构 items.py import scrapy class DoubanCrawlerItem(scrapy.Item): # 电影名称 movieName = ...

  2. urllib+BeautifulSoup无登录模式爬取豆瓣电影Top250

    对于简单的爬虫任务,尤其对于初学者,urllib+BeautifulSoup足以满足大部分的任务. 1.urllib是Python3自带的库,不需要安装,但是BeautifulSoup却是需要安装的. ...

  3. python2.7爬取豆瓣电影top250并写入到TXT,Excel,MySQL数据库

    python2.7爬取豆瓣电影top250并分别写入到TXT,Excel,MySQL数据库 1.任务 爬取豆瓣电影top250 以txt文件保存 以Excel文档保存 将数据录入数据库 2.分析 电影 ...

  4. scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250

    scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...

  5. scrapy爬取豆瓣电影top250

    # -*- coding: utf-8 -*- # scrapy爬取豆瓣电影top250 import scrapy from douban.items import DoubanItem class ...

  6. 一起学爬虫——通过爬取豆瓣电影top250学习requests库的使用

    学习一门技术最快的方式是做项目,在做项目的过程中对相关的技术查漏补缺. 本文通过爬取豆瓣top250电影学习python requests的使用. 1.准备工作 在pycharm中安装request库 ...

  7. python 爬虫&爬取豆瓣电影top250

    爬取豆瓣电影top250from urllib.request import * #导入所有的request,urllib相当于一个文件夹,用到它里面的方法requestfrom lxml impor ...

  8. 【转】爬取豆瓣电影top250提取电影分类进行数据分析

    一.爬取网页,获取需要内容 我们今天要爬取的是豆瓣电影top250页面如下所示: 我们需要的是里面的电影分类,通过查看源代码观察可以分析出我们需要的东西.直接进入主题吧! 知道我们需要的内容在哪里了, ...

  9. Scrapy中用xpath/css爬取豆瓣电影Top250:解决403HTTP status code is not handled or not allowed

    好吧,我又开始折腾豆瓣电影top250了,只是想试试各种方法,看看哪一种的方法效率是最好的,一直进行到这一步才知道 scrapy的强大,尤其是和selector结合之后,速度飞起.... 下面我就采用 ...

随机推荐

  1. python并发编程&协程

    0x01 前导 如何基于单线程来实现并发? 即只用一个主线程(可利用的cpu只有一个)情况下实现并发: 并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操 ...

  2. python并发编程&多进程(二)

    前导理论知识见:python并发编程&多进程(一) 一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_cou ...

  3. idea中maven 加载spring-boot项目程序包找不到解决…

    首先检查maven配置对不对,包括被settings文件以及资源库的位置,maven版本等. 如果不行的话再进行下面的操作: 第一种方案: 在终端terminal中项目目录下,输入“mvn idea: ...

  4. 安卓3d引擎

    很 多初学Android游戏开发 href="http://edu.gamfe.com/gamedev.html">游戏开发的朋友,往往会显得有些无所适从.他们经常不知道该从 ...

  5. 视频解码芯片SAA7111A的初始化

    为了完成SAA7111A的初始化,FPGA需要完成I2C控制器的设计. 之前本科的时候初步接触过I2C,但是编写一个Verilog的控制器还是觉得有点难度的.说实话,那时候都无从下手,对实现这样一个协 ...

  6. EasyMock 常见异常

    1. java.lang.IllegalStateException: calling verify is not allowed in record state 含义:不允许在记录状态(record ...

  7. Easyui 遮罩实现方式

    项目中在提交Ajax请求时,后台处理数据时间有点长,需要一个遮罩,就随便找了一个实现一下:包含两种方式,个人比较喜欢第二种 第一种: $("#saveMaterial").clic ...

  8. Spring session共享(使用redis)

    SpringBoot+Redis实现HttpSession共享 前提:需要使用redis做session存储 一.效果演练(这里使用SpringBoot工程,Spring同理) 1.一个工程使用两个端 ...

  9. 大数据架构之:Spark

    Spark是UC Berkeley AMP 实验室基于map reduce算法实现的分布式计算框架,输出和结果保存在内存中,不需要频繁读写HDFS,数据处理效率更高Spark适用于近线或准实时.数据挖 ...

  10. VCS 常用命令速查

      VCS是编译型Verilog模拟器,它完全支持OVI标准的Verilog HDL语言.PLI和SDF.VCS具有目前行业中最高的模拟性能,其出色的内存管理能力足以支持千万门级的ASIC设计,而其模 ...