首页 > 其他分享 >爬虫随笔(一)

爬虫随笔(一)

时间:2023-09-18 19:11:06浏览次数:34  
标签:text driver 爬虫 element content 随笔 find out

最近因为工作和研究方向的变动,开始学习爬虫,现在是刚刚入门,简单写一些,爬虫入门的建议。

一、基础知识

(1)掌握的编程语言:python、Html、JS、CSS

Python是必须的,虽然Java也可以实现相关功能,但是总归脚本写起来方便一点。如果有语言基础,直接去菜鸟教程,看语法,就差不多掌握了。

Html、JS、CSS,这个三件套也是需要具备的。

(2)工具

我自己常用的就是VS Code,方便易用。

执行用控制台(题外话,没想到,Windows我现在用power shell感觉很好用)

(3)插件

python的有两个肯定需要的:

selenium、openpyxl 安装的话,进入控制台: pip install selenium  pip install openpyxl  主要用到 webdriver相关功能。

二、登录功能

如下,是一个登录,然后获取cookie,并用cookie完成后续网页操作的方案。 这个是上一篇随笔的进阶版本,负责判断错题,并保存,方便后续学习,比较实用。上一篇是保存全部题目,也很实用。
from selenium import webdriver
from selenium.webdriver.common.by import By

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains

import time

from openpyxl import Workbook

# 创建一个 workbook
wb = Workbook()
# 获取被激活的 worksheet
ws = wb.active

## 打开浏览器
driver = webdriver.Edge()
driver.get('http://zjzx.zjnu.edu.cn/')

# 暂停一秒,加载内容
time.sleep(1)

username = driver.find_element(By.ID,'username')
username.send_keys('370784199603028417')
password = driver.find_element(By.ID,'password')
password.send_keys('123.com.con.123')

print('登录,等待输入验证码,然后获取cookie')
time.sleep(10)
# 等待输入验证码,然后获取cookie


print('倒计时结束')
cookie1 = driver.get_cookies()
print(cookie1)
print("登录后的cookies值:", cookie1[2])
cookie = cookie1[2]
driver.add_cookie(cookie)

#### 页面加载成功!!!
def get_wrong(number, element, choose_button):   
    # element = driver.find_element(By.ID, 'qsNum24794')
    # element.send_keys('WebDriver')
    # element.submit()
    print('第',number,'题:')
    element.click()
    # ActionChains(driver).click(element).perform()

    # 获取#document下的数据
    iframe = WebDriverWait(driver, 20).until(
                        EC.presence_of_element_located(
                            (By.CSS_SELECTOR, 'iframe')))
    # iframe = driver.find_element_by_css_selector('iframe')
    # driver.switch_to_frame(iframe)
    driver.switch_to.frame(iframe)

    # answer = driver.find_element(By.ID, 'answer')
    # answer = driver.find_element(By.CSS_SELECTOR,'div.sct_box1 > p > span.color_green')
    # print(answer.text)

    checkbox = driver.find_elements(By.CLASS_NAME,'layui-icon-ok')
    checkbox[-1].click()

    time.sleep(0.1)

    out = driver.find_elements(By.CLASS_NAME, 'color_green')
    print(out[0].text,':',out[1].text)
    print('回答正确' 
        if (out[0].text == out[1].text)
        else 
        '回答错误')
    
    if(out[1].text=='正确' or out[1].text=='错误'):
        if(out[1].text == '正确'):
            if(out[0].text!='对'):
                print('开始保存错题本')
                content = driver.find_element(By.CLASS_NAME,'sct_tit').text
                chooses = driver.find_elements(By.CLASS_NAME, choose_button)
                for add_content in chooses:
                    content += '\n' + add_content.text

                ws.append([
                    content,
                    out[1].text])
        else:
            if(out[0].text!='错'):
                print('开始保存错题本')
                content = driver.find_element(By.CLASS_NAME,'sct_tit').text
                chooses = driver.find_elements(By.CLASS_NAME, choose_button)
                for add_content in chooses:
                    content += '\n' + add_content.text

                ws.append([
                    content,
                    out[1].text])
    else:
        if(out[0].text != out[1].text):
            print('开始保存错题本')
            content = driver.find_element(By.CLASS_NAME,'sct_tit').text
            chooses = driver.find_elements(By.CLASS_NAME, choose_button)
            
            if(choose_button=='layui-form-checkbox'):
                limit_index = 0
                for add_content in chooses:
                    content += '\n' + add_content.text
                    limit_index+=1
                    if(limit_index >= len(chooses) - 1):
                        break
            else:
                for add_content in chooses:
                    content += '\n' + add_content.text
                

            ws.append([
                content,
                out[1].text])
        
    driver.switch_to.default_content()

