利用selenium爬取豆瓣电影Top250
这几天在学习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的更多相关文章
- scrapy框架 + selenium 爬取豆瓣电影top250......
废话不说,直接上代码..... 目录结构 items.py import scrapy class DoubanCrawlerItem(scrapy.Item): # 电影名称 movieName = ...
- urllib+BeautifulSoup无登录模式爬取豆瓣电影Top250
对于简单的爬虫任务,尤其对于初学者,urllib+BeautifulSoup足以满足大部分的任务. 1.urllib是Python3自带的库,不需要安装,但是BeautifulSoup却是需要安装的. ...
- python2.7爬取豆瓣电影top250并写入到TXT,Excel,MySQL数据库
python2.7爬取豆瓣电影top250并分别写入到TXT,Excel,MySQL数据库 1.任务 爬取豆瓣电影top250 以txt文件保存 以Excel文档保存 将数据录入数据库 2.分析 电影 ...
- scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250
scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...
- scrapy爬取豆瓣电影top250
# -*- coding: utf-8 -*- # scrapy爬取豆瓣电影top250 import scrapy from douban.items import DoubanItem class ...
- 一起学爬虫——通过爬取豆瓣电影top250学习requests库的使用
学习一门技术最快的方式是做项目,在做项目的过程中对相关的技术查漏补缺. 本文通过爬取豆瓣top250电影学习python requests的使用. 1.准备工作 在pycharm中安装request库 ...
- python 爬虫&爬取豆瓣电影top250
爬取豆瓣电影top250from urllib.request import * #导入所有的request,urllib相当于一个文件夹,用到它里面的方法requestfrom lxml impor ...
- 【转】爬取豆瓣电影top250提取电影分类进行数据分析
一.爬取网页,获取需要内容 我们今天要爬取的是豆瓣电影top250页面如下所示: 我们需要的是里面的电影分类,通过查看源代码观察可以分析出我们需要的东西.直接进入主题吧! 知道我们需要的内容在哪里了, ...
- Scrapy中用xpath/css爬取豆瓣电影Top250:解决403HTTP status code is not handled or not allowed
好吧,我又开始折腾豆瓣电影top250了,只是想试试各种方法,看看哪一种的方法效率是最好的,一直进行到这一步才知道 scrapy的强大,尤其是和selector结合之后,速度飞起.... 下面我就采用 ...
随机推荐
- golang 如何使用模版?
package main import ( "fmt" "net/http" "log" "html/template" ...
- 检测当前的语言环境是否使用了 UTF-8 编码(三篇文章:先用setlocale()设置编码,再用nl_langinfo()进行检测。locale对象可以使用langLocale.name() == "zh_CN"判断)
C/C++程序中,locale(即系统区域设置,即国家或地区设置)将决定程序所使用的当前语言编码.日期格式.数字格式及其它与区域有关的设置,locale设置的正确与否将影响到程序中字符串处理(wcha ...
- Django的admin样式丢失【静态文件收集】
在部署完Django项目后,进行admin后台登录发现样式丢失,后台日志显示:js和css文件丢失 解决办法: 配置settings.py如下: #DEBUG打开时,app的静态文件默认从这里读取 S ...
- python并发编程&多线程(二)
前导理论知识见:python并发编程&多线程(一) 一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 官网链 ...
- 关于android编程中service和activity的区别
一. 绝大部分情况下,Service的作用是用来“执行”后台的.耗时的.重要的任务,三者缺一不可,而最重要的原因是第三点:要执行重要的任务. 因为当一个进程启动了Service后,进程的优先级变高了, ...
- Admin添加字段
后台扩展用户信息,注意要到settings里面进行设定,有关联和继承两种方式 首先的关联表可以关联到user表但,主键在user表当中,所以没法直接在user表当中看到相关信息,要是通过继承扩展的话, ...
- python3 multiprocessing 模块
多进程 Multiprocessing 模块 multiprocessing 模块官方说明文档 Process 类 Process 类用来描述一个进程对象.创建子进程的时候,只需要传入一个执行函数和函 ...
- 妙用php中的register_shutdown_function和fastcgi_finish_request
前言 在php中又两个方法都是在请求快结束的时候执行.方法名分别是 register_shutdown_function和fastcgi_finish_request.虽然执行的时机差不多,但是功能和 ...
- springboot-vue项目前台1
- CSS实现三角形图标的原理!!!!今天总算弄懂了。
网页中经常有一种三角形的图标,鼠标点一下会弹出一个下拉菜单之类的(之前淘宝也有,不过现在改版好像没有了) 之前以为是个png图标背景,后来在bootstrap中看到有一个图标样式叫做caret的用来实 ...