完整代码:
#2022-04-11
#导入模块
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys #导入模块
from selenium.webdriver.chrome.options import Options #导入无头模式包
import time
#创建一个参数对象,用来控制chorme以无界面模式打开
chrome_options = Options()
chrome_options.add_argument('window-size=1920x3000')#指定浏览器分辨率
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver=webdriver.Chrome('C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe',options=chrome_options)
time.sleep(2)#让浏览器休息一下,避免访问过快,被封ip
driver.get('https://wiki.hmatm.com')
#找到输入框
username = "用户名"#这个是你自己的用户名
password = "密码"#这个是你的密码
driver.find_element_by_name("os_username").send_keys(username)#//*[@id="os_username"]
driver.find_element_by_name("os_password").send_keys(password)#//*[@id="os_password"]
driver.find_element(By.XPATH,'//*[@id="loginButton"]').click() #找到登录按钮,点击
time.sleep(3)
driver.find_element(By.XPATH,'//*[@id="confluence-questions-link"]').click()
time.sleep(1)
driver.find_element(By.XPATH,'//*[@id="cq-nav-topics"]/a').click()
driver.find_element(By.XPATH,'//*[@id="cq-all-topics-container"]/div[2]/div[1]/div[2]/a').click()
time.sleep(5)
driver.find_element(By.XPATH,'//*[@id="main"]/div[3]/div/ul/li[2]/a').click()
time.sleep(3)
driver.execute_script("document.documentElement.scrollTop=10000")#加载全部数据,下拉滚动条的方法
time.sleep(1)
lis=driver.find_elements(By.XPATH,'//*[@id="main"]/ol/li')
# print(lis)
for li in lis:
nameTag=li.find_elements(By.XPATH,'./div[2]/h3/a')[0]
nameTagtxt=nameTag.text
nameHref=nameTag.get_attribute('href')
print(nameTagtxt, nameHref)#可以不打印这句,直接保存
time.sleep(1)
with open(r"问题confluence汇总.txt","a",encoding="utf-8") as f: #使用with open()新建对象f ,a 表示追加
f.write("{},{}".format(nameTagtxt,nameHref)) #将列表中的数据循环写入到文本文件中
f.write("\n")#换行
print('爬取数据结束!!')
思路:
1、用selenium爬取数据的原理就是伪人工操作;
2、先是访问网站,输出用户名和密码,登录;
这一步,要找到用户名和密码的输入框 username = “用户名”#这个是你自己的用户名 password = “密码”#这个是你的密码 driver.find_element_by_name(“os_username”).send_keys(username)#//[@id=”os_username”] driver.find_element_by_name(“os_password”).send_keys(password)#//[@id=”os_password”] 还有登录按钮 driver.find_element(By.XPATH,’//*[@id=”loginButton”]’).click()
3、访问具体位置;
4、输出结果;
5、保存txt数据;
输出结果为: