刚刚開始学。

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

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

分词和推荐后面在整合

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. iOS学习笔记21-推送证书与秘钥申请

    ---恢复内容开始--- 一.iOS证书 iOS常用的证书包括开发证书和发布证书,无论是真机调试还是最终发布应用到App Store这两个证书都是必须的,它是iOS开发的基本证书.Xcode7以后真机 ...

  2. 刷题总结:最长公共字串(spoj1811)(后缀自动机)

    题目: 就不贴了吧···如题: 题解: 后缀自动机模版题:没啥好说的···· 代码: #include<iostream> #include<cstdio> #include& ...

  3. 常州模拟赛d3t2 灰狼呼唤着同胞

    题目背景 我的母亲柯蒂丽亚,是一个舞者.身披罗纱,一身异国装扮的她,来自灰狼的村子. 曾经在灰狼村子担任女侍的她,被认定在某晚犯下可怕的罪行之后,被赶出了村子. 一切的元凶,都要回到母亲犯下重罪的那一 ...

  4. Tree 树(树形期望dp)

    题意也是需要解释一下的,这个期望步数,是需要求无限步的时候的,就是你只要能到达,都要算上去, 这个我一开始真的没什么思路,打了暴力,搞一个精度,结果全超时了,看来精度定的太细了. 出题人的题解是这个, ...

  5. Numpy 花式索引

    记住:花式索引跟切片不一样,它总是将数据复制到新数组中. 一 给定一个列表,返回索引为1,3,4,5,6的数组 2 针对二维数组 需要注意的一点是,对于花式索引.对照下后面的两种方式,查询结果的不同.

  6. 史上最详细的linux关于connect: network is unreachable 问题的解决方案

    1.虚拟机常用连接网络方式有两种:桥接和NAT. 使用桥接模式:则保证虚拟机的网段与物理机的网段保持一致.如下: 虚拟机网卡配置: 物理机使用WiFi接入网络(我用的是WiFi,你们可能用的是有线道理 ...

  7. 花匠(codevs 3289)

    题目描述 Description 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希望剩下的花 ...

  8. LeetCode OJ--Search in Rotated Sorted Array

    http://oj.leetcode.com/problems/search-in-rotated-sorted-array/ 转换了一次的有序数组,进行类似二分查找. 从begin到mid和从mid ...

  9. js动态适配移动端font-size,单位:rem

    比如:目前我手中有一张psd图,大小为640*1010,适配苹果5的手机. 方法步骤: 1.我采用font-size=10px为640*1010手机的初始像素大小:  1rem=10px: 此时psd ...

  10. 【nodejs原理&源码赏析(3)】欣赏手术级的原型链加工艺术

    目录 一. 概述 二. 原型链基础知识 三. Worker类的原型链加工 四. 实例的生成 五. 最后一个问题 六. 一些心得 示例代码托管在:http://www.github.com/dashno ...