100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库

python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库

时间:2021-11-16 01:21:41

相关推荐

python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库

python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库

准备阶段

在正式开始在前需要先准备好做爬虫的工具,本例使用chrome无头浏览器进行爬取工作,也可使用其他浏览器,程序中的其他可替代工具在此之后不再一一赘述,有一些不明白的地方可以自行百度有错误的地方欢迎大家指正,大家共同学习共同进步!!

需要用到的库:

pymongoseleniumcsvtime

爬虫思路分析

从csv文件读取好友qq号码构造url链接使用chrome + selenium登录QQ,选择账号密码的等率方式爬取好友说说的发表的时间信息把爬取到的信息存储在mongodb中

从qq邮箱获取好友列表,存储为csv文件

打开qq邮箱选择通讯录 > 工具 > 导出联系人文件选择部分好友文件导出,保存为csv文件,之后便于从csv文件读取好友qq号

观察源码,选择适当的筛选方法

写入数据库

爬虫代码如下:

'''python#导入程序需要的库from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsimport timeimport csvimport pymongo#链接数据库client = pymongo.MongoClient('localhost',27017)#创建数据库和数据集合net_speader = client['net_speader']qq_data = net_speader['qq_data']chrome_options = Options()#选择无头chrome,并设置窗口最大化chrome_options.add_argument('--headless')driver = webdriver.Chrome(chrome_options=chrome_options)driver.maximize_window()#定义获取信息的函数def get_info(qq):#声明变量global time#请求url隐式等待15sdriver.get('https://user./{}/311'.format(qq))driver.implicitly_wait(15)#判断页面是否需要登陆,通过查找是否有ID为login_div的div标签来进行判断try:driver.find_element_by_id('login_div')a = Trueexcept:a = False#如果需要登陆则切换到需要登陆的框架进行登陆if a == True:driver.switch_to.frame('login_frame')driver.find_element_by_id('switcher_plogin').click()driver.find_element_by_id('u').clear()driver.find_element_by_id('u').send_keys('你的qq号码')driver.find_element_by_id('p').clear()driver.find_element_by_id('p').send_keys('你的qq号密码')driver.find_element_by_id('login_button').click()time.sleep(5)driver.implicitly_wait(3)#通过查找是否有ID为QM_OwnerInfo_Icon的div标签来判断是否有权限访问好友的qq空间try:driver.find_element_by_id('QM_OwnerInfo_Icon')b = Trueexcept:b = False#如果可以访问则切换到好友说说框架进行数据的爬取和储存if b == True:driver.switch_to.frame('app_canvas_frame')contents = driver.find_elements_by_css_selector('.content')times = driver.find_elements_by_css_selector('.c_tx.c_tx3.goDetail')for content,time in zip(contents,times):data = {'time':time.text,'content':content.text}print(data)qq_data.insert_one(data)#主程序入口,通过csv库读取通讯录文件,存入列表if __name__ == '__main__':qq_lists = []fp = open(r'W:\text\qqmail.csv',encoding='gb18030',errors='ignore')reader = csv.DictReader(fp)for row in reader:qq_lists.append(row['qqmail'].split('@')[0])fp.close()print(qq_lists)for i in qq_lists:get_info(i)'''

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。