for i in range(0,100):
    url=input("输入想要提取的网页:")
    if(url==''):
        url = 'http://zjzx.zjnu.edu.cn/bm/exercise/page/6/1994431#'
    driver.get(url)

    ws.append(["题目", "答案"])

    answerCards = driver.find_elements(By.CLASS_NAME, 'answerCard')

    for index in range(0,40):
        get_wrong(index, answerCards[index], 'layui-form-radio')
    for index in range(40,60):
        get_wrong(index, answerCards[index], 'layui-form-checkbox')
    for index in range(60,80):
        get_wrong(index, answerCards[index], 'layui-form-radio')

    name=input("输入保存的excel名称:")
    wb.save(name+".xlsx")
    print("文件保存成功")
    ws.delete_rows(1,ws.max_row)
    continue_get = input("是否继续(y、n)")
    if(continue_get != 'y' and continue_get != 'Y'):
        break

print('5秒后退出')
time.sleep(5)
driver.quit()

 

标签:text,driver,爬虫,element,content,随笔,find,out
From: https://www.cnblogs.com/wayne-tao/p/17712405.html

相关文章

  • Python 之 爬虫实战 -- 爬某音乐歌曲及评论信息
    使用Selenium爬某音乐歌曲及评论信息啦~Selenium简单介绍1)简介Selenium是一个用于测试网站的自动化测试工具,支持各种主流界面浏览器。简而言之,Selenium是一个用来做网站自动化测试的库,它的定位是做自动化测试的。我们也可以利用它来做爬虫,获取一些网页信息,并且这种爬虫是模......
  • Python 之 爬虫实战 -- 免费音乐下载器
    【Tkinter界面化小程序】用Python做一款免费音乐下载器、无广告无弹窗、清爽超流畅哦~思路进入某音乐主页输入任意歌手,比如李XX为列。音乐从哪里来?---网站的服务器里怎么从网址里得到音乐?---向网站发起网络请求最后用tkinter做成一个界面下载框即可环境本文用到的环境如下:P......
  • 代理IP与Socks5代理:跨界电商智能爬虫的引擎与安全壁垒
    摘要:随着跨界电商的蓬勃发展,数据采集和隐私保护成为企业的关键挑战。本文将深入探讨代理IP和Socks5代理在跨界电商中的应用,以及它们在智能爬虫技术中的关键作用,为企业提供数据引擎和安全防护的解决方案。第一部分:背景介绍跨界电商已成为全球贸易的重要组成部分,为企业提供了巨大的市......
  • 代理IP与Socks5代理:跨界电商智能爬虫的引擎与安全壁垒
    摘要:随着跨界电商的蓬勃发展,数据采集和隐私保护成为企业的关键挑战。本文将深入探讨代理IP和Socks5代理在跨界电商中的应用,以及它们在智能爬虫技术中的关键作用,为企业提供数据引擎和安全防护的解决方案。第一部分:背景介绍跨界电商已成为全球贸易的重要组成部分,为企业提供了巨大的市......
  • Socks5代理、IP代理与网络安全:保护你的爬虫和隐私
    在数字时代,数据是黄金,网络安全成为至关重要的问题。无论是保护个人隐私还是进行爬虫数据采集,代理技术已经成为网络工程师的必备工具。本文将深入探讨Socks5代理、IP代理以及它们在网络安全和爬虫应用中的重要性。1.了解Socks5代理Socks5代理是一种网络协议,允许应用程序通过中间服......
  • 代理IP和Socks5代理:跨界电商与爬虫的智能引擎
    跨界电商,作为全球市场的一部分,对数据的需求越来越大。同时,随着互联网的发展,爬虫技术也在不断演进,成为了跨界电商的关键工具之一。然而,随之而来的是网站的反爬虫机制和网络安全风险。在这种情况下,代理IP和Socks5代理应运而生,为企业提供了数据采集的解决方案和网络安全的保护。本文将......
  • 代理IP和Socks5代理:跨界电商与爬虫的智能引擎
    跨界电商,作为全球市场的一部分,对数据的需求越来越大。同时,随着互联网的发展,爬虫技术也在不断演进,成为了跨界电商的关键工具之一。然而,随之而来的是网站的反爬虫机制和网络安全风险。在这种情况下,代理IP和Socks5代理应运而生,为企业提供了数据采集的解决方案和网络安全的保护。本文将......
  • 极速上手Python分布式爬虫
    随着互联网的快速发展,获取大量数据已成为许多项目的核心需求。而Python分布式爬虫是一种高效获取数据的方法。今天,我将个大家分享一下,想要极速上手Python分布式爬虫的一些知识,让你能够迅速掌握这一实用的技术。什么是分布式爬虫?分布式爬虫是一种利用多台机器协同工作的爬虫系统。它......
  • Oracle随笔
    1.刷存量数据mergeinto格式如下mergeinto table_namealias1using(table|view|sub_query)alisa2on(joincondition)whenmatchedthenupdatetable_name  setcol1=xxwhennotmatchedthen     insertinto........... ......
  • Python爬虫自动切换爬虫ip的完美方案
    在进行网络爬虫时,经常会遇到需要切换爬虫ip的情况,以绕过限制或保护自己的爬虫请求。今天,我将为你介绍Python爬虫中自动切换爬虫ip的终极方案,让你的爬虫更加高效稳定。步骤一:准备爬虫ip池首先,你需要准备一个可靠的爬虫ip池。爬虫ip池是由多个爬虫ip组成的集合,可以通过API或爬虫获取......