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。
假设你暂停了一下。在继续监測可能就监測不了了,仅仅能重开火狐才又恢复,不知道什么原因。
python 爬虫1 開始,先拿新浪微博開始的更多相关文章
- Python爬虫学习笔记之爬取新浪微博
import requests from urllib.parse import urlencode from pyquery import PyQuery as pq from pymongo im ...
- [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)
转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...
- Python爬虫开源项目代码,爬取微信、淘宝、豆瓣、知乎、新浪微博、QQ、去哪网等 代码整理
作者:SFLYQ 今天为大家整理了32个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.WechatSogou [ ...
- python爬虫实战(六)--------新浪微博(爬取微博帐号所发内容,不爬取历史内容)
相关代码已经修改调试成功----2017-4-13 详情代码请移步我的github:https://github.com/pujinxiao/sina_spider 一.说明 1.目标网址:新浪微博 ...
- Python爬虫(一)
花了四天的时间用python写了个简单的爬虫程序.整个过程分为两个部分:工具的安装和程序的实现 本文并没有讲程序的详细实现遇到的问题,而是对着手前一些前期的准备 第一部分(工具的安装) 开发工具的下载 ...
- Python爬虫之路——简单网页抓图升级版(添加多线程支持)
转载自我的博客:http://www.mylonly.com/archives/1418.html 经过两个晚上的奋斗.将上一篇文章介绍的爬虫略微改进了下(Python爬虫之路--简单网页抓图),主要 ...
- python爬虫(一)_爬虫原理和数据抓取
本篇将开始介绍Python原理,更多内容请参考:Python学习指南 为什么要做爬虫 著名的革命家.思想家.政治家.战略家.社会改革的主要领导人物马云曾经在2015年提到由IT转到DT,何谓DT,DT ...
- 23个Python爬虫开源项目代码,让你一次学个够
今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.WechatSogou [1]– 微信公众号 ...
- 23个Python爬虫开源项目代码
今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.WechatSogou [1]– 微信公众号 ...
- 23个Python爬虫开源项目代码,包含微信、淘宝、豆瓣、知乎、微博等
今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心,所有链接指向GitHub,微信不能直接打开,老规矩,可以用电脑打开. 关注公众号「Pyth ...
随机推荐
- iOS学习笔记21-推送证书与秘钥申请
---恢复内容开始--- 一.iOS证书 iOS常用的证书包括开发证书和发布证书,无论是真机调试还是最终发布应用到App Store这两个证书都是必须的,它是iOS开发的基本证书.Xcode7以后真机 ...
- 刷题总结:最长公共字串(spoj1811)(后缀自动机)
题目: 就不贴了吧···如题: 题解: 后缀自动机模版题:没啥好说的···· 代码: #include<iostream> #include<cstdio> #include& ...
- 常州模拟赛d3t2 灰狼呼唤着同胞
题目背景 我的母亲柯蒂丽亚,是一个舞者.身披罗纱,一身异国装扮的她,来自灰狼的村子. 曾经在灰狼村子担任女侍的她,被认定在某晚犯下可怕的罪行之后,被赶出了村子. 一切的元凶,都要回到母亲犯下重罪的那一 ...
- Tree 树(树形期望dp)
题意也是需要解释一下的,这个期望步数,是需要求无限步的时候的,就是你只要能到达,都要算上去, 这个我一开始真的没什么思路,打了暴力,搞一个精度,结果全超时了,看来精度定的太细了. 出题人的题解是这个, ...
- Numpy 花式索引
记住:花式索引跟切片不一样,它总是将数据复制到新数组中. 一 给定一个列表,返回索引为1,3,4,5,6的数组 2 针对二维数组 需要注意的一点是,对于花式索引.对照下后面的两种方式,查询结果的不同.
- 史上最详细的linux关于connect: network is unreachable 问题的解决方案
1.虚拟机常用连接网络方式有两种:桥接和NAT. 使用桥接模式:则保证虚拟机的网段与物理机的网段保持一致.如下: 虚拟机网卡配置: 物理机使用WiFi接入网络(我用的是WiFi,你们可能用的是有线道理 ...
- 花匠(codevs 3289)
题目描述 Description 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希望剩下的花 ...
- LeetCode OJ--Search in Rotated Sorted Array
http://oj.leetcode.com/problems/search-in-rotated-sorted-array/ 转换了一次的有序数组,进行类似二分查找. 从begin到mid和从mid ...
- js动态适配移动端font-size,单位:rem
比如:目前我手中有一张psd图,大小为640*1010,适配苹果5的手机. 方法步骤: 1.我采用font-size=10px为640*1010手机的初始像素大小: 1rem=10px: 此时psd ...
- 【nodejs原理&源码赏析(3)】欣赏手术级的原型链加工艺术
目录 一. 概述 二. 原型链基础知识 三. Worker类的原型链加工 四. 实例的生成 五. 最后一个问题 六. 一些心得 示例代码托管在:http://www.github.com/dashno ...