• 大小: 61KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-07-10
  • 语言: 其他
  • 标签:

资源简介

利用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

评论

共有 条评论