首页 > 其他分享 >Selenium 爬虫

Selenium 爬虫

时间:2023-12-25 18:34:29浏览次数:31  
标签:NAME html01 CLASS Selenium 爬虫 element print find

image

from pixiv

相关资料

官网

官网使用介绍

可能会遇到的问题:selenium.common.exceptions.WebDriverException: Message: Can not connect to the Service chromedriver.exe while opening chrome browser

免责声明

本人承诺在使用爬虫程序时,仅出于学习和个人技术提升的目的,以了解互联网数据抓取和分析的工作原理。

本人郑重声明:

  1. 非商业用途:本人所使用的爬虫程序纯属个人学习之需,绝不用于商业目的或从事任何违法违规活动。

  2. 尊重网站规则:在使用爬虫程序时,本人将遵守所爬取网站的robots.txt协议或网站的访问规则,并尊重网站所有者对于爬虫程序的限制。

  3. 数据保护和隐私:本人承诺在爬取数据时不会获取、储存或利用任何个人隐私信息,且不会对所访问网站造成不必要的负担或干扰。

  4. 技术分享与合作:本人愿意遵守技术共享的原则,不会滥用所学知识,也愿意在合适的情况下与相关人士分享学习心得。

  5. 法律遵守:本人承诺遵守当地法律法规,并对于使用爬虫程序可能带来的风险和责任自行承担。

使用目的

这次我使用是为了爬取一个网站的数据,但是这个网站用普通的爬虫只能得到静态的网页,反爬做的比较好,于是我就找到了可以模拟点击浏览器的自动化工具Selenium

其可以通过代码自动打开浏览器,并进行点击,填写,跳转等操作,并可以通过内置方法获取HTML元素

代码

import traceback
from threading import Thread
import requests
from bs4 import BeautifulSoup
import time
import random
from helium import *
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.wait import WebDriverWait
import pandas as pd

chrome_driver_path = r'C:\Users\86150\Documents\chrome-win64\chrome-win64\chrome.exe'
starturl = 'url'


def findQuestion(html01):
    try:
        # 查找问题
        question = html01.find_element(By.CLASS_NAME, "com-mnks-question-detail") \
            .find_element(By.CLASS_NAME, 'timu') \
            .find_element(By.CLASS_NAME, 'timu-text')
        question = str(question.text)
        return question
    except Exception as ex:
        print(f"出现异常Question:f{ex}")
        return "NaN"


def findSelect(html01):
    try:
        # 查找选择
        selectOpt = html01.find_element(By.CLASS_NAME, "com-mnks-question-detail") \
            .find_element(By.CLASS_NAME, 'answer-w') \
            .find_element(By.CLASS_NAME, 'options-w') \
            .find_elements(By.TAG_NAME, 'p')
        selectlist = []
        for p_element in selectOpt:
            text = p_element.text
            selectlist.append(text)
        ans = "\n".join(selectlist)
        return ans
    except Exception as ex:
        print(f"出现异常Select:f{ex}")
        return "NaN"


def findImg(html01):
    try:
        # 查找图片
        imageInf = html01.find_element(By.CLASS_NAME, "com-mnks-question-detail") \
            .find_element(By.CLASS_NAME, 'answer-w') \
            .find_element(By.CLASS_NAME, 'media-w') \
            .find_element(By.TAG_NAME, 'img').get_attribute('src')
        return str(imageInf)
    except Exception as ex:
        print(f"No Img")
        return "NaN"


def findAns(html01, wait):
    try:
        ans_element = html01.find_element(By.CLASS_NAME, "com-shiti-xiangjie") \
            .find_element(By.CLASS_NAME, "xiangjie") \
            .find_element(By.CLASS_NAME, "content")
        wait.until(lambda d: ans_element.is_displayed())
        ans = str(ans_element.get_attribute("innerHTML"))
        if ans == "":
            ans = "Void"
        return ans
    except Exception as ex:
        print(f"出现异常Ans:f{ex}")
        return "NaN"


def getAns(html01):
    try:
        html01.find_element(By.CLASS_NAME, "tool-bar") \
            .find_element(By.CLASS_NAME, "btn-bar") \
            .find_element(By.CSS_SELECTOR, 'button.right.pt[ref="xiangqing"]').click()
    except Exception as ex:
        print(f'出现异常getAns:{ex}')


def nextOne(html01):
    try:
        html01.find_element(By.CLASS_NAME, "tool-bar") \
            .find_element(By.CLASS_NAME, "btn-bar") \
            .find_element(By.XPATH, "//button[text()='下一题']").click()
        return True
    except Exception as ex:
        print(f"出现异常nextOne:f{ex}")
        return False


def debug(df_train):
    try:
        print(df_train.shape)
        print(df_train.tail(1))
        print("***************************")
        print()
    except Exception as ex:
        print(f"出现异常DEBUG:{ex}")


