Python Selenium爬取微博并登录163邮箱发送附件
程序员文章站
2022-04-03 09:58:14
使用selenium爬取微博头条标题数据,将数据写入表格中,再登录163邮箱进行发送---------------仅供参考1. 先获取微博头条的数据当打开微博点击头条时页面会自动跳转到一个空白页面,可以使用selenium中的 back() 进行后退import timefrom openpyxl import workbook # 写入Excel表所用from selenium import webdriverclass Wb_tt(): def __init__(self)....
使用selenium爬取微博头条标题数据,将数据写入表格中,再登录163邮箱进行发送---------------仅供参考
1. 先获取微博头条的数据
当打开微博点击头条时页面会自动跳转到一个空白页面,可以使用selenium中的 back() 进行后退
import time
from openpyxl import workbook # 写入Excel表所用
from selenium import webdriver
class Wb_tt():
def __init__(self):
self.wb = webdriver.Chrome()
self.item = {}
self.lists = []
def wb_get(self):
# 获取微博数据
self.wb.get('http://weibo.com/login.php')
time.sleep(3)
self.wb.find_element_by_xpath("//*[@id='pl_unlogin_home_leftnav']/div/ul/div[2]/li/a").click()
time.sleep(0.5)
# 后退
self.wb.back()
time.sleep(10)
# 控制滚轮逐步进行向下滑动
for y in range(10):
js = 'window.scrollBy(0,1000)'
self.wb.execute_script(js)
time.sleep(0.5)
time.sleep(1)
# 获得整个div
content = self.wb.find_elements_by_xpath('//ul/div[@class="UG_list_b"]')
# print(content)
time.sleep(2)
return content
def wb_info(self, item):
# 处理微博数据
for x in item:
title = x.find_element_by_xpath('./div[2]/h3/a').text
source = x.find_element_by_xpath('./div[2]/div/a[2]/span').text
time = x.find_element_by_xpath('./div[2]/div/span').text
img = x.find_element_by_xpath('./div[1]/img').get_attribute('src')
print(title, source, time, img)
# 存入的数据不能为字符串
yield [title] + [source] + [time] + [img]
def wb_save(self, info):
wb = workbook.Workbook() # 创建Excel对象
ws = wb.active # 获取当前正在操作的表对象
ws.append(['标题', '来源', '时间', '图片'])
print(type(info))
for data in info:
print('正在写入表格')
ws.append(data)
# 保存的名字
wb.save('wbtt.xlsx')
print('抓取成功')
time.sleep(2)
self.wb.quit()
if __name__ == '__main__':
result = Wb_tt()
item = result.wb_get()
time.sleep(3)
info = result.wb_info(item)
time.sleep(3)
result.wb_save(info)
获取的数据如下:
2. 登录163邮箱发送邮件
想要登录必须要进入iframe
import time
from selenium import webdriver
def Login_163(browser):
# 登录邮箱
# browser.save_screenshot("163邮箱.png")
browser.maximize_window()
iframe = browser.find_element_by_xpath('//div[@id="loginDiv"]/iframe')
# 进入iframe
browser.switch_to.frame(iframe)
# 输入自己的邮箱账号
browser.find_element_by_name("email").send_keys('输入自己的账号')
time.sleep(2)
# 输入密码
browser.find_element_by_name("password").send_keys('输入自己的密码')
time.sleep(2)
# 点击登录
browser.find_element_by_id('dologin').click()
time.sleep(5)
def Wite_email(browser):
browser.switch_to_default_content() # 跳出frame,回到主页面
# 点击写信
browser.find_element_by_xpath("//*[@id='dvNavTop']/ul/li[2]/span[2]").click()
# 输入收件人
browser.find_element_by_class_name('nui-editableAddr-ipt').send_keys('15617295110@163.com')
# 输入主题
browser.find_element_by_xpath("//*[@class='nui-ipt-input'and @type = 'text' and @tabindex = '1']").send_keys('selenium爬虫')
time.sleep(4)
# 此时要输入要传送的文件路径如:C:\Users\123\Desktop\Selenium爬虫\wbtt.xlsx
browser.find_element_by_xpath("//input[@type='file' and @class='O0']").send_keys(r"存放自己要发送的路径")
time.sleep(2)
# 进入内容
browser.switch_to.frame(browser.find_element_by_xpath("//iframe[contains(@class,'APP-editor-iframe')]"))
browser.find_element_by_class_name("nui-scroll").send_keys('123456789') # 可以输入要发送内容
browser.switch_to_default_content()
#点击发送
browser.find_element_by_xpath("//*[@class='nui-toolbar-item']/div//span[2]").click()
time.sleep(10)
browser.quit()
if __name__ == '__main__':
# 使用谷歌浏览器
browser = webdriver.Chrome()
browser.get('https://mail.163.com/')
Login_163(browser)
Wite_email(browser)
3. 完整代码
import time
from openpyxl import workbook # 写入Excel表所用
from selenium import webdriver
class Wb_tt():
def __init__(self):
self.wb = webdriver.Chrome()
self.item = {}
self.lists = []
def wb_get(self):
# 获取微博数据
self.wb.get('http://weibo.com/login.php')
time.sleep(3)
self.wb.find_element_by_xpath("//*[@id='pl_unlogin_home_leftnav']/div/ul/div[2]/li/a").click()
time.sleep(2)
# 后退
self.wb.back()
time.sleep(10)
# 控制滚轮逐步进行向下滑动
for y in range(10):
js = 'window.scrollBy(0,700)'
self.wb.execute_script(js)
time.sleep(0.5)
time.sleep(1)
# 获得源码
content = self.wb.find_elements_by_xpath('//ul/div[@class="UG_list_b"]')
time.sleep(3)
return content
def wb_info(self, item):
# 使用xpath处理微博数据
for x in item:
# 标题 来源 时间 图片
title = x.find_element_by_xpath('./div[2]/h3/a').text
source = x.find_element_by_xpath('./div[2]/div/a[2]/span').text
time = x.find_element_by_xpath('./div[2]/div/span').text
img = x.find_element_by_xpath('./div[1]/img').get_attribute('src')
print(title, source, time, img)
# 存入的数据不能为字符串
yield [title] + [source] + [time] + [img]
def wb_save(self, info):
wb = workbook.Workbook() # 创建Excel对象
ws = wb.active # 获取当前正在操作的表对象
ws.append(['标题', '来源', '时间', '图片'])
for data in info:
print(type(data))
ws.append(data)
wb.save('wbtt.xlsx')
print('抓取成功')
time.sleep(5)
def Login_163(self):
# 登录163邮箱
# browser.save_screenshot("163邮箱.png")
self.wb.get('https://mail.163.com/')
iframe = self.wb.find_element_by_xpath('//div[@id="loginDiv"]/iframe')
self.wb.switch_to.frame(iframe)
self.wb.find_element_by_name("email").send_keys('输入账号') # 163邮箱的账号
time.sleep(2)
self.wb.find_element_by_name("password").send_keys('输入密码') # 163邮箱的密码
time.sleep(2)
self.wb.find_element_by_id('dologin').click()
time.sleep(5)
def Wite_email(self):
self.wb.switch_to_default_content() # 跳出frame,回到主页面
# 点击写信
self.wb.find_element_by_xpath("//*[@id='dvNavTop']/ul/li[2]/span[2]").click()
# 输入收件人
self.wb.find_element_by_class_name('nui-editableAddr-ipt').send_keys('15617295110@163.com') # 这里输入收件人的名字
# 输入主题
self.wb.find_element_by_xpath("//*[@class='nui-ipt-input'and @type = 'text' and @tabindex = '1']").send_keys(
'selenium爬虫')
time.sleep(4)
# 输入自己要发送文件的路径
self.wb.find_element_by_xpath("//input[@type='file' and @class='O0']").send_keys(
r"C:\Users\123\Desktop\Flask_New\Selenium爬虫\wbtt.xlsx") # 这里存放刚刚保存的xlsx表的路径
time.sleep(2)
# 进入内容
self.wb.switch_to.frame(self.wb.find_element_by_xpath("//iframe[contains(@class,'APP-editor-iframe')]"))
self.wb.find_element_by_class_name("nui-scroll").send_keys('123456789')
self.wb.switch_to_default_content()
# 点击发送
self.wb.find_element_by_xpath("//*[@class='nui-toolbar-item']/div//span[2]").click()
time.sleep(10)
self.wb.quit()
if __name__ == '__main__':
result = Wb_tt()
item = result.wb_get()
info = result.wb_info(item)
result.wb_save(info)
result.Login_163()
result.Wite_email()
本文地址:https://blog.csdn.net/weixin_44369251/article/details/107675754
下一篇: 百度地图如何设置明星语音导航?