资源简介
利用selenium+PlantomJS登录+爬取感兴趣的用户的所有信息
包括昵称,认证,粉丝,关注,所有微博以及每条微博的转发,评论数量等
理论上来讲再加一个链接爬虫可以爬取新浪微博的所有数据
但是由于用的是无壳浏览器导致登录和加载页面速度比较慢
所以实际上基本不可能能实现爬取
代码写完调通就没有管过了,也没有优化过,不过基本的功能都可以实现
代码片段和文件信息
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By
import bs4
import time
def login(urlusernamepassword):
‘‘‘
用于登录微博
:param url:微博的登录接口
:param username: 用户名
:param password: 密码
:return: cookie
‘‘‘
#browser = webdriver.Chrome() #用谷歌浏览器实验
browser = webdriver.PhantomJS(“E:/phantomjs-2.1.1-windows/bin/phantomjs.exe“) #用PhantomJS
browser.maximize_window() #设置窗体为最大,如果没有这一行,表单可能无法操作
browser.get(url) #打开登陆用的网页
print(“开始登陆“)
username_ele = browser.find_element_by_id(“loginname“) #找到用于输入用户名的表格
username_ele.clear() #清空表格
username_ele.send_keys(username) #输入账户
password_ele = browser.find_element_by_name(“password“) #找到用于输入密码的表格
password_ele.clear() #清空表格
password_ele.send_keys(password) #输入密码
submit = browser.find_element_by_xpath(‘//*[@id=“pl_login_form“]/div/div[3]/div[6]/a/span‘) #找到用于提交表单的类型为submit的input
submit.click() #点击
time.sleep(5)
WebDriverWait(browser 10).until(expected_conditions.presence_of_element_located((By.CLASS_NAME ‘WB_miniblog‘))) #等待登陆页面加载完成
if is_ele_exist(browser“loginname“):
print(“登录失败“)
browser.quit()
return None
print(“登陆成功“)
#return print(browser.get_cookies()
return browser #返回获得的cookie
def is_ele_exist(browserid):
‘‘‘
根据一个id判断当前页面元素是否存在,find方法没有找到元素会抛出异常,利用异常判断元素是否存在
:param browser: 浏览器
:param id: 元素id
:return: 存在返回True,不存在返回False
‘‘‘
try:
s = browser.find_element_by_class_name(id)
return True
except:
return False
def getweibohtml(browserurl):
‘‘‘
用于加载我们要爬取的用户的动态页面(单个页面上的所有信息)
:param url: 要爬取用户的url
:param cookie: 用于认证用户
:return: 返回一个html页面
‘‘‘‘‘
#browser = webdriver.PhantomJS(“E:/phantomjs-2.1.1-windows/bin/phantomjs.exe“)
#browser = webdriver.Chrome()
#browser.add_cookie(cookie)
#判断broser是否可用
if browser == None:
return
browser.get(url)
browser.save_screenshot(“f:\\test1.png“)
js = “var q=document.body.scrollTop=100000“ #用于下滑页面的js命令
num = 0
#判断翻页按钮是否出现,如果没有出现,将鼠标下滑
while not is_ele_exist(browser“W_pages“):
num+=1
browser.execute_script(js)
print(“还未找到元素“)
#最多翻页十次,防止进入死循环
if(num>10):
break
print(“用户的一页信息已加载完毕“)
html = browser.page_source
return html
‘‘‘
def has_source(browserurl):
判断一个微博页面是否有微博,如果没有,返回Fasle
最开始考虑不周到,这个函数导致需要再次用webdriver打开页面
严重拖慢爬取速度,弃
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-06-03 22:50 微博爬虫\
文件 9489 2017-06-03 00:43 微博爬虫\weiboUtis.py
文件 199812 2017-06-03 01:00 微博爬虫\xuanzi.txt
- 上一篇:51单片机8位抢答器源程序
- 下一篇:arduion程序24个
评论
共有 条评论