使用selenium做简单爬虫的实例

本文介绍如何利用Selenium库自动化爬取Google APP Store中的应用信息,包括登录验证、页面加载、应用数量统计及应用详情抓取。

selenium 是一个Web自动化测试的软件包,可以用于自动测试Web应用,也可以用于当作简单的爬虫制作工具,

这是一个简单的demo,用于爬取Google APP Store中的一个类别:

 

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from time import sleep
import sqlite3
import sys

# connect the sqlite3 

def Conn_DB(db_name = 'app_info.db'):
  try:
    conn = sqlite3.connect(db_name)
  except Exception, e:
    print "Conn Error ", e
  return conn

# get the category of the apps

def Get_Category(root_address):
  url_list = root_address.split('/')
  return url_list[-1].replace("?",' ').split(' ')[0]

# we have to login so that to get the info from every app

def Login_Google(browser, category_root_address):
  
  browser.get(category_root_address)

  # click to login
  login_link = browser.find_element_by_id('gb_70')
  webdriver.ActionChains(browser).move_to_element(login_link).click(login_link).perform()

  # input your email here
  email = browser.find_element_by_name('Email')
  # you should input your email here
  email.send_keys('') 

  # input your password here
  pwd = browser.find_element_by_name('Passwd')
  # you should input your password for your email here
  pwd.send_keys('')
  pwd.send_keys(Keys.RETURN)

  print 'Login Success'


# load the whole page and then return the number of the apps under the category

def Load_All_Apps(browser):

  # try to load the whole page to select want I want, the magic number 13 is based on the test
  
  for times in xrange(13):
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    sleep(2.5)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight * 0.5);")
    sleep(2.5)
    print times

    # click the show more button to load more apps
    show_more_button = browser.execute_script("return document.querySelector('#show-more-button')['style']['cssText'];")
    if show_more_button != 'display: none;':
      browser.execute_script("document.querySelector('#show-more-button').click();")
      print 'click button'
    print show_more_button

  # to the bottom of the page
  browser.execute_script("window.scrollTo(0, 0);")

  number = browser.execute_script("return document.querySelectorAll('button.price').length;")
  print number
  
  return number

def Click_Install_Button(browser, category_root_address):
  get_permissions_code = """var permissions = document.querySelectorAll('.perm-description');
var precise_locaton = 'precise location (GPS and network-based)';
var approximate_location = 'approximate location (network-based)';
var ways = '';

for (var perm in permissions) {
	if (permissions[perm].innerHTML == precise_locaton) {
		ways += 'p';
	} else if (permissions[perm].innerHTML == approximate_location) {
		ways += 'a';
	}
}
return ways;"""

  # get all install button objects
  get_button_list_code = """return document.querySelectorAll('button.price');"""
  button_list = browser.execute_script(get_button_list_code)
  # print dir(button_list[0])
  # button_list.reverse()

  numbers_of_button = len(button_list)

  count = 0
  # index = 1
  sleep(3)

  #webdriver.ActionChains(browser).move_to_element(button_list[1]).click(button_list[1]).perform()
  #sleep(1)
  #browser.execute_script("document.querySelector('#purchase-cancel-button').click();")
  #webdriver.ActionChains(browser).move_to_element(button_list[3]).click(button_list[3]).perform()
  #sleep(1)
  #browser.execute_script("document.querySelector('#purchase-cancel-button').click();")
  
  category = Get_Category(category_root_address)

  get_app_address_code = """var app_address_list = document.querySelectorAll("h2 a");var list = [];
for (var i = 0; i < app_address_list.length; i++) {list.push(app_address_list[i]['href']);} return list;"""
  address_list = browser.execute_script(get_app_address_code)

  conndb = Conn_DB()
  db_cursor = conndb.cursor()

  number_of_i_want = 0

  insert_sql = u"""insert into app_info (categroy, name, link, get_geo_ways) values ('{0}', '{1}', '{2}', '{3}')"""

  for index in range(1, numbers_of_button, 2):
    try:
      webdriver.ActionChains(browser).move_to_element(button_list[index]).click(button_list[index]).perform()
      sleep(3.5)
      count += 1
      #index += 2
    except IndexError:
      print "Out of index"
      break
    
    try:
      print "Count ", count
      perms = browser.execute_script(get_permissions_code)
      sleep(2)
      appname = browser.execute_script("return document.querySelector('.purchase-header .title').innerHTML;")
      print u"App id is: ", appname , u"Perm is: ", perms, u"Address is: ", address_list[count - 1]
      
      if perms:
        sql_with_data = insert_sql.format(category, appname, address_list[count - 1], perms)
        db_cursor.execute(sql_with_data)
        conndb.commit()
        number_of_i_want += 1
        
    except Exception, e:
      print "Error for ", e, "Number is ", count, "Pers is", perms
      continue
    # click cancle button
    browser.execute_script("document.querySelector('#purchase-cancel-button').click();")
    sleep(1)

  print "compary ", count , numbers_of_button, "I want :", number_of_i_want
  db_cursor.close()
  conndb.close()
  # print browser.execute_script()

