使用selenium爬数据遇到的问题
一、导入需要的库
from selenium import webdriver #导入操作web的模块
from selenium.webdriver.support.select import Select #这行是为了操作一个select控件
import time #为了让界面停一会
browser = webdriver.Chrome() #打开chrome
browser.maximize_window() #最大化窗口
browser.get('http://×××.com') #访问网页二、解决弹出警告框的障碍
time.sleep(3)
browser.switch_to.alert.accept() #模拟直接点一下弹出框
三、解决登录问题
elem_user = browser.find_element_by_name('username') # 获取用户名的输入控件 ,是通过用chrome的F12查看element获得的,一下控件基本都是这个方法获得
elem_user.clear()
elem_user.send_keys('######') # 键入用户名
elem_pass = browser.find_element_by_name('password')# 密码的输入控件
elem_pass.clear()
elem_pass.send_keys('#####')
elem_login = browser.find_element_by_id('login')# 登录按钮控件
elem_login.click()# 点击登录按钮
time.sleep(2)四、按文字获取控件,使用较多
browser.find_element_by_xpath("//*[text()='管理']").click() #按照网页上的顺序单击按钮,等几秒,跳转后再点。。。
time.sleep(3)五、获取select控件的条目
list_1 =browser.find_element_by_tag_name('select') # 用到了前面导入的Select模块
Select(list_1).select_by_value("100") # 按值来选条目六、最重要的,如果网页内有iframe控件,想获取它内部的控件
browser.switch_to_frame('main') # 先切换到这个frame,“main”是名称
browser.find_element_by_id("add") #再继续获得frame内部的控件,否则总是取不到 ,浪费了大部分时间七、以下是批量写文件
file_name =""
file_data = open('file_data_1.txt', 'w')
pages=0
while(pages<20000):
table = browser.find_element_by_tag_name('table') # 按tag取table表格控件
table_tr_list = table.find_elements_by_tag_name('tr') # 取当前页面的所有行
table_cols = table_tr_list[0].find_elements_by_tag_name('th') #取第一行的所有列
for r,tr in enumerate(table_tr_list, 1):
table_td_list = tr.find_elements_by_tag_name('td')
for c,td in enumerate(table_td_list):
file_data.write(td.text+'\n')
pages = pages + 1
print(pages)
if pages % 1000 == 0: # 每1000页写个新文件
file_data.close()
flie_name = 'file_data_' + str(pages) + '.txt' #动态生成文件名称
file_data = open(flie_name, 'w')
browser.find_element_by_id('iwap-gen-3_next').click() #点击下一页
time.sleep(10)
file_data.close() #关闭最后一个文件=====================================================================================================