python selenium学习之新浪微博
python selenium学习之新浪微博
运用知识点:
- 模拟登录
- 模拟鼠标事件
- 获取页面节点,解析
开始模拟登录:
第一步:实例化selenium对象
from selenium import webdriver
from selenium.webdriver import ChromeOptions
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation']) #规避检测
bro = webdriver.Chrome(options=option)
第二步:定位到账号密码和登录按钮,并输入账号密码点击登录按钮
利用谷歌浏览器F12开发者工具,很容易定位到
同理定位到密码和登录标签,然后输入账号密码并点击登录按钮
bro.get('https://weibo.com/')
bro.maximize_window()
sleep(1)
bro.find_element_by_id('loginname').send_keys('XXXXXX')#账号
sleep(1)
bro.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[2]/div/input').send_keys('XXXXX')#密码
sleep(0.5)
bro.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[6]/a').click()#登录
第三步:
打开新浪微博准备登录,发现不管密码正不正确都会跳转到手机扫码登录的页面
这里有很多方法可是太复杂,我们直接让程序在这里停几秒,拿出手机扫码就行这样最简单(扫码之后让页面刷新一下)
sleep(10)
bro.refresh() #刷新页面
到这里就登录成功了
第四步:定位到搜索框直接搜索要找的博主名
#这个搜索框里本来是有内容的所以要先点击一下
bro.find_element_by_xpath('//*[@id="plc_top"]/div/div/div[2]/input').click()
bro.find_element_by_xpath('//*[@id="plc_top"]/div/div/div[2]/input').send_keys('XXXXX')# 博主名
bro.find_element_by_xpath('//*[@id="plc_top"]/div/div/div[2]/input').send_keys(Keys.ENTER)# 输入回车
会来到这个页面
同样定位到昵称的链接点击一下就行了,但是这里它就会新开一个窗口,所以要切换窗口视角到窗口
bro.find_element_by_xpath('//*[@id="pl_feedlist_index"]/div[1]/div[1]/div/div[1]/a').click()
bro.switch_to.window(bro.window_handles[-1])#切换窗口视角
定位到他主页的“他的相册”并点击就可以来到照片墙了,这里默认只显示一点点,需要模拟鼠标拖动往下的动作,拿到所有图片。
分析页面找到图片链接都在这里,可以用它的class属性定位到
# 定位到他主页的“他的相册”并点击
bro.find_element_by_xpath('//*[@id="Pl_Official_Nav__2"]/div/div/table//tr/td[2]/a').click()
sleep(3)
for i in range(120): #模拟鼠标拖动往下的动作
sleep(0.5)
bro.execute_script('window.scrollBy(0,300)', '')#模拟鼠标拖动往下的动作
sleep(1)
srcs = bro.find_elements_by_class_name('photo_pict') #等待加载完毕 拿到所有图片链接的节点列表
遍历节点列表拿到所有的图片链接
for src in srcs:
gugu = src.get_attribute('src')
这里拿到的图片链接都是小图:https://wxt.sinaimg.cn/thumb300/a89b2d04gy1gl5a9m8bblj20go0go3yv.jpg?tags=%5B%5D
随便点开照片墙的一张图片等到大图,右键点击复制图片地址:https://wx1.sinaimg.cn/mw1024/a89b2d04gy1gl5a9m8bblj20go0go3yv.jpg
对比发现只有”thumb300“ 和”mw1024“不同,对链接中的thumb300经行替换就行了
gugugu = gugu.replace('thumb300', 'mw1024')
第五步:设置保存路径,requests.get().content拿到二进制数据并保存就ok了
整体代码:
j = 1 #计数
for src in srcs:
gugu = src.get_attribute('src') #拿到图片链接
gugugu = gugu.replace('thumb300', 'mw1024') #替换链接中的字符,得到大图链接
name = gugugu.split('/')[-1][13:20] # 随便起个图片名
path = './微博图片/' + name + '.jpg' #保存路径, 保存到当前目录下的微博图片文件夹中
re = requests.get(url=gugugu, headers=headers).content #拿到图片二进制数据
with open(path,'wb')as fp: # 持久化存储
fp.write(re)
print('保存成功{}张'.format(str(j)))
j += 1 #记录一共搞到了多少照片
print('全部完成')
这就全部完成了。视频什么的也是一样的,在第四步的时候找到视频对应的节点点击,然后模拟鼠标下拉加载出所有视频后分析视频链接的节点,拿到节点里面的链接用requests.get().content拿到数据并保存就行了。
注意所有定位节点操作之前要么time.sleep()几秒,要么用显示等待,不然会出现定位不到节点的情况
(没错用的是王大娘的微博作实例)
推荐阅读
-
python selenium学习之新浪微博
-
新浪微博第三方登录界面上下拉伸图片之第三方开源PullToZoomListViewEx(二)
-
新浪微博第三方登录界面上下拉伸图片之第三方开源PullToZoomListViewEx(一)
-
新浪微博第三方登录界面上下拉伸图片之第三方开源PullToZoomListViewEx(二)
-
新浪微博第三方登录界面上下拉伸图片之第三方开源PullToZoomListViewEx(一)
-
Python 获取新浪微博的最新公共微博实例分享
-
详解用python写网络爬虫-爬取新浪微博评论
-
Python使用新浪微博API发送微博的例子
-
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
-
python模拟新浪微博登陆功能(新浪微博爬虫)