python 抓取某网站网页信息中的TD信息
通过用户名和密码直接登录到网站,然后下载相应的表格信息;或者直接抓取HTML页面中的table下tr的相关内容
- 引入代码中需要的相关库或者类
import time
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from lxml import etree
from openpyxl import workbook
from openpyxl import load_workbook
import os
import pymongo
import threading
- 创建mongodb数据库以及excel的workbook等对象
client = pymongo.MongoClient(host='localhost',port = 27017)
db = client.hello
collection = db['baby']
wb = workbook.Workbook()
ws = wb.active
###设置excel相关的表头信息
ws.append(['序号','姓名','性别','占比','班级','年级','备注'])
- 解析网页相关信息使用selenium
###设置网站URL链接(以下链接为虚拟链接)
url = 'http://69.69.69.69/2000'
###调用webdriver驱动打开Chrmoe浏览器
browser = webdriver.Chrome()
wait = WebDriverWait(browser,20)
user='1111'
password = '888888'
###打开浏览器,获取用户名和密码输入框,输入相关信息后点击提交
browser.get(url)
username = wait.until(EC.presence_of_element_located((By.NAME,'userId')))
password = wait.until(EC.presence_of_element_located((By.NAME,'userPwd')))
submit = wait.until(EC.element_to_be_clickable((By.NAME,'Submit')))
username.send_keys(user)
password.send_keys('888888')
submit.click()
由于打开主页后左侧的树形选择结构不予显示,经过点击后发现需要执行JavaScript脚本方可加载
browser.execute_script("parent.treeCtl.showMenu('700000')")
打开主页后,由于网站中的关键信息均在frameset中,但是frameset中的frame并没有在网页代码段中显示,因此需要切换至相应frame
browser.switch_to.frame('leftFrame')
获取frame中可以点击的span标签进行点击
click1 = wait.until(EC.element_to_be_clickable((By.ID,'ygtvlabelel3')))
click1.click()
在切回到主界面,继续寻找显示frame中的table内容
browser.switch_to.default_content()
browser.switch_to.frame('mainFrame')
通过chrome浏览器定位到需要获取的tr字段然后复制XPATH路径,并通过browser获取到相应的elements列表
tr_list = browser.find_elements(By.XPATH,'//*[@id="mx1"]/tbody/tr')
获取列表中的td字段信息并保存到mongodb和excel当中
for tr in tr_list:
#./确保在tr标签下面寻找td标签,而不是获取整个table标签下的字段
td_list = tr.find_elements(By.XPATH,'./td')
if len(td_list):
number = td_list[0].text
name = td_list[1].text
countno = td_list[2].text
leibie = td_list[3].text
zhanbi = td_list[4].text
yue = td_list[5].text
rijun = td_list[6].text
tiaomu = {
'序号' : number,
'姓名' : name,
'性别' : countno,
'占比' : leibie,
'班级' : zhanbi,
'年级' : yue,
'备注' : rijun
}
####插入mongodb
collection.insert(tiaomu)
####插入excel当中
ws.append([number,name,countno,leibie,zhanbi,yue,rijun])
切换到主界面然后点击下载按钮下载网站自身数据
browser.switch_to.default_content()
browser.switch_to.frame('mainFrame')
download = wait.until(EC.element_to_be_clickable((By.XPATH,'/html/body/div[4]/span[2]')))
download.click()
保存excel数据到指定的文件
excelname = 'hello.xlsx'
wb.save(excelname)
参考文献