if __name__ == '__main__':
  root_address = 'https://play.google.com/store/apps/category/TRAVEL_AND_LOCAL?hl=en'
  
  driver = webdriver.Chrome()
  Login_Google(driver, root_address)
  Load_All_Apps(driver)
  Click_Install_Button(driver, root_address)

  #sys.exit()

  fd = file("./res.txt", "wb")
  fd.write("over")
  fd.close()

  

转载于:https://www.cnblogs.com/jaw-crusher/p/3669387.html

### 使用 Selenium 在 Edge 浏览器中实现网页自动化与数据抓取 为了在 Microsoft Edge 浏览器中利用 Selenium 实现网页自动化和数据抓取,需先完成必要的环境配置工作[^1]。 #### 安装依赖包 首先,在 Python 环境中安装 `selenium` 库。可以通过运行如下命令来安装该库: ```bash pip install selenium ``` 接着,由于 WebDriver 需要特定于浏览器驱动的支持文件,对于 Edge 来说,则需要下载并安装适用于当前版本 Edge 的 WebDriver——Microsoft Edge Driver。可以从微软官方渠道获取对应版本的 EdgeDriver,并将其路径加入系统的 PATH 环境变量以便调用[^2]。 #### 初始化 Edge 浏览器实例 创建一个新的 Edge 浏览器会话之前,应该指定一些选项来自定义启动参数,例如无头模式(headless mode),即不显示实际窗口的情况下运行浏览器;禁用扩展插件等。下面是一段简单的代码片段展示如何初始化 Edge 浏览器对象: ```python from selenium import webdriver from selenium.webdriver.edge.service import Service as EdgeService from selenium.webdriver.edge.options import Options as EdgeOptions edge_options = EdgeOptions() # 设置为无界面模式 (可选) edge_options.add_argument('--headless') service = EdgeService(executable_path='path/to/msedgedriver') # 替换成 msedgedriver 执行文件的实际位置 driver = webdriver.Edge(service=service, options=edge_options) ``` 这段代码设置了 Edge 浏览器的一些基本属性,并指定了 EdgeDriver 的路径。如果已经把 EdgeDriver 添加到了系统的 PATH 中,则可以直接省略 `executable_path` 参数[^4]。 #### 访问目标页面并提取所需信息 一旦成功建立了连接到远程服务器上的 Edge 浏览器进程之后,就可以像平常一样导航至任何 URL 地址,并执行各种 DOM 操作以收集感兴趣的信息了。这里给出一个简单例子说明怎样访问某个网站并将页面标题打印出来: ```python url = 'https://example.com' driver.get(url) title = driver.title print(f'Page title is {title}') ``` 以上就是使用 Selenium 结合 Edge 浏览器来进行基础级别的网页爬虫开发的方法概述。需要注意的是,当处理更复杂的场景时,可能还需要考虑更多因素,比如等待时间管理、异常情况处理以及反爬机制规避等问题[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值