测试开发Python培训:抓取新浪微博抓取数据-技术篇

测试开发Python培训:抓取新浪微博抓取数据-技术篇

poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。在poptest的selenium的课程中,我们在培训的课程里讲python的语言,也是通过项目实战的方式进行讲解,前期分享了个新浪微博的登陆功能,这次在通过抓取新浪微博数据进一步讲解脚本。(大家对课程感兴趣,请加qq:564202718)

微博有发布微博功能,微博发布后需要验证内容,那么如何验证微博发布数据的正确性,首先要获取微博上的数据,下面我们就用爬虫技术来实现抓取数据,在Poptest课堂上我们用另外一个商业项目来做的案例实现,在这里为了大家都能学习到我用微博来举例。 报名学习课程请加qq:564202718

# import 这边需要注意的是只有一个rsa这个模块是需要install的,其他的都是内置

import re , urllib.parse , urllib.request , http.cookiejar , base64 , binascii , rsa

# 以下4行代码说简单点就是让你接下来的所有get和post请求都带上已经获取的cookie,因为稍大些的网站的登陆验证全靠cookie

cj = http.cookiejar.LWPCookieJar()

cookie_support = urllib.request.HTTPCookieProcessor(cj)

opener = urllib.request.build_opener(cookie_support , urllib.request.HTTPHandler)

urllib.request.install_opener(opener)

# 封装一个用于get的函数,新浪微博这边get出来的内容编码都是-8,所以把utf-8写死在里边了,真实项目中建议根据内容实际编码来决定

def getData(url) :

    request = urllib.request.Request(url)

    response = urllib.request.urlopen(request)

    text = response.read().decode(‘utf-8‘)

    return text

# 封装一个用于post的函数,验证密码和用户名都是post的,所以这个postData在本demo中专门用于验证用户名和密码

def postData(url , data) :

  # headers需要我们自己来模拟

    headers = {‘User-Agent‘ ‘Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)‘}

  # 这里的urlencode用于把一个请求对象用‘&‘来接来字符串化,接着就是编码成utf-8

    data = urllib.parse.urlencode(data).encode(‘utf-8‘)

    request = urllib.request.Request(url , data , headers)

    response = urllib.request.urlopen(request)

    text = response.read().decode(‘gbk‘)

    return text

