python控制谷歌浏览器爬取百度公测平台标题

python控制谷歌浏览器

有时候我们会需要登录网站爬取信息,现在的验证码比较复杂,为了实现爬取,咱就想到一个方法,可以通过py打开浏览器方式,手动登录后在进行爬取,省略了登录的复杂程度,下面开始详细说一下过程,以谷歌Chrome为例:

Chrome首先要安装驱动

访问网址:http://chromedriver.storage.googleapis.com/index.html 以获得对应版本、系统的驱动并下载,并分别放置到Chrome的安装目录,python的安装目录。

直接上码

打开浏览器并访问目标网址

import re
import requests # 使用网络模块
import base64
from bs4 import BeautifulSoup  # 网页拆分,需要使用pip指令安装
import time # 导入时间模块,延时器使用
from splinter import Browser    # 操作浏览器模块,需要pip安装
# from fontTools.ttLib import TTFont, BytesIO
# 注意:py有着严格的缩进管理
    #win下安装建议使用网址:www.continuum.io/downloads/ 此版本编译器与Linux一致,错误率低
    #安装常用套件:使用命令 pip install 
    #requests(网络模块)  BeautifulSoup4 jupyter(网页运行器)




url = 'http://test.baidu.com/crowdtest/communityAcademy/detail?id='
# a.启动浏览器访问主链接
browser = Browser('chrome')
browser.visit('http://test.baidu.com/')
# b.等待手动登录倒计时
# print('请输入预计登录需要的操作时间,单位秒(s):')
# login_time = input()
# for idx in range(int(login_time), -1, -1):
#     time_str = '等待手动登录中,还有:' + str(idx) + '秒……'
#     print(time_str, end = "")
#     print("\b" * (len(time_str)*2), end = "", flush = True)
#     time.sleep(1)
# print('登录完成,开始获取数据……')
# 比较麻烦,直接换成判断
# c.等待登录判断
print('在手动登录完成后,请键入“y”并回车')
login_yn = input()
if login_yn == 'y':
    print('请输入预计页数,注意,不要超出所提取页:')
    page_no = input()
    print('请输入保存文件名:')
    save_file_name = input()
    print('开始检索……,请稍后')
    # 初始化导出数组
    export_file_arr = []
    for idx in range(int(page_no)):
        time.sleep(3) # 每次刷新网页都需要休息3秒
        curr_url = url + str(idx + 2)
        # 操作浏览器打开当前循环的URL
        browser.visit(curr_url)
        # 在dom元素上右键即可获得xpath
        curr_title = browser.find_by_xpath('//*[@id="ng-app"]/body/div[2]/div/div[2]/div/div/div[2]').first.value
        print_str = '正在执行检索,全部:' + page_no + '页,当前:' + str(idx) + '页,标题内容:' + curr_title
        # 统计数字清空
        print(print_str, end = "")
        print("\b" * (len(print_str)*2), end = "", flush = True)
        export_file_arr.append(str(idx) + ':' + curr_title + '【' + curr_url + '】' + '\n')    # 追加当前标题到数组
    
    # d.执行导出
    print('检索完成,是否保存检出记录到txt文本?y / n')
    export_yn = input()
    if export_yn == 'y':
        # 开始导出操作
        print('开始尝试导出数据到:' + save_file_name)
        with open("./" + save_file_name + ".txt", 'a', encoding='utf-8') as f:
            row = len(export_file_arr)   # 数组长度
            out_txt = ''
            for idx in range(row):
                out_txt += str(idx) + ':' + export_file_arr[idx] + '\n'
            f.write(out_txt)
            print('导出成功!!文件名为:' + save_file_name)
            exit()  # 退出

tip:这个栗子是访问百度的众测平台,进行爬取每一页的说明标题和当前页面URL并保存在txt中,虽然有些小bug,不过咱是用着足够了。
说下原理:使用py打开Chrome浏览器,然后手动登录(避免爬虫伪造浏览器的复杂程度),登录之后,命令行输入y,程序定向到网页并开始不断循环控制刷新浏览器页面定向,之后从页面上找到对应信息保存到array中;最后保存循环这个数组就行了。

你可能感兴趣的:(python,Chrome)