python 小爬虫的各种总结(二)

       要想做网络抓取方面的工作必须对HTTP协议里面的一些基础知识有个大概了解,最好能有些HTML的底子。首先来介绍下HTTP Header。我们在网页上点击一个按钮,或者请求一个网页都会向服务器发送一个请求头,然后服务器会发送一个响应头。这个Header对我们是不可见的,查看Header的方法有:Firefox的firebug、chrome的Inspect Element以及其他的一些抓包工具(比如wireshark(超级强大,但是对新手来说可能不太会用)、httpwatch(可以抓取IE的包))。由于Inspect Element是嵌入到chrome里面的(由于Firefox的启动速度---早已放弃),而且功能足够强大,我一般用它来查看HTTP的Header。在网页空白处右击即可看到Inspect Element 如图一所示:

               

                        图一

            

                  图二(选择network 并把 Preserve log 勾选上)

            

                               图三

  我们点击登录按钮就可以看到已经向服务器发送了一个Header Post了一些数据,Header里面的内容大部分一眼就能看懂(不懂的fork this http://en.wikipedia.org/wiki/List_of_HTTP_header_fields),这里主要说下 Referer 和 User-Agent,有些网站会检查这两个参数,以判断是否是恶意抓取,比如说抓取CSDN网站的文章的时候,如果没有发送这两个参数就会被服务器拒绝下载。同时可以看到请求的方法是POST,以及Status Code 是200,表示是正常响应(fork this http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html),我们在写程序的时候可以判断这个Status Code来确定是否是正常访问。

  接着往下翻可以看到我们向服务器POST的一些数据以及服务的响应头;我们查看登录界面的源代码(右键  view source)可以看到登录的界面的form 代码可能比较混乱,可以找一个在线格式化的格式一下,一般的代码编辑工具也行,一般都会带有代码格式化的功能。

            

                      图四

<form method="post" id="loginForm" class="login-form" action="http://www.renren.com/PLogin.do">
    <dl class="top clearfix">
        <dd>
            <input type="text" name="email" class="input-text" id="email" tabindex="1"
            value="" />
        </dd>
    </dl>
    <dl class="pwd clearfix">
        <dd>
            <input type="password" id="password" name="password" error="请输入密码" class="input-text"
            tabindex="2" autocomplete="off" />
            <label class="pwdtip" id="pwdTip" for="password">
                请输入密码
            </label>
            <a class="forgetPwd" id="forgetPwd" href="http://safe.renren.com/findPass.do"
            stats="home_findpassword">
                忘记密码?
            </a>
        </dd>
    </dl>
    <div class="caps-lock-tips" id="capsLockMessage" style="display:none">
    </div>
    <dl class="savepassword clearfix">
        <dt>
            <label title="为了确保您的信息安全,请不要在网吧或者公共机房勾选此项!" for="autoLogin" class="labelCheckbox">
                <input type="checkbox" name="autoLogin" id="autoLogin" value="true" tabindex="4"
                />
                下次自动登录
            </label>
        </dt>
        <dd>
            <span class="getpassword" id="getpassword">
                <a href="http://safe.renren.com/findPass.do" stats="home_findpassword">
                    忘记密码?
                </a>
            </span>
        </dd>
    </dl>
    <dl id="code" class="code clearfix">
        <dt>
            <label for="code">
                验证码:
            </label>
        </dt>
        <dd>
            <input id="icode" type="text" name="icode" class="input-text" tabindex="3"
            autocomplete="off" />
            <label class="codetip" id="codeTip" for="icode">
                请输入验证码
            </label>
        </dd>
    </dl>
    <dl id="codeimg" class="codeimg clearfix">
        <dt>
        </dt>
        <dd>
            <img id="verifyPic_login" src="http://icode.renren.com/getcode.do?t=web_login&rnd=Math.random()"
            />
        </dd>
        <a class="changeone" href="javascript:refreshCode_login();">
            换一个
        </a>
    </dl>
    <dl class="bottom">
        <input type="hidden" name="origURL" value="http://www.renren.com/home"
        />
        <input type="hidden" name="domain" value="renren.com" />
        <input type="hidden" name="key_id" value="1" />
        <input type="hidden" name="captcha_type" id="captcha_type" value="web_login"
        />
        <input type="submit" id="login" class="input-submit login-btn" stats="loginPage_login_button"
        value="登录" tabindex="5" />
    </dl>
</form>

通过源代码Form 表单里面的元素与POST给服务器的信息我们就可以知道,email就是我登录的用户名,autologin就是是否自动登录,其他的以此类推,可以看到密码已经是加密过的密码了(好多网站POST的都是明文数据),具体的加密算法不是我们此次讨论的重点(网上有相关的分析文章 自己谷歌)。

  从网页上得到的信息已经足够,接下来就是我们要怎么编程实现了。由于HTTP协议实际上是无状态的,我们只要向服务器发送刚才的一些数据,服务器就以为我们是对应的浏览器,我们的目的就达到了。

          

时间: 2024-10-29 02:41:22

python 小爬虫的各种总结(二)的相关文章

Python小爬虫-自动下载三亿文库文档

新手学python,写了一个抓取网页后自动下载文档的脚本,和大家分享. 首先我们打开三亿文库下载栏目的网址,比如专业资料(IT/计算机/互联网)http://3y.uu456.com/bl-197?od=1&pn=0,可以观察到,链接中pn=后面的数字就是对应的页码,所以一会我们会用iurl = 'http://3y.uu456.com/bl-197?od=1&pn=',后面加上页码来抓取网页. 一般网页会用1,2,3...不过机智的三亿文库用0,25,50...来表示,所以我们在拼接ur

Python小爬虫——抓取豆瓣电影Top250数据

写LeetCode太累了,偶尔练习一下Python,写个小爬虫玩一玩~ 确定URL格式 先找到豆瓣电影TOP250任意一页URL地址的格式,如第一页为:https://movie.douban.com/top250?start=0&filter=,分析该地址: https:// 代表资源传输协议使用https协议: movie.douban.com/top250 是豆瓣的二级域名,指向豆瓣服务器: /top250 是服务器的某个资源: start=0&filter= 是该URL的两个参数,

【现学现卖】python小爬虫

1.给小表弟汇总一个院校列表,想来想去可以写一个小爬虫爬下来方便些,所以就看了看怎么用python写,到了基本能用的程度,没有什么特别的技巧,大多都是百度搜的,遇事不决问百度啦 2.基本流程就是: 用request爬取一个页面之后用BeautifulSoup4对爬到的页面进行处理, 然后需要的东西进行预处理之后存到桌面上的.txt文件里, 之后再对.txt文件里的字符串进行分割, 最后把数据存到excel表里 3.准备:需要下载安装requests库,以及BeautifulSoup4的库,还有x

抓取百度贴吧python小爬虫 (2015最新版)

网上好多抓取贴吧的小爬虫都失效了,原因是百度贴吧的编码格式变了,或者是html代码变了,像这种简单的读取源代码的爬虫,只要网页源代码改变之后就得重新修改. 请诸位大牛指点. # -*- coding:utf8 -*- """ 程序就是读取网页的源代码,如果想获取相应的内容就找到其特定的格式,再利用正则表达式来获取. """ import string import urllib2 import re class html_Tool: #为了提取文

HTTP小爬虫 ,nodejs学习(二)

使用nodejs抓取网页数据,这里用到cheerio,解析html十分好用,和jquery用法完全一致. 首先安装cheerio,在命令行中输入 npm install cheerio;(在nodejs根目录下输入该命令) 安装完成以后,我们来解析慕课网上http://www.imooc.com/learn/348,获取其上的课程信息. 代码如下: var http = require('http'); var cheerio = require('cheerio'); var url = 'h

Python 小爬虫流程总结

接触Python3一个月了,在此分享一下知识点,也算是温故而知新了. 接触python之前是做前端的.一直希望接触面能深一点.因工作需求开始学python,几乎做的都是爬虫..第一个demo就是爬取X博数据,X博的API我在这就不吐槽了 .用过的估计都晓得. 好了 .下面进入正题,,一个小demo的开始与结束 . 1.首先对于像我一样0基础的,推荐几个网址: 廖雪峰的教程从安装到基本语法.模块安装等等基础都不简单易懂.这里就不赘述了 (1).http://www.liaoxuefeng.com/

python 小爬虫的各种总结(一)

python真是一门非常优秀的语言,非常适合初学者,也非常适合写一些原型程序.这篇文章总结了下以前做的各种和网络相关的东西:自动登录.提取信息.模拟点击.模拟上传.取号等等,多亏了python才使世界变得那么美好! 本次我们主要是模拟浏览器下载网页,学会了下载网页其他的下载图片什么的都是一样的套路.先上代码: #-*-coding:utf-8-*- ''' Created on 2014-3-4 @author: KL ''' import urllib2 import pyquery impo

Python网络爬虫与信息提取(二)—— BeautifulSoup

Boautiful Soup BeautifulSoup官方介绍: Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式. 官方网站:https://www.crummy.com/software/BeautifulSoup/ 1.安装 在"C:\Windows\System32"中找到"cmd.exe",使用管理员身份运行,在命令行中输入:"pip in

Python小爬虫练习

# coding: utf-8 __author__ = 'zhangcx' from urllib3 import PoolManager import codecs import json class myjob(object): def __init__(self): self._page = 1 self._totalPageCount = 0 self._first = True self._hasNextPage = True self._http = PoolManager() d