使用Selenium实现微博爬虫:预登录、展开全文、翻页
优采云 发布时间: 2022-05-12 03:58使用Selenium实现微博爬虫:预登录、展开全文、翻页
点击上方蓝色字体,选择“标星公众号”
优质文章,第一时间送达
前言
在CSDN发的第一篇文章,时隔两年,终于实现了爬微博的自由!本文可以解决微博预登录、识别“展开全文”并爬取完整数据、翻页设置等问题。由于刚接触爬虫,有部分术语可能用的不正确,请大家多指正!
一、区分动态爬虫和静态爬虫
1、静态网页
静态网页是纯粹的HTML,没有后台数据库,不含程序,不可交互,体量较少,加载速度快。静态网页的爬取只需四个步骤:发送请求、获取相应内容、解析内容及保存数据。
2、动态网页
动态网页上的数据会随时间及用户交互发生变化,因此数据不会直接呈现在网页源代码中,数据将以Json的形式保存起来。因此,动态网页比静态网页多了一步,即需渲染获得相关数据。
3、区分动静态网页的方法
加载网页后,点击右键,选中“查看网页源代码”,如果网页上的绝大多数字段都出现源代码中,那么这就是静态网页,否则是动态网页。
二、动态爬虫的两种方法
1.逆向分析爬取动态网页
适用于调度资源所对应网址的数据为json格式,Javascript的触发调度。主要步骤是获取需要调度资源所对应的网址-访问网址获得该资源的数据。(此处不详细讲解)
2.使用Selenium库爬取动态网页
使用Selenium库,该库使用JavaScript模拟真实用户对浏览器进行操作。本案例将使用该方法。
三、安装Selenium库及下载浏览器补丁
1.Selenium库使用pip工具进行安装即可。
2.下载与Chrome浏览器版本匹配的浏览器补丁。
Step1:查看Chrome的版本
Step2:去下载相应版本的浏览器补丁。网址:
Step3:解压文件,并将之放到与python.exe同一文件下
四、页面打开及预登录
1.导入selenium包
from selenium import webdriver<br />from selenium.webdriver.support import expected_conditions as EC<br />from selenium.webdriver.support.ui import WebDriverWait<br />from selenium.webdriver.common.by import By<br />import time<br />import pandas as pd<br /><br />
2.打开页面
driver = webdriver.Chrome() <br />print('准备登陆Weibo.cn网站...')<br />#发送请求<br />driver.get("https://login.sina.com.cn/signup/signin.php")<br />wait = WebDriverWait(driver,5)<br />#重要:暂停1分钟进行预登陆,此处填写账号密码及验证<br />time.sleep(60)<br /><br />
3.采用交互式运行,运行完上面两段程序,会弹出一个框,这个框就是用来模拟网页的交互。在这个框中完成登录(包括填写登录名、密码及短信验证等)
4.完成预登录,则进入个人主页
五、关键词搜索操作
1.定位上图中的关键词输入框,并在框中输入搜索对象,如“努力学习”
#使用selector去定位关键词搜索框<br />s_input = driver.find_element_by_css_selector('#search_input')<br />#向搜索框中传入字段<br />s_input.send_keys("努力学习")<br />#定位搜索键<br />confirm_btn = driver.find_element_by_css_selector('#search_submit')<br />#点击<br />confirm_btn.click()<br /><br />
2.当完成上步的代码运行后,会弹出新的窗口,从个人主页跳到微博搜索页。但是driver仍在个人主页,需要人为进行driver的移动,将之移动到微博搜索页。
3.使用switch_to.window()方法移位
#人为移动driver<br />driver.switch_to.window(driver.window_handles[1])<br /><br />