2.7-2.9 python爬取好友空间说说(简陋版)

import requests
from selenium import webdriver
import time
from bs4 import BeautifulSoup

def login(qqno):
    #这句我也不知道干啥哎 貌似可有可无 有知道的朋友们可以留言噢
	chromedriver = r"C:\Users\lenovo\Anaconda3\chromedriver.exe"
    #打开浏览器
	browser = webdriver.Chrome(chromedriver)
    #进入好友说说页
	browser.get('https://user.qzone.qq.com/'+str(qqno)+'/311')
    #将浏览器最大化,这步也可有可无啦
	browser.maximize_window()
	time.sleep(2)
	#切换到目标元素所在的frame
	browser.switch_to.frame('login_frame')
    #然后下面一大串就是为了模拟浏览器登录账号
	browser.find_element_by_id('switcher_plogin').click()
	browser.find_element_by_id('u').clear()
	browser.find_element_by_id('u').send_keys('自己qq号')
	browser.find_element_by_id('p').clear()
	browser.find_element_by_id('p').send_keys('自己qq密码')
	browser.find_element_by_id('login_button').click()
	time.sleep(3)
	"""隐式等待
	当使用了隐士等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常
	换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0,一旦设置了隐式等待,则它
	存在整个 WebDriver 对象实例的声明周期中,隐式的等到会让一个正常响应的应用的测试变慢,它将会在寻找每个元素的时候都进行等待,
	这样会增加整个测试执行的时间。"""
	browser.implicitly_wait(3)
    #这步异常处理主要是为了判断是否进入了好友空间 因为有些好友会设置权限
	try:
		browser.find_element_by_id('QM_OwnerInfo_Icon')
		b = True
		page = 1
	except:
		b = False
	if b == True:
		#切换到目标元素所在的frame
		browser.switch_to.frame('app_canvas_frame')
		while page:
            #获取说说内容
			content = browser.find_elements_by_css_selector('.content')
            #获取对应说说的日期
			date = browser.find_elements_by_css_selector('.c_tx.c_tx3.goDetail')
			k = 1
			for con,da in zip(content,date):
                #下面这个为了判断好友说说里的是否有文字 一般没文字的都是转发 
				if con.text == '':
					data = {
							'内容':'这货转发了一条说说但是它没有转发配字',
							'日期':da.text
							}
					with open('说说.txt','a',encoding = 'utf-8') as f:
						f.write("{0:2}\t{1}\t{2:10}\n".format(k,'这货转发了一条说说但是它没有转发配字',da.text,chr(12288)))
					print(data)
				else:
					data = {
							'内容':con.text,
							'日期':da.text
							}
					with open('说说.txt','a',encoding = 'utf-8') as f:
						f.write("{0:2}\t{1}\t{2:10}\n".format(k,con.text.replace('\n','\\'),da.text,chr(12288)))
					print(data)
				k = k+1
            #下面这个异常处理主要是为了判断是否到了最后一页,如果是最后一页了就跳出while循环
			try:
				page = browser.find_element_by_link_text(u'下一页')
				page.click()
				time.sleep(5)
			except:
				break
    #这下面被注释掉的主要是为了获取cookies 但是没什么用就被我注释掉了
	'''cookie = browser.get_cookies()
				cookie_dict = []
				for c in cookie:
					ck = "{0}={1};".format(c['name'],c['value'])
					cookie_dict.append(ck)
				i = ''
				for c in cookie_dict:
					i = i+c
				browser.close()
				browser.quit()
				return i'''

def main():
	friendsqqno = '好友qq号'
	login(friendsqqno)

if __name__ == '__main__':
	main()

这么三天就搞出来这么一个小东西,输出来的格式其实也没有规范的。跟有几个朋友说了,她们都觉得我好厉害,其实只有我自己知道,我真的很菜,而且只是刚起步。要继续努力呀!

大家想要相互交流可以留言噢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值