def login_weibo(nick , pwd) :

    #==========================获取servertime , pcid , pubkey , rsakv===========================

  # 预登陆请求,获取到若干参数

    prelogin_url = ‘http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=%s&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.15)&_=1400822309846‘ % nick

    preLogin = getData(prelogin_url)

  # 下面获取的四个值都是接下来要使用的

    servertime = re.findall(‘"servertime":(.*?),‘ , preLogin)[0]

    pubkey = re.findall(‘"pubkey":"(.*?)",‘ , preLogin)[0]

    rsakv = re.findall(‘"rsakv":"(.*?)",‘ , preLogin)[0]

    nonce = re.findall(‘"nonce":"(.*?)",‘ , preLogin)[0]

    #===============对用户名和密码加密================

  # 好,你已经来到登陆新浪微博最难的一部分了,如果这部分没有大神出来指点一下,那就真是太难了,我也不想多说什么,反正就是各种加密,最后形成了加密后的su和sp

    su = base64.b64encode(bytes(urllib.request.quote(nick) , encoding = ‘utf-8‘))

    rsaPublickey = int(pubkey , 16)

    key = rsa.PublicKey(rsaPublickey , 65537)

  # 稍微说一下的是在我网上搜到的文章中,有些文章里并没有对拼接起来的字符串进行bytes,这是python3的新方法好像是。rsa.encrypt需要一个字节参数,这一点和之前不一样。其实上面的base64.b64encode也一样

    message = bytes(str(servertime) + ‘\t‘ + str(nonce) + ‘\n‘ + str(pwd) , encoding = ‘utf-8‘)

    sp = binascii.b2a_hex(rsa.encrypt(message , key))

    #=======================登录=======================

  

  #param就是激动人心的登陆post参数,这个参数用到了若干个上面第一步获取到的数据,可说的不多

    param = {‘entry‘ ‘weibo‘ ‘gateway‘ 1 ‘from‘ : ‘‘ , ‘savestate‘ : 7 , ‘useticket‘ : 1 , ‘pagerefer‘ : ‘http://login.sina.com.cn/sso/logout.php?entry=miniblog&r=http%3A%2F%2Fweibo.com%2Flogout.php%3Fbackurl%3D‘ , ‘vsnf‘ : 1 , ‘su‘ : su , ‘service‘ : ‘miniblog‘ , ‘servertime‘ : servertime , ‘nonce‘ : nonce , ‘pwencode‘ : ‘rsa2‘ , ‘rsakv‘ : rsakv , ‘sp‘ : sp , ‘sr‘ : ‘1680*1050‘ ,

             ‘encoding‘ ‘UTF-8‘ ‘prelt‘ 961 ‘url‘ ‘http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack‘}

  # 这里就是使用postData的唯一一处,也很简单

    = postData(‘http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)‘ , param)

  # 好了,当你的代码执行到这里时,已经完成了大部分了,可是有很多爬虫童鞋跟我一样还就栽在了这里,假如你跳过这里直接去执行获取粉丝的这几行代码你就会发现你获取的到还是让你登陆的页面,真郁闷啊,我就栽在这里长达一天啊

  # 好了,我们还是继续。这个urll是登陆之后新浪返回的一段脚本中定义的一个进一步登陆的url,之前还都是获取参数和验证之类的,这一步才是真正的登陆,所以你还需要再一次把这个urll获取到并用get登陆即可

    urll = re.findall("location.replace\(\‘(.*?)\‘\);" , s)[0]

    getData(urll)

    #======================获取粉丝====================

  # 如果你没有跳过刚才那个urll来到这里的话,那么恭喜你!你成功了,接下来就是你在新浪微博里畅爬的时候了,获取到任何你想获取到的数据了!

  # 可以尝试着获取你自己的微博主页看看,你就会发现那是一个多大几百kb的文件了

    text = getData(‘http://weibo.com/527891819/home?wvr=5&lf=reg‘)

    fp = open(‘yeah.txt‘ ‘w‘ , encoding = ‘utf-8‘)

    fp.write(text)

    fp.close()

login_weibo(‘你的微博邮箱‘ ‘你的微博密码‘)

时间: 2024-10-09 16:17:53

测试开发Python培训:抓取新浪微博抓取数据-技术篇的相关文章

测试开发Python培训:模拟登录新浪微博-技术篇

测试开发Python培训:模拟登录新浪微博-技术篇 一般一个初学者项目的起点就是登陆功能的自动化,而面临的项目不同实现的技术难度是不一样的,poptest在做测试开发培训中更加关注技术难点,掌握技术实现思路,提高动手能力.这里通过大家都能接触到的系统新浪微博,作为案例. 模拟登录功能比较简单,很多人在学习自动化的时候都会以登陆来作为自己的第一个学习案例,有点像开发语言中第一段代码都是helloworld!一样.登陆简单的模拟登录,直接发post请求就OK,很容易实现. 这里用新浪微博,就是技术实

测试开发Python培训:自动发布新浪微博-技术篇

测试开发Python培训:自动发布新浪微博-技术篇 在前面我们教大家如何登陆,大家需要先看自动登陆新浪微博(http://www.cnblogs.com/laoli0201/articles/4880969.html),再看这篇文章会好很多: 在上一篇python的自动化脚本中,把脚本中的发送请求数据修改就好,上一篇脚本代码替换掉: formData={ ‘location':'v6_content_home', 'appkey':'', ‘style_type':'1', ‘pic_id':'

测试开发Python培训:实现屌丝的黄色图片收藏愿望(小插曲)

男学员在学习python的自动化过程中对于爬虫很感兴趣,有些学员就想能收藏一些情色图片,供自己欣赏.作为讲师只能是满足愿望,帮助大家实现对美的追求,http://wanimal.lofter.com/?page=1,~_~ 第一步:分析请求页面 我们在上课的时候教给大家firefox,来分析请求页的html源代码,我们请求页面发现规律页面是http://wanimal.lofter.com/?page=2,只要替换掉数字2,变成数字就可以翻页,然后每一个页面里的图片地址发现规律如下<span s

Python爬虫实战四之抓取淘宝MM照片

福利啊福利,本次为大家带来的项目是抓取淘宝MM照片并保存起来,大家有没有很激动呢? 最新动态 更新时间:2015/8/2 最近好多读者反映代码已经不能用了,原因是淘宝索引页的MM链接改了.网站改版了,URL的索引已经和之前的不一样了,之前可以直接跳转到每个MM的个性域名,现在中间加了一个跳转页,本以为可以通过这个页面然后跳转到原来的个性域名,而经过一番折腾发现,这个跳转页中的内容是JS动态生成的,所以不能用Urllib库来直接抓取了,本篇就只提供学习思路,代码不能继续用了. 之后博主会利用其它方

抓取新浪微博数据存入MongoDB,避免重复插入微博数据的方法

def getMyDatalist(): #id这个key key = str(u'id').decode('utf-8') #存储旧数据的id列表 old_ids = [] #存储新微博的列表 extr_wb = [] #从MongoDB上获取的数据 old_datalist = weibodata.find() for old in old_datalist: old_ids.append(old[key]) #从微博上抓取新数据 data = client.statuses.home_ti

python爬虫----(6. scrapy框架,抓取亚马逊数据)

利用xpath()分析抓取数据还是比较简单的,只是网址的跳转和递归等比较麻烦.耽误了好久,还是豆瓣好呀,URL那么的规范.唉,亚马逊URL乱七八糟的.... 可能对url理解还不够. amazon ├── amazon │   ├── __init__.py │   ├── __init__.pyc │   ├── items.py │   ├── items.pyc │   ├── msic │   │   ├── __init__.py │   │   └── pad_urls.py │  

python爬虫beta版之抓取知乎单页面回答(low 逼版)

闲着无聊,逛知乎.发现想找点有意思的回答也不容易,就想说要不写个爬虫帮我把点赞数最多的给我搞下来方便阅读,也许还能做做数据分析(意淫中--) 鉴于之前用python写爬虫,帮运营人员抓取过京东的商品品牌以及分类,这次也是用python来搞简单的抓取单页面版,后期再补充哈. #-*- coding: UTF-8 -*- import requests import sys from bs4 import BeautifulSoup #------知乎答案收集---------- #获取网页body

利用python脚本(xpath)抓取数据

有人会问re和xpath是什么关系?如果你了解js与jquery,那么这个就很好理解了. 上一篇:利用python脚本(re)抓取美空mm图片 # -*- coding:utf-8 -*- from lxml import etree html = """ <!DOCTYPE html> <html> <head lang="en"> <title>我的文档</title> <meta ht

2020年第二期《python接口自动化+测试开发》课程,预售!

2020年第二期<python接口自动化+python测试开发>课程,12月15号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学,方便交流 本期上课时间:12月15号-3月29号,每周六.周日晚上20:30-22:30 报名费:报名费3000一人(周期3个月) 联系QQ:283340479 课表如下 课程主要涉及的内容: 1.fiddler抓包与接口测试(测试基础必备) 2.python+pytest框架实现接口自动化测试(pytest框架甩unittest几条街) 3.httpr