刚刚開始学。

目的地是两个。一个微博,一个贴吧

存入的话,临时还没想那么多。先存到本地目录吧

分词和推荐后面在整合

mysql mongodb hadoop redius 后面在用

我最终知道为什么大家都推荐用python写爬虫了。。。我擦。一些开源的包实在写的太好了

我開始I还百思不得其解的为什么要用python这种语言。我真的用起来非常”蛋疼“

并且。我用这门语言真的像我当初用c语言一样的用的。纯粹的用面向过程的思想写。

一点一点墨迹。。

。尽管我知道他有面向对象的特性。。

可是怎么都认为不能习惯,不要说和C# .net 来比

我认为和java 的风格也相差非常大啊。并且即使比c或者matlab 尽管编码非常快。可是keyword和执行调试机制还不是非常熟悉。

。。

你懂的。我非常痛苦

直到我调试模拟认证……做过的人肯定会有经验。我之前工作用.net 做过爬虫(当时也就有个概念),

后来在学习过程里又用java 写过爬虫。爬阿里速卖通。结果失败了(我如今明确当时为什么我失败了。我当时都已经拿到Outh的ssid了

这个ssid 是 验证用户password正确后发回的授权代码,仅仅要有这个全局就不用认证。但是就是跳不到指定的页面。我如今认为肯定是自己主动跳转location

搞鬼,当然可能还有cookie的原因)可是在python包里完美攻克了这两个问题,全然不用你操心。

所有的cookie从第一个页面到最后目的页面所有接住了

所有写到文件,并且,最重要的是从请求登陆到指定主页之间的授权跳转request(不过head头之间的跳转,全然没有页面)全然被自己主动化处理了

就像浏览器自己处理一样,这让我非常是大喜啊。省了非常多中间页面模拟的麻烦啊!

。!

!!

!!。!!!

!!

!!

!!!!

ubuntu14.04  python 自带,

安装了一个beautifulsoup 的 解析器 ,这里我装的是新版本号。不是apt-get自带的版本号

#安装版本号4

apt-get install python-bs4 python-bs4-doc

開始

import cookielib

import os

import re

import urllib

import urllib2

import math



auth_url = 'http://www.weibo.cn'

home_url = 'http://www.weibo.cn';

filename='FileCookieJar.txt'



#正則表達式一定要从小往大了写,先配对好配对的部分,先配对特征突出的部分,在往大了写,不然根本写不出来

#[\u4E00-\u9FA5] 这个表示中国字。 之前是没有加一对小括号的。加上表示取出group,在模式串前面写上u 表示unicode 编码的意思?

#之前的大部分样例都是写上个r

reg=u"<a href=('http://login.weibo.cn/[^\u4E00-\u9FA5]*?)[>]+?

[\u4E00-\u9FA5]{2}</a>" 

pattern=re.compile(reg)



req = urllib2.Request(home_url) 

req.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')

#这一步是把cookies 写入对应的文件

ckjar = cookielib.MozillaCookieJar(filename) 

ckproc = urllib2.HTTPCookieProcessor(ckjar)



opener = urllib2.build_opener(ckproc)



f = opener.open(req)

#把吃下来的网页写成utf-8 的格式

htm = f.read().decode('utf-8')

f.close()

ckjar.save(ignore_discard=True, ignore_expires=True)

print htm



#假设要用group 就不能写findall,要用search 或者写finditer 这两个返回的都是match 对象,后面的返回的应该是match列表

#findall 返回的是列表不是match列表 ,finditer 返回的结果能够用 遍历 for match in result : print match.group(1) 

loginweb=pattern.search(htm).group(1)

print loginweb

#表示从第二个取到倒数第二个,去掉模式串中两头的单引號

loginweb=loginweb[1:-1]

print loginweb

params=loginweb.split(';')

for param in params:

    print param



wl=WeiboLogin(loginweb,"","")

wl.getweibologin()

这里补充一下:文件头一定要加:

#!/usr/bin/env python

#_*_ coding: utf-8_*_

不然中文的凝视都会报错

接着用上了面向对象的思想

新建了一个类,这也是痛苦的作死过程,可是好歹最后学到了东西

#类会先运行这个函数。构造函数初始化,这个能够自己改,能够重载

def __init__(self, urlse,user, pwd):

        self.url=urlse

#定义拿到登陆页面的方法。想拿到第一步cookie

