首页 > 数据库 >selenium+mysql 爬取LEI官网数据

selenium+mysql 爬取LEI官网数据

时间:2024-05-10 14:22:06浏览次数:11  
标签:name tr LEI driver element 爬取 table find selenium

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select
import pymysql

# 指定WebDriver的路径
webdriver_path = 'C:/chromedriver/chromedriver.exe'
# 创建Service对象
service = Service(executable_path=webdriver_path)
# 连接数据库
db = pymysql.connect(host='127.0.0.1', user='root', password='******', db='lei_db', charset='utf8mb4')
# 创建游标对象
cursor = db.cursor()
# 初始化WebDriver
driver = webdriver.Chrome(service=service)
# 打开目标网页
driver.get("https://www.leichina.org/cei/2935720/2935943/index.html")
time.sleep(10)
driver.maximize_window()
# 等待页面加载完成
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.TAG_NAME, "body")))
# 定位iframe并切换上下文
iframe = driver.find_element(By.ID, "frame2")
driver.switch_to.frame(iframe)
# 定位“更多”按钮并点击
more_btn = driver.find_element(By.ID, "moreBtn")
more_btn.click()
# 等待select元素出现
select = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "#btn2 > select")))
# 使用Select类来处理下拉框
select = Select(select)
select.select_by_index(1)
# 定位验证码并刷icon
icon_element = driver.find_element(By.ID, "changepic")
icon_element.click()  # 点击刷新icon,刷新它
# 等待验证码图片加载完成
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "#imgcode")))
# 这里等待用户手动输入验证码
user_input = input("请打开验证码图片URL,在浏览器中查看验证码,并输入验证码:")
# 定位验证码输入框并输入验证码
vcode_input = driver.find_element(By.CSS_SELECTOR, "#searchForm\:vCode")
vcode_input.send_keys(user_input)
# 定位查询按钮并点击
query_btn = driver.find_element(By.ID, "searchForm:j_id36")
query_btn.click()
time.sleep(10)
# 等待查询结果表格加载完成
WebDriverWait(driver, 30).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "#resultForm\:cdmLegalEntityListData")))
# 解析查询结果
total_pages = 10692
for page in range(1, total_pages + 1):
    print(f"正在处理第{page}页...")
    time.sleep(10)
    # 等待表格加载完成
    WebDriverWait(driver, 30).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "#resultForm\:cdmLegalEntityListData")))
    #仅用于获取行数 因为最后一页行数可能小于10
    table = driver.find_element(By.CSS_SELECTOR, "#resultForm\:cdmLegalEntityListData\:tb")
    rows = table.find_elements(By.TAG_NAME, "tr")
    r_count = len(rows)
    for i in range(0,r_count):
        # 解析表格
        table = driver.find_element(By.CSS_SELECTOR, "#resultForm\:cdmLegalEntityListData\:tb")
        # rows = table.find_elements(By.TAG_NAME, "tr")[1:]  # 跳过表头
        rows = table.find_elements(By.TAG_NAME, "tr")
        row=rows[i]
        cells = row.find_elements(By.TAG_NAME, "td")
        lei = cells[0].text
        company_cn_name = cells[1].text
        status = cells[2].text
        address = cells[3].text

        # 模拟点击进入详情页
        detail_link = cells[4].find_element(By.TAG_NAME, "a")
        detail_link.click()
        time.sleep(5)

        # 等待详情页加载完成
        WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.TAG_NAME, "body")))

        # 定位验证码输入框并输入验证码
        company_en_name = driver.find_element(By.CSS_SELECTOR,
                                       "#j_id3\:j_id6 > table > tbody > tr > td > table > tbody > tr:nth-child(2) > td.txtLeft").text
        # 执行SQL语句,插入数据
        sql = "INSERT INTO lei (lei, company_cn_name, status, address, company_en_name) VALUES (%s, %s, %s, %s, %s)"
        cursor.execute(sql, (lei, company_cn_name, status, address, company_en_name))
        # print(f"lei: {lei}")
        # print(f"company_cn_name: {company_cn_name}")
        # print(f"status: {status}")
        # print(f"address: {address}")
        # print(f"company_en_name: {company_en_name}")

        # 定位返回按钮并点击
        back_btn = driver.find_element(By.CSS_SELECTOR,
                                       "#j_id3 > table > tbody > tr > td > table > tbody > tr:nth-child(1) > td > table > tbody > tr > td > table:nth-child(15) > tbody > tr:nth-child(2) > td > table > tbody > tr > td:nth-child(2) > a > img")
        back_btn.click()
        time.sleep(5)

        # 提交事务
        db.commit()
        print(f"已经爬取第{i+1}条...")
    # 翻页
    if page <= total_pages:
        next_page_btn = driver.find_element(By.XPATH, '//*[@id="resultForm"]/table/tbody/tr[1]/td/table/tbody/tr/td/table[2]/tbody/tr[2]/td/a[1]')
        next_page_btn.click()
        time.sleep(20)  # 等待页面加载完成
