爬虫10:selenium phantomjs/Chrome

爬虫•目录 爬虫•类别


selenium phantomjs/Chrome

selenium

web自动测试化工具

Anaconda Prompt >>>conda install selenium

phantomjs

无界面浏览器

把网站在内存进行页面加载

chromedrive

https://chromedriver.storage.googleapis.com/index.html

selenium使用

from selenium import webdriver

from selenium import webdriver

# 创建phantom.js浏览器对象
driver =  webdriver.PhantomJS()

# 用get发送请求
driver.get('http://www.baidu.com/')

# 获取响应内容
print(driver.page_source)

# 获取屏幕截图
driver.save_screenshot('百度.png')

# 关闭浏览器
driver.quit()

常用方法

driver.get(url) 发送请求
driver.page_source 获取响应的html
driver.page_source.find(‘字符串’) 从html源码中搜索指定的字符串(返回-1表示未找到内容)
节点对象.send_keys(‘内容’) 发送到搜索框
节点对象.click() 模拟点击
driver.quit() 退出浏览器
driver.execute_script(‘window.scrollTo(0,document.body.scrollHeight)’) 把下拉菜单拉到最底部
  • 单元素查找
    driver.find_element_by_id(‘’)
    driver.find_element_by_name(‘’)
    driver.find_element_by_class_name(‘’)
    driver.find_element_by_xpath('')

  • 多元素查找
    driver.find_elements_by_id(‘’)
    driver.find_elements_by_name(‘’)
    driver.find_elements_by_class_name(‘’)
    driver.find_elements_by_xpath('')

    返回节点对象的列表

from selenium import webdriver
import time

# 创建phantom.js浏览器对象
driver =  webdriver.PhantomJS()

# 打开百度
driver.get('http://www.baidu.com/')

# 接受终端输入内容发送到搜索框
key = input('search >>>')
kw = driver.find_element_by_id('kw')
kw.send_keys(key)

# 点击百度一下
su = driver.find_element_by_id('su')
su.click()
time.sleep(1)

# 获取屏幕截图
driver.save_screenshot('百度.png')

# 关闭浏览器
driver.quit()

chromedriver设置无界面模式

opt = webdriver.ChromeOptins()
opt.set_headless()
driver = webdriver.Chrome(options=opt)

例子-京东商品信息

from selenium import webdriver
import time
import csv

# 创建浏览器对象
driver = webdriver.Chrome()
# 向京东首页发请求
driver.get('https://www.jd.com/')
# 发送文字到搜索框
key = input('请输入商品:')
driver.find_element_by_class_name('text').send_keys(key)
# 点击搜索按钮
driver.find_element_by_class_name('button').click()
time.sleep(2)
n = 1
# while True:
for i in range(3):
    # 执行JS脚本,进度条拉到最下面
    driver.execute_script(
        'window.scrollTo(0,document.body.scrollHeight)'
    )
    # 给页面加载留出时间
    time.sleep(3)
    # 基准xpath,每个商品的节点对象列表
    rList = driver.find_elements_by_xpath('//div[@id="J_goodsList"]/ul/li')
    for r in rList:
        info = r.text.split('\n')
        # ¥52.80
        # Python编程从入门到实践python3.0绝技核心编程基础教程网络爬虫入门书籍
        # 500 + 条评价
        # 润知天下图书专营店
        price = info[0]
        if info[1] != '拍拍':
            name = info[1]
            commit = info[2]
            market = info[3]
        else:
            name = info[2]
            commit = info[3]
            market = info[4]
        L = [price, commit, market, name]
        # 存入csv文件
        with open('京东.csv','a',newline='',encoding='gb18030') as f:
            writer = csv.writer(f)
            writer.writerow(L)
    print('第%d页爬取成功' % n)
    n += 1
    # 点击下一页
    if driver.page_source.find('pn-next disabled') == -1:
        driver.find_element_by_class_name('pn-next').click()
        time.sleep(2)
    else:
        break

博主个人能力有限,错误在所难免.
如发现错误请不要吝啬,发邮件给博主更正内容,在此提前鸣谢.
Email: JentChang@163.com (来信请注明文章标题,如果附带链接就更方便了)
你也可以在下方的留言板留下你宝贵的意见.


上一篇
爬虫11:多线程爬取 爬虫11:多线程爬取
爬虫•目录 爬虫•类别 多线程爬取 队列 from multiprocessing import Queue put() get() (get_nowait() => get(False)) 线程创建from thred
2019-01-22
下一篇
爬虫09:动态加载网站数据抓取 爬虫09:动态加载网站数据抓取
爬虫•目录 爬虫•类别 动态加载网站数据抓取 滚动鼠标滑轮时加载的内容抓取浏览器F12 Network->QueryStringParameters 豆瓣电影的抓取import requests import pymysql i
2019-01-22
目录