Python+selenium实现自动爬取实例

1.简介

  Selenium 是一个用于Web应用程序测试的工具。它直接运行在浏览器中,模拟用户操作,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。
  简单来说,它就是一个支持各种浏览器及多种编程语言的强大自动化测试工具。

2.Selenium的用处

  通过简介我们知道,自动化测试是它最大的用处。而在python中,我们能用它干嘛呢?注意简介里提到的一条关键信息——“模拟用户操作”!看到这里,我想很多道友已经猜到它的用处了。没错,我们就用它来模拟用户操作,比如:自动填写信息、自动抓取数据、自动登陆等等。

3.使用前的准备(以谷歌浏览器为例)

3.1安装selenium (pip install selenium)
3.2下载谷歌浏览器
3.3下载谷歌浏览器驱动
注意:
1)浏览器与浏览器驱动最好放于一个文件夹下
这里写图片描述
2)将chrome.exe所在路径加入系统的环境变量中
这里写图片描述
这里写图片描述

4.自动化爬取实例

应用背景:豆瓣电影的搜索框中自动填入电影名,之后自动获取电影的评价人数,最后将信息写入csv文件。
4.1 代码展示

# coding:utf-8
import sys
import os
from  selenium import webdriver
from bs4 import BeautifulSoup as bs
import xlrd
import csv
os.chdir(r'C:\Users\Administrator\Desktop')
sys.setrecursionlimit(9000)  # 设置最大递归深度为9000


# 自动获取电影的评论数
# para:电影名
def getRemark(movie_name):
    option = webdriver.ChromeOptions()
    option.add_argument('head')#“有头”模式,即可以看到浏览器界面,若要隐藏浏览器,可设置为 "headless"
    dr = webdriver.Chrome(chrome_options = option)#得到操作对象
    dr.get('https://movie.douban.com/')#打开豆瓣电影
    dr.find_element_by_id('inp-query').send_keys(movie_name)#找到输入框并填写电影名
    dr.find_element_by_class_name('inp-btn').click()#找到搜索按钮并点击
    try:
        dr.find_element_by_partial_link_text(movie_name).click()#找到包含电影名的最近链接并点击,打开电影具体信息页面
        soup = bs(dr.page_source, 'lxml')#page_source得到当前网页的源代码
        dr.quit()#关闭浏览器
        return soup.select_one('.rating_sum').text
    except:
        return 'null'


# 将信息写入csv文件
def write(name):
    count = getRemark(name)
    print(name, count)
    with open('remark.csv', 'a+', newline = '\n')as f:
        w = csv.writer(f)
        w.writerow([name, count])


if __name__ == '__main__':
    names = ['战狼2', '红海行动']#电影名列表
    print('----------------------开始自动化测试------------------------')
    for n in names:
        write(n)
    print('--------------------测试完成-----------------------------------------')

4.2结果展示
这里写图片描述
这里写图片描述

5.总结

  Selenium的好处十分明显,可以代替手工完成一系列操作。但缺点同样显著,那就是十分耗时,所以在使用时要根据具体情况进行考虑

猜你喜欢

转载自blog.csdn.net/Dick633/article/details/80775161