def getData(url):
    startNum = 0
    df_train = pd.DataFrame({'question': [], 'selectOption': [],
                             'imgUrl': [], 'answer': []})
    # 打开主页
    driver = webdriver.Chrome()
    driver.get(url)
    wait = WebDriverWait(driver, timeout=10)
    time.sleep(10)
    while startNum < 1424:
        startNum = startNum + 1
        try:
            html01 = driver.find_element(By.CLASS_NAME, 'layout-article') \
                .find_element(By.CLASS_NAME, 'news-page') \
                .find_element(By.CLASS_NAME, 'left')
            wait.until(lambda d: html01.is_displayed())

            getAns(html01)

            html01 = driver.find_element(By.CLASS_NAME, 'layout-article') \
                .find_element(By.CLASS_NAME, 'news-page') \
                .find_element(By.CLASS_NAME, 'left')

            wait.until(lambda d: html01.is_displayed())

            a1 = findQuestion(html01)
            a2 = findSelect(html01)
            a3 = findImg(html01)
            a4 = findAns(html01, wait)
            '''
            print(a1)
            print(a2)
            print(a3)
            print(a4)
            '''
            tdf = pd.DataFrame({'question': [a1], 'selectOption': [a2],
                                'imgUrl': [a3], 'answer': [a4]})
            df_train = pd.concat([df_train, tdf])

            debug(df_train)

            flag = nextOne(html01)
            if not flag:
                break
        except Exception as ex:
            print("出现如下异常getData:%s" % ex)
            traceback.print_exc()
    driver.quit()
    return df_train


Data_MONI = getData(starturl)
Data_MONI.to_csv("D:\\moni_four-data")

标签:NAME,html01,CLASS,Selenium,爬虫,element,print,find
From: https://www.cnblogs.com/cilinmengye/p/17926739.html

相关文章

  • 如何使用 Go 语言编写一个简单的爬虫程序
     要使用Go语言编写一个简单的爬虫程序,可以按照以下步骤进行: 1.导入所需的包:在Go语言中,可以使用`net/http`包来发送HTTP请求,使用`io/ioutil`包来读取响应内容,使用`regexp`包来进行正则表达式匹配。 ```goimport("fmt""net/http""io/ioutil""regexp")``` 2.定义......
  • java爬虫技术之Selenium爬虫
    前言Selenium爬虫是一种基于浏览器自动化的爬虫技术,可以模拟用户的操作行为,实现对动态网页的爬取。在一些情况下,为了绕过网站的反爬虫机制或者访问受限的网站,我们需要使用代理IP来进行爬取。本文将介绍如何使用Selenium爬虫结合代理IP进行网络爬取,并附带完整的代码实现。一、什么是......
  • 如何在Go语言中处理反爬虫机制
    在当今互联网时代,网站的反爬虫机制变得越来越普遍。这些机制旨在保护网站的数据和资源,防止恶意爬虫对网站造成过大负荷。对于Go语言开发者来说,了解如何处理反爬虫机制是至关重要的。本文将介绍一些在Go语言中处理反爬虫机制的方法和技巧。1.使用合适的User-AgentUser-Agent是HTTP请......
  • Python 爬虫在数据分析方面有什么潜力
    在当今信息爆炸的时代,大量的数据被生成和存储,这给企业、学术界和个人提供了巨大的机会和挑战。爬虫作为一种数据获取的技术手段,可以帮助我们从互联网上获取大量的数据。结合数据分析技术,爬虫在数据分析方面具有巨大的潜力。本文将介绍一些爬虫在数据分析方面的潜力和应用场景。1.获......
  • 高效网络爬虫:代理IP的应用与实践
    ......
  • 【练习】爬虫-基础1 - GlidedSky 源码参考!
    网上有很多大佬为了帮助渣渣爬虫提升,都有搭建爬虫练习平台网站,这种网站的好处是可以练习爬取,同时网上也有很多参考教程,尤其适合学习练手使用。爬虫练习网站,镀金的天空-GlidedSky,爬虫-基础1,爬取网页上的数据,计算求和。爬虫-基础1“爬虫的目标很简单,就是拿到想要的数据。这里有一个网......
  • Python 爬虫,gk-design 网站作品信息采集爬虫源码!
    一个比较简单的爬虫源码,爬取gk-design网站作品信息,包括图片及文字内容信息,几乎没有限制,适合新人学习练手使用,文末附上源码供参考学习。小日子的网站随便爬,加大力度,使劲搞,适合Python爬虫新人练手使用和学习,如果你正在找练手网站,不妨尝试爬取下载数据。这里分享几个简单的数据整......
  • 软件测试/人工智能|解决Selenium中的异常问题:“error sending request for url”
    前言在使用Selenium自动化测试时,有时会遇到“errorsendingrequestforurl”这样的异常。这个问题通常与Chrome浏览器驱动程序和网络请求相关。本文让我们来了解如何解决这个问题。问题原因这个异常通常出现在Selenium与Chrome浏览器交互时,可能由于网络请求或Chrome驱动程序的问......
  • Python爬虫知识点(bs/find_all/正则表达式)
    格式输出 BeautifulSoup库  信息提取  正则表达式     ......
  • Python+Selenium框架实战系列003----测试数据分离与ddt技术&断言
    一、测试数据分离1、新建testData文件夹,新建login_data.py文件,如下所示:   2、在login_datas.py文件中存放测试用例数据,如下所示:#正常场景success_data={"mobile":"17839196010","pwd":"duhui94619"}#异常用例--手机号异常phone_data=[{"mobile":&......