def getweibologin(self):

        filename='FileCookieJar.txt'

        ckjar = cookielib.MozillaCookieJar(filename)

        print self.url

        req = urllib2.Request(self.url)

        req.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')

        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(ckjar) )

        f = opener.open(req) 

        htm = f.read().decode('utf-8')

        f.close()

        ckjar.save(ignore_discard=True, ignore_expires=True)

        self.loginweb1(htm)

#模拟登陆的方法

def loginweb1(self,sweb):

        soup=BeautifulSoup(sweb)

        ##这里要用find不用findAll,因findall 拿到的是一系列标签的list

#而且后面大括号表示筛选条件,中括号表示取出标签相应的值

        resp1 = soup.find('input', attrs = {'name':'vk'})['value']

        resp2=soup.find('input',attrs={'name':'backURL'})['value']

        flag=resp1.split('_')[0] #python 从零開始

        passwordflag="password_"+flag

        print passwordflag

        filename='FileCookieJar.txt'

        ckjar = cookielib.MozillaCookieJar(filename)

        rand=random.randint(500000000, 999999999)#生成随机数的方法

#这里也要注意。fiddler的页面请求没有主域名。这里我是把域名拼接起来的。这个真没办法。

还有type 的控制,就是页面请求前面带上的http://

#至于是post传值还是get传值,这个包没有规定,假设data 有值就是post方法,假设没有值,那就是get 。可是get方法的请求连接一定要自己拼接好或者继承好

#这个就是精华地方。他从登陆到得到主页面 就这么一个步骤,中间的location的跳转过程所有自己主动完毕,自己主动跳转。

參数cookie所有继承,方便,又不会出错

#这样就完毕了登陆过程,就能够找到人物关系,能够后面的步骤了



        surl="http://login.weibo.cn/login/?rand="+str(rand)+"&backURL=http%3A%2F%2Fweibo.cn%2F&backTitle=%E5%BE%AE%E5%8D%9A&vt=4&revalid=2&ns=1"

        print surl

        req = urllib2.Request(surl)

        req.add_header('Accept','text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')

        #req.add_header('Accept-Encoding','gzip, deflate') #之所以要凝视掉它。是由于加上后,会影响后面的解析,压缩后的页面解析会出问题。干脆不要压缩

        req.add_header('Accept-Language','zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3')

        req.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')

req.add_header('Referer','http://login.weibo.cn/login/?

ns=1&revalid=2&backURL=http%3A%2F%2Fweibo.cn%2F&backTitle=%CE%A2%B2%A9&vt=')

        postdata=urllib.urlencode({

                                   'mobile':'账户',#这里换成你的账户

                                   passwordflag:'password',##这里换成你的password

                                   'remember':'on',

                                   'backURL'  :  'http%3A%2F%2Fweibo.cn%2F',

                                   'backTitle'  :  '微博',

                                   'tryCount'   :'',

                                   'vk'  :  resp1,

                                   'submit'  :  '登录'

                                   })

        req.add_data(postdata)

        #req.add_header('host', 'login.weibo.cn')#拼接域名的话就不必要填这两个了

        #req.host='login.weibo.cn'

        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(ckjar) )

        f = opener.open(req) 

        htm = f.read().decode('utf-8')

        print htm

        f.close()

        ckjar.save(ignore_discard=True, ignore_expires=True)

        self.findweibo(htm)

#解析定位到自己的微博

def findweibo(self,sweb):

        soup=BeautifulSoup(sweb)

        c=soup.find('div', attrs = {'class':'tip2'})

        print c

        aim=BeautifulSoup(str(c))

        ax=aim.findAll('a')[0]['href']

        print ax

#这里还补充一个调试技巧。由于分开类来写了。假设从头開始调试要非常长步骤时间,并且重复登陆或者搜集同一个页面会被觉得蜘蛛盗链

#所以在py 文件中 不是class里 和class 同级别缩进增加

if __name__ == '__main__':

#写入调用方法的逻辑

用类名().详细方法(參数列表); #相当于实例化对象,然后调用里面方法,然后就能够直接跳到方法里去调试了

明天继续研究怎样抽取微博数据。爱好社区和人物关系数据

补充fiddler 监測浏览器的时候,google chrome 会有问题,监測不了,不知道是不是代理的问题。。

。不愿意深究了

我用的火狐浏览器測试是实用能够监測的。

爬虫模拟的时候用的也是火狐header。