# 关闭数据库连接
cursor.close()
db.close()

标签:name,tr,LEI,driver,element,爬取,table,find,selenium
From: https://www.cnblogs.com/zhouwp/p/18184217

相关文章

  • Selenium4自动化测试3--元素定位By.NAME,By.LINK_TEXT 和通过链接部分文本定位,By.PARTI
    4-通过名称定位,By.NAMEname属性为表单中客户端提交数据的标识,一个网页中name值可能不是唯一的。所以要根据实际情况进行判断 importtimefromseleniumimportwebdriverfromselenium.webdriver.common.byimportBy#指定浏览器的位置,解决浏览器驱动和浏览器版本不匹配......
  • Selenium4自动化测试4--元素定位By.XPATH,元素定位最佳顺序
    7-通过xpath定位,By.XPATH    xpath是什么?XPath是一门在XML文档中查找信息的语言xml是什么?XML(可扩展标记语言),主要用于传输数据为什么可以使用xpath定位html?XPath(XML路径语言)是一种用于在XML文档中定位元素的语言,它可以用于定位HTML文档中的元素。尽管XML和HTML是两种不同......
  • 使用selenium时,用webdriver初始化浏览器时间过久并伴随报错 operation timed out 的处
    我使用的系统是archlinux,在日常更新软件包时系统自动将selenium更新到目前(2024年5月)最新的版本,即:python-selenium4.20.0-1。在运行我的爬虫时报错缺少依赖包,经过一番查询得知现在的驱动由webdriver_manger统一接管了。webdrivermanger来对浏览器驱动和浏览器版本进行管理,但aur......
  • Selenium4自动化测试2--元素定位By.ID,By.CLASS_NAME,By.TAG_NAME
    三、元素定位方式1-通过id定位,By.IDid属性在HTML中是唯一的,因此使用id定位可以确保找到页面上唯一的元素。由于id是唯一的,浏览器在查找元素时可以快速定位到目标元素,提高了定位的效率。 importtime#pipinstallseleniumfromseleniumimportwebdriverfromselenium......
  • Selenium4自动化测试1--Chrome浏览器和chromedriver
    selenium的介绍Selenium是一个用于Web应用程序测试的强大工具,可以模拟用户在浏览器中的行为。它提供了一组功能丰富的工具和库,使您能够自动化浏览器操作,进行功能测试、回归测试和跨浏览器测试。Selenium原理 它需要模拟浏览器的操作所以需要用到浏览器和浏览器驱动。一、......
  • python+selenium+excel自动登录,自动填写网页
    经常有些网页要登录,然后频繁填写一些重复的内容,本文暂只考虑不需要验证码的情况,可以通过selenium模拟用户行为在页面操作,用excel拖出相似内容,用xlrd读取并填写到网页中。导入相关包fromseleniumimportwebdriverimportosimportxlrdimportxlwtimportjsonimportreq......
  • 使用Selenium做网站登录的免验证
    我发现,我已经三年多没有更新博客了。这几年一直感觉没什么可写的,工作上没遇到的问题python的不多,主要是前端页面上遇到的问题,感觉写起来比较困难,一写就要贴上去很多代码,还没什么必要,不贴又说不明白,所以干脆不写了。 今年换了工作,开始研究新玩意儿了——爬虫。俗话说,爬虫爬得好,......
  • selenium操作浏览器的一些配置
    selenium操作浏览器的一些配置#设置用户代理USER_AGENTS=['Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/58.0.3029.110Safari/537.3','Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,......
  • 【爬虫】项目篇-使用selenium、requests爬取天猫“华为手机”的商品评价
    目录使用selenium使用requests使用seleniumfromselenium.webdriverimportChrome,ChromeOptionsfromselenium.webdriver.support.waitimportWebDriverWaitfromselenium.webdriver.common.byimportByfromselenium.webdriver.supportimportexpected_conditionsasE......
  • Selenium自动化测试——个人博客系统
    fromseleniumimportwebdriverfromselenium.common.exceptionsimportTimeoutExceptionfromselenium.webdriver.common.byimportByfromselenium.webdriver.common.keysimportKeysfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdri......