python 爬虫1 開始,先拿新浪微博開始

刚刚開始学。

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

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

分词和推荐后面在整合

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。

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

时间: 2025-01-16 14:09:22

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

python 爬虫1 开始,先拿新浪微博开始

刚刚开始学. 目的地是两个,一个微博,一个贴吧 存入的话,暂时还没想那么多,先存到本地文件夹吧 分词和推荐后面在整合 mysql mongodb hadoop redius 后面在用 我终于知道为什么大家都推荐用python写爬虫了...我擦,一些开源的包实在写的太好了 我开始I还百思不得其解的为什么要用python这样的语言.我真的用起来很"蛋疼" 而且,我用这门语言真的像我当初用c语言一样的用的.纯粹的用面向过程的思想写. 一点一点墨迹...虽然我知道他有面向对象的特性...但是怎

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

一. 文章介绍 前一篇文章"[python爬虫] Selenium爬取新浪微博内容及用户信息"简单讲述了如何爬取新浪微博手机端用户信息和微博信息. 用户信息:包括用户ID.用户名.微博数.粉丝数.关注数等. 微博信息:包括转发或原创.点赞数.转发数.评论数.发布时间.微博内容等. 它主要通过从文本txt中读取用户id,通过"URL+用户ID" 访问个人网站,如柳岩: http://weibo.cn/guangxianliuya 因为手机端数据相对精简简单,所以采用输

[Python爬虫] Selenium爬取新浪微博移动端热点话题及评论 (下)

这篇文章主要讲述了使用python+selenium爬取新浪微博的热点话题和评论信息.其中使用该爬虫的缺点是效率极低,傻瓜式的爬虫,不能并行执行等,但是它的优点是采用分析DOM树结构分析网页源码并进行信息爬取,同时它可以通过浏览器进行爬取中间过程的演示及验证码的输入.这篇文章对爬虫的详细过程就不再论述了,主要是提供可运行的代码和运行截图即可.希望文章对你有所帮助吧~ 参考文章 [python爬虫] Selenium爬取新浪微博内容及用户信息 [Python爬虫] Selenium爬取新浪微博客户

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

转载自我的博客:http://www.mylonly.com/archives/1418.html 经过两个晚上的奋斗.将上一篇文章介绍的爬虫略微改进了下(Python爬虫之路--简单网页抓图),主要是将获取图片链接任务和下载图片任务用线程分开来处理了,并且这次的爬虫不只能够爬第一页的图片链接的,整个http://desk.zol.com.cn/meinv/以下的图片都会被爬到,并且提供了多种分辨率图片的文件下载,详细设置方法代码凝视里面有介绍. 这次的代码仍然有点不足,Ctrl-C无法终止程序

Python 爬虫 之 阅读呼叫转移(三)

尽管上一篇博客中我们能够连续地阅读章节了,可是.难道每一次看小说都执行一下我们的 Python 程序?连记录看到哪里都不行,每次都是又一次来过?当然不能这样,改! 如今这么多小说阅读器,我们仅仅须要把我们要的小说抓取到本地的 txt 文件中就好了,然后自己选个阅读器看.怎么整都看你了. 事实上上个程序我们已经完毕了大部分逻辑,我们接下来的修改仅仅须要把抓取到每一章的时候不用显示出来,而是存入 txt 文件之中.另外一个是程序是不断地依据下一页的 Url 进行抓取的,那么什么时候结束呢?注意当到达

23个Python爬虫开源项目代码:爬取微信、淘宝、豆瓣、知乎、微博等

来源:全球人工智能 作者:SFLYQ 今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.WechatSogou [1]– 微信公众号爬虫. 基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典. github地址:https://github.com/Chyroc/WechatSogou 2.DouBanSpider [2]– 豆瓣

23个Python爬虫开源项目代码

今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.WechatSogou [1]– 微信公众号爬虫. 基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典. github地址:https://github.com/Chyroc/WechatSogou 2.DouBanSpider [2]– 豆瓣读书爬虫. 可以爬下豆瓣读书标签下的所

32个Python爬虫项目让你一次吃到撑

整理了32个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典. DouBanSpider [2]- 豆瓣读书爬虫.可以爬下豆瓣读书标签下的所有图书,按评分排名依次存储,存储到Excel中,可方便大家筛选搜罗,比如筛选评价人数>1000的高分

Python爬虫学习路线,强烈建议收藏这十一条

(一)如何学习Python 学习Python大致可以分为以下几个阶段: 1.刚上手的时候肯定是先过一遍Python最基本的知识,比如说:变量.数据结构.语法等,基础过的很快,基本上1~2周时间就能过完了,我当时是在这儿看的基础:Python 简介 | 菜鸟教程 2.看完基础后,就是做一些小项目巩固基础,比方说:做一个终端计算器,如果实在找不到什么练手项目,可以在 Codecademy - learn to code, interactively, for free 上面进行练习. 如果时间充裕的

开始我的Python爬虫学习之路

因为工作需要经常收集一些数据,我就想通过学爬虫来实现自动化完成比较重复的任务. 目前我Python的状况,跟着敲了几个教程,也算是懂点基础,具体比较深入的知识,是打算从做项目中慢慢去了解学习. 我是觉得如果一开始就钻细节的话,是很容易受到打击而放弃的,做点小项目让自己获得点成就感路才更容易更有信心走下去. 反正遇到不懂的就多查多问就对了. 知乎上看了很多关于入门Python爬虫的问答,给自己总结出了大概的学习方向. 基础: HTML&CSS,JOSN,HTTP协议(这些要了解,不太需要精通) R