用Python爬取QQ空间说说和相册!还不让我访问!

news/2024/10/31 5:31:16/

QQ 空间在 2005 年被腾讯开发,已经经历了 15 个年头,在还没有微信的年代,看网友发表的心情、心事、照片大多都在 QQ 空间的里。它承载了80、90 后的大量青春,下面我们一起用 selenium 模块导出说说和相册回忆青春吧

安装 selenium selenium 是一个在浏览器中运行,以模拟用户操作浏览器的方式获取网页源码,使用 pip 安装 selenium 模块 pip install selenium 复制代码 查看 chrome 浏览器版本并下载 对应的 chrome 浏览器驱动

在 http://npm.taobao.org/mirrors/chromedriver 网址中找到相同版本的 chrome 驱动,并放在 python 程序运行的同一个文件夹中 登陆 按 F12 检擦网页源代码,找到登录和密码的文本框,如下图所示

def login(login_qq,password, business_qq): ''' 登陆 :param login_qq: 登陆用的QQ :param password: 登陆的QQ密码 :param business_qq: 业务QQ :return: driver ''' driver = webdriver.Chrome()

driver.get('https://user.qzone.qq.com/{}/311'.format(business_qq))  # URL
driver.implicitly_wait(10)  # 隐示等待,为了等待充分加载好网址
driver.find_element_by_id('login_div')
driver.switch_to.frame('login_frame')  # 切到输入账号密码的frame
driver.find_element_by_id('switcher_plogin').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('login_button').click()  # 点击‘登录’
driver.switch_to.default_content()driver.implicitly_wait(10)
time.sleep(5)try:driver.find_element_by_id('QM_OwnerInfo_Icon')return driver
except:print('不能访问' + business_qq)return None

复制代码 说说 登录 QQ 后默认的页面就在说说的界面,显示一页的说说是滚动加载的,必须要多次下拉滚动条后才能获取到该页所有的说说,然后用 BeautifulSoup 模块构建对象解析页面,下图是放说说的 iframe

def get_shuoshuo(driver):

page = 1
while True:# 下拉滚动条for j in range(1, 5):driver.execute_script("window.scrollBy(0,5000)")time.sleep(2)# 切换 framedriver.switch_to.frame('app_canvas_frame')# 构建 BeautifulSoup 对象bs = BeautifulSoup(driver.page_source.encode('GBK', 'ignore').decode('gbk'))# 找到页面上的所有说说pres = bs.find_all('pre', class_='content')for pre in pres:shuoshuo = pre.texttx = pre.parent.parent.find('a', class_="c_tx c_tx3 goDetail")['title']print(tx + ":" + shuoshuo)# 页数判断page = page + 1maxPage = bs.find('a', title='末页').textif int(maxPage) < page:breakdriver.find_element_by_link_text(u'下一页').click()# 回到主文档driver.switch_to.default_content()# 等待页面加载time.sleep(3)

复制代码 相册 下载相册里面的照片需要 selenium 模块模拟鼠标一步步点击页面,先点击上方的相册按钮,进去就是多个相册的列表,下图是单个相册的超链接

在单个相册中点击照片,界面如下图

def get_photo(driver):

# 照片下载路径
photo_path = "C:/Users/xxx/Desktop/photo/{}/{}.jpg"# 相册索引
photoIndex = 1while True:# 回到主文档driver.switch_to.default_content()# driver.switch_to.parent_frame()# 点击头部的相册按钮driver.find_element_by_xpath('//*[@id="menuContainer"]/div/ul/li[3]/a').click()#等待加载driver.implicitly_wait(10)time.sleep(3)# 切换 framedriver.switch_to.frame('app_canvas_frame')# 各个相册的超链接a = driver.find_elements_by_class_name('album-cover')# 单个相册a[photoIndex].click()driver.implicitly_wait(10)time.sleep(3)# 相册的第一张图p = driver.find_elements_by_class_name('item-cover')[0]p.click()time.sleep(3)# 相册大图在父frame,切换到父framedriver.switch_to.parent_frame()# 循环相册中的照片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, photo_path.format(qq, name))# 取下面的 当前照片张数/总照片数量counts = driver.find_element_by_xpath('//*[@id="js-ctn-infoBar"]/div/div[1]/span').textcounts = counts.split('/')# 最后一张的时候退出照片浏览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()breakelse:time.sleep(5)# 相册数量比较,是否下载了全部的相册photoIndex = photoIndex + 1if len(a) <= photoIndex:break