假设你暂停了一下。在继续监測可能就监測不了了,仅仅能重开火狐才又恢复,不知道什么原因。

python 爬虫1 開始,先拿新浪微博開始的更多相关文章

  1. Python爬虫学习笔记之爬取新浪微博

    import requests from urllib.parse import urlencode from pyquery import PyQuery as pq from pymongo im ...

  2. [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)

    转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...

  3. Python爬虫开源项目代码,爬取微信、淘宝、豆瓣、知乎、新浪微博、QQ、去哪网等 代码整理

    作者:SFLYQ 今天为大家整理了32个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.WechatSogou [ ...

  4. python爬虫实战(六)--------新浪微博(爬取微博帐号所发内容,不爬取历史内容)

    相关代码已经修改调试成功----2017-4-13 详情代码请移步我的github:https://github.com/pujinxiao/sina_spider 一.说明 1.目标网址:新浪微博 ...

  5. Python爬虫(一)

    花了四天的时间用python写了个简单的爬虫程序.整个过程分为两个部分:工具的安装和程序的实现 本文并没有讲程序的详细实现遇到的问题,而是对着手前一些前期的准备 第一部分(工具的安装) 开发工具的下载 ...

  6. Python爬虫之路——简单网页抓图升级版(添加多线程支持)

    转载自我的博客:http://www.mylonly.com/archives/1418.html 经过两个晚上的奋斗.将上一篇文章介绍的爬虫略微改进了下(Python爬虫之路--简单网页抓图),主要 ...

  7. python爬虫(一)_爬虫原理和数据抓取

    本篇将开始介绍Python原理,更多内容请参考:Python学习指南 为什么要做爬虫 著名的革命家.思想家.政治家.战略家.社会改革的主要领导人物马云曾经在2015年提到由IT转到DT,何谓DT,DT ...

  8. 23个Python爬虫开源项目代码,让你一次学个够

    今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.WechatSogou [1]– 微信公众号 ...

  9. 23个Python爬虫开源项目代码

    今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.WechatSogou [1]– 微信公众号 ...

  10. 23个Python爬虫开源项目代码,包含微信、淘宝、豆瓣、知乎、微博等

    今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心,所有链接指向GitHub,微信不能直接打开,老规矩,可以用电脑打开. 关注公众号「Pyth ...

随机推荐

  1. Android隐藏软键盘收回软键盘

    代码改变世界 Android隐藏软键盘收回软键盘 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPU ...

  2. [NOI2001] 食物链 (扩展域并查集)

    题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种,但是我 ...

  3. Linux(10):期中架构(2)--- NFS存储服务 & 实时同步

    1. 共享存储服务概念: # NFS是Network File System的缩写,中文意思是网络文件系统, # 它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录. 2. ...

  4. laravel 查询构造器

    //查询构造器public function query(){ $bool = DB::table('student')->insert([ ['name' => '王五', 'age' ...

  5. web开发规范文档

    Web前端开发规范文档 规范目的: 使开发流程更加规范化. 通用规范: TAB键用两个空格代替(windos下tab键占四个空格,linux下TAB键占八个空格).  CSS样式属性或者JAVASCR ...

  6. Maven实战:Pom.xml详解

    什么是pom?    pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的u ...

  7. Codeforces Round #320 (Div. 2) [Bayan Thanks-Round]

    一部分题解,算是自己SB了 上午的TC 也是这样 写好了代码,却一直没注意细节,然后以为错了. 此处省100字,ps 貌似紫了,作为一个老菜鸡,终于紫了 A,B 都是语文题 C: 给以一个三角形一样的 ...

  8. Java代码规范和质量检查插件-Checkstyle(官方资源)

    其实Checkstyle是一个JAR包,然后第三方开发者开发了Eclipse/IDEA的插件. 官网: https://github.com/checkstyle/checkstyle Eclipse ...

  9. Linux配置防火墙添加端口(Ubuntu/Debian无法使用此方法)

    注意:Ubuntu/Debian无法使用此方法 1.打开iptables vi /etc/sysconfig/iptables 2.添加防火墙规则 规则参考:http://www.cnblogs.co ...

  10. 【内核研究】处理者_Handler

    虽然MessageQueue提供了直接读/写的函数接口.但对于程序猿来说,一般不直接读/写消息队列.之前了解到,在Looper.loop()函数中.当取出消息后,会回调msg.target对象的han ...