一、前言
前面利用request的方法爬取页面数据的操作,今天用另外一种方法:利用Selenium + Chrome Driver模拟用户操作浏览器,来爬取数据。
在此之前需要做一些准备工作:安装selenium库、下载谷歌浏览器、下载与谷歌浏览器版本相对应的Chrome Drive(参考chromedriver与chrome版本映射表),然后将下载好的Chrome Drive(chromedriver.exe)放入anaconda的scripts文件中。Selenium的安装:pip install selenium
3. chromedriver.exe文件移动到此pythpn的anaconda文件夹下的scripts文件夹中,路径(C:\ProgramData\Anaconda3\Scripts)
对于第3步,如果忘记anaconda的安装位置了,可以使用下面语句查看python的安装路径
import os
os.environ
二、模拟浏览器操作
1、导入库
from selenium import webdriver
from mon.by import By
from mon.keys import Keys
2、创建浏览器对象, 同时打开浏览器
browser = webdriver.Chrome() #如果打开这行浏览器就说明驱动成功了
browser.get('')不要手动点击浏览器的任何操作
browser.find_element_by_link_text("新闻").click()
browser.find_element_by_class_name('a3').click()
browser.back()
browser.forward()
kw = browser.find_element_by_id('kw')
kw.send_keys("显卡")
kw.send_keys(Keys.ENTER)
browser.find_element_by_link_text('显卡吧_百度贴吧').click()
# 窗口切换
# 获取当前所有打开窗口的句柄
browser.window_handles
# 切换窗口
browser.switch_to_window(browser.window_handles[1])
#滚动窗口
window.scrollTo(0, document.body.scrollHeight)
#关闭浏览器
browser.close()
3、获取单个节点的方法
三、使用模拟浏览器爬取豆瓣电影短评数据
第1步:导入库,进入网页
from selenium import webdriver
from mon.by import By
from mon.keys import Keys
from selenium.webdriver.chrome.options import Options
import time
import pandas as pd
login_page_url = '/passport/login?source=movie'
browser.get(login_page_url)
第2步:填入账号和密码,进行登入
browser.find_element_by_class_name('account-tab-account').click() #选择密码登入
username = browser.find_element_by_id('username') #输入账号
username.send_keys('17611313631')
password = browser.find_element_by_id('password') #输入密码
password.send_keys("a123456789")
browser.find_element_by_class_name('btn-account').click() #点击登入密码登入遇到滑动滑块的,手动滑过去就可以登入后
第3步:获取短评
empty = pd.DataFrame(columns=['短评'])
for page in range(25):
url = '/subject/{}/comments?start={}&limit=20&sort=new_score&status=P'.format(3878007, page*20)
browser.get(url)
short = browser.find_elements_by_class_name('short')
s = [i.text for i in short]
data = pd.DataFrame(s,columns=['短评'] )
empty = empty.append(data, ignore_index=True)
time.sleep(1)
四、封装成函数
1、登入函数(try error)
def login_in_douban(账号, 密码):
login_page_url = '登录豆瓣'
try:
browser.get(login_page_url)
browser.find_element_by_class_name('account-tab-account').click()
username = browser.find_element_by_id('username')
username.send_keys(账号)
password = browser.find_element_by_id('password')
password.send_keys(密码)
browser.find_element_by_class_name('btn-account').click()
except Exception as e:
print('登录错误:', e)
2、爬取网页函数
def crawl_the_page(movie_id, pages):
empty = pd.DataFrame(columns=['短评'])
for page in range(pages):
url = '/subject/{}/comments?start={}&limit=20&sort=new_score&status=P'.format(movie_id, page*20)
browser.get(url)
short = browser.find_elements_by_class_name('short')
s = [i.text for i in short]
data = pd.DataFrame(s,columns=['短评'] )
empty = empty.append(data, ignore_index=True)
time.sleep(0.5)
return empty
五、爬虫进阶