复制代码 示例结果

总结 大家在看十几年前的说说和照片是不是感觉满满的黑历史快要溢出屏幕了。时光荏苒、岁月如梭,愿一切安好。

近期有很多朋友通过私信咨询有关Python学习问题。为便于交流,点击蓝色自己加入讨论解答资源基地

 


http://www.ppmy.cn/news/266965.html

相关文章

python破解qq空间访问权限_怎么利用爬虫爬取QQ空间中设置了权限的无法正常访问的内容?...

怎么利用爬虫爬取QQ空间中设置了权限的无法正常访问的内容&#xff1f;比如很多人的空间不允许别人访问&#xff0c;或者有些相册不允许别人访问 回复内容&#xff1a; 你把 『利用爬虫爬取』 这个定语去掉&#xff0c;能做到&#xff0c;再去考虑 『利用爬虫爬取』 这个问题。…

QQ空间权限限制破解思路

QQ空间是腾讯公司很有活力的产品,用户量非常巨大。多年前并不流行,但现在越来越多的用户在上面分享自己的照片新鲜事,QQ作为一个通讯工具,有时承载了太多的事情,很多不同的联系人都加在上面,但是有些时候,我们只是因为工作上的关系而加一下QQ,但是并不想让他们看到我们…

解析Windows 2008系统的数百个服务

在下面的列表里面&#xff0c;大家请注意一下各种颜色&#xff0c; 服务名称 描述 最佳建议 第二建议 服务路径 .NET Runtime Optimization Service v2.0.50215_X86 对使用下一代技术编写的程序的运行提供优化。该服务的默认运行方式是手动&#xff0c; 不建议更改。 \\WINDOWS…

基于Snort的入侵检测系统

基于Snort的入侵检测系统 用Snort,Apache,MySQL,PHP及ACID构建高级IDS 第一章 入侵检测系统及Snort介绍 在当今的企业应用环境中&#xff0c;安全是所有网络面临的大问题。黑客和入侵者已成功的入侵了一些大公司的网络及网站。目前已经存在一些保护网络架构及通信安全的方法&a…

解析windows 2008 服务

.NET Runtime Optimization Service v2.0.50215_X86 对使用下一代技术编写的程序的运行提供优化。该服务的默认运行方式是手动&#xff0c;不建议更改。 \\WINDOWS\Microsoft.NET\Framework\v2.0.50215\mscorsvw.exe 估计使用该技术之后&#xff0c;运行.Net技术编写的程序时执…

完整的网络端口表《三》

防火墙相关 106 Question:CacheEngine是否具有URL过滤功能&#xff1f; Answer:CacheEngine1.7-2.0版本的软件支持一种叫URL Blocking的功能&#xff0c;该功能是在 CacheEngine的适配器接口上进行配置实现的&#xff0c;它可以将由特定地址来的流量阻断。CacheEngine2.1版本…

Windows 2008系统的数百个服务

在下面的列表里面&#xff0c;大家请注意一下各种颜色&#xff0c;服务名称描述 最佳建议第二建议服务路径.NET Runtime Optimization Service v2.0.50215_X86对使用下一代技术编写的程序的运行提供优化。该服务的默认运行方式是手动&#xff0c;不建议更改。//WINDOWS/Microso…

windows server 2008 系统服务详解和优化配置

服务名称 描述 最佳建议 第二建议 服务路径 .NET Runtime Optimization Service v2.0.50215_X86 对使用下一代技术编写的程序的运行提供优化。该服务的默认运行方式是手动&#xff0c;不建议更改。 \\WINDOWS\Microsoft.NET\Framework\v2.0.50215\mscorsvw.exe 估计使用该技…