QQ空间从2005年腾讯开发至今已有15年,在还没有微信的时代,从网民发表的心情、心情、照片来看,大部分都在QQ空间。包含了80、90后的很多青春。让我们用塞林厄姆模块导出故事,和专辑一起回忆青春。
安装Selenium
Selenium是在浏览器中运行的web源代码,使用pip安装selenium模块,并模拟用户操作浏览器的方式
Pip install selenium
检查Chrome浏览器版本并下载相应的chrome浏览器驱动程序
在网站上找到相同版本的chrome驱动程序,并将其放置在运行python程序的同一文件夹中
登陆
按F12键确认web源代码,并找到登录和密码的文本框,如下图所示
def log in(log in _ QQ、password、business _ QQ) :
单击“”
登陆
:param login_QQ:登录的QQ
:param password:登录的QQ密码
:param business_QQ:业务QQ
: return :驱动程序
单击“”
驱动程序=webdriver.chrome()
Driver.get ('{}/311 ')。format(business _ QQ)# URL
Driver.implicitly_wait(10) #暗示等待URL完全加载
driver . find _ element _ by _ id(' log in _ div ')
驱动程序。(' login_frame') #剪切到输入帐户密码的frame
driver . find _ element _ by _ id(' switcher _ plog in ')。click () # # #单击“帐户密码登录”
Driver.find _ element _ by _ id ('u ')。clear () # #清除帐户列
Driver.find _ element _ by _ id ('u ')。send _ keys (login _ QQ) #输入帐号
Driver.find _ element _ by _ id ('p ')。clear () #清除密码列
Driver.find _ element _ by _ id ('p ')。输入send _ keys (password) #密码
driver . find _ element _ by _ id(' log in _ button ')。click () #单击“登录”
司机。()
Driver.implicitly_wait(10)
(5)
tree :
driver . find _ element _ by _ id(' QM _ owner info _ icon ')
Return驱动程序
Except:
Print(“不可访问”business_qq)
Return None
说
登录QQ后,主页面是显示一个页面的界面,叫做滚动加载,需要多次拉动滚动条才能得到页面上的所有话。然后,使用BeautifulSoup模块构建对象分析页面。下图是说话的iframe。
def get _ shuoshuo(驱动程序):
页面=1
While True:
#下拉滚动条
For j in range(1,5):
Driver.execute_script
("window.scrollBy(0,5000)") (2) # 切换 frame driver.('app_canvas_frame') # 构建 BeautifulSoup 对象 bs = BeautifulSou('GBK', 'ignore').decode('gbk')) # 找到页面上的所有说说 pres = bs.find_all('pre', class_='content') for pre in pres: shuoshuo = tx = ('a', class_="c_tx c_tx3 goDetail")['title'] print(tx + ":" + shuoshuo) # 页数判断 page = page + 1 maxPage = bs.find('a', title='末页').text if int(maxPage) < page: break driver.find_element_by_link_text(u'下一页').click() # 回到主文档 driver.() # 等待页面加载 (3)相册
下载相册里面的照片需要 selenium 模块模拟鼠标一步步点击页面,先点击上方的相册按钮,进去就是多个相册的列表,下图是单个相册的超链接
在单个相册中点击照片,界面如下图
def get_photo(driver):
# 照片下载路径
photo_path = "C:/Users/xxx/Desktop/photo/{}/{}.jpg"
# 相册索引
photoIndex = 1
while True:
# 回到主文档
driver.()
# driver.()
# 点击头部的相册按钮
driver.find_element_by_xpath('//*[@id="menuContainer"]/div/ul/li[3]/a').click()
#等待加载
driver.implicitly_wait(10)
(3)
# 切换 frame
driver.('app_canvas_frame')
# 各个相册的超链接
a = driver.find_elements_by_class_name('album-cover')
# 单个相册
a[photoIndex].click()
driver.implicitly_wait(10)
(3)
# 相册的第一张图
p = driver.find_elements_by_class_name('item-cover')[0]
p.click()
(3)
# 相册大图在父frame,切换到父frame
driver.()
# 循环相册中的照片
while True:
# 照片url地址和名称
img = driver.find_element_by_id('js-img-disp')
src = img.get_attribute('src').replace('&t=5', '')
name = driver.find_element_by_id("js-photo-name").text
# 下载
urlretrieve(src, (qq, name))
# 取下面的 当前照片张数/总照片数量
counts = driver.find_element_by_xpath('//*[@id="js-ctn-infoBar"]/div/div[1]/span').text
counts = coun('/')
# 最后一张的时候退出照片浏览
if int(counts[0]) == int(counts[1]):
# 右上角的 X 按钮
driver.find_element_by_xpath('//*[@id="js-viewer-main"]/div[1]/a').click()
break
# 点击 下一张,网页加载慢,所以10次加载
for i in (1, 10):
if driver.find_element_by_id('js-btn-nextPhoto'):
n = driver.find_element_by_id('js-btn-nextPhoto')
ActionChains(driver).click(n).perform()
break
else:
(5)
# 相册数量比较,是否下载了全部的相册
photoIndex = photoIndex + 1
if len(a) <= photoIndex:
break
示例结果
总结
大家在看几年前的说说和照片是不是感觉满满的黑历史快要溢出屏幕了。时光荏苒、岁月如梭,愿一切安好