Python专题教程：抓取网站，模拟登陆，抓取动态网页

版本：v1.0

Crifan Li

摘要

本文是针对Python的中级开发人员，介绍如何用Python语言去实现抓取网站，模拟登陆，抓取动态网页。其中主要涉及到，网络处理方面的模块（urllib，urllib2等），以及HTML解析相关的模块（BeautifulSoup，json等）。

[提示] 本文提供多种格式供：
在线阅读 | HTML | HTMLs | PDF | CHM | TXT | RTF | WEBHELP
下载（7zip压缩包） | HTML | HTMLs | PDF | CHM | TXT | RTF | WEBHELP

HTML版本的在线地址为：

http://www.crifan.com/files/doc/docbook/python_topic_web_scrape/release/html/python_topic_web_scrape.html

有任何意见，建议，提交bug等，都欢迎去讨论组发帖讨论：

http://www.crifan.com/bbs/categories/python_topic_web_scrape/

2013-02-06

修订历史
修订 1.0 2013-02-06 crl
  1. 把之前教程的地址整理过来

版权 © 2013 Crifan, http://crifan.com

本文章遵从：署名-非商业性使用 2.5 中国大陆(CC BY-NC 2.5)

目录

前言
1. 本文目的
2. 前提
1. 如何用Python实现网站抓取，模拟登陆，抓取动态网页
2. Python中的网络处理
3. Python中的HTMl解析
参考书目


前言

目录

1. 本文目的
2. 前提

1. 本文目的

本文目的在于，在已经了解了抓取网站，模拟登陆，抓取动态网页方面的逻辑后，如何用Python语言去实现这部分的逻辑。


2. 前提

讨论如何用Python去实现，网站抓取，模拟登陆，抓取动态网页的话，前提是你需要对这部分的逻辑已经比较清楚了。

如果不清楚，请先去参考：

详解抓取网站，模拟登陆，抓取动态网页的原理和实现（Python，C#等）


第 1 章 如何用Python实现网站抓取，模拟登陆，抓取动态网页

[提示] 相关旧帖

【教程】抓取网并提取网页中所需要的信息 之 Python版

【教程】模拟登陆网站 之 Python版（内含两种版本的完整的可运行的代码）

其实，对于urllib等库，已经做得够好了，尤其是易用性上，已经很方便使用了。

比如，直接可以通过如下代码，即可获得从网页的地址，而得到其网页的源代码了

TODO：add code

但是呢，由于实际上，和网页抓取，网页模拟登陆等方面，需要用到cookie，以及其他header参数，导致想要获得一个，功能强大且好用的，用于网络抓取方面的函数，则还是需要额外花很多功夫的

而我后来就是在折腾网络抓取方面，前前后后，经过实际使用而积累出来很多这方面的经验，最终，写了个相关的，功能更加强大一些，更加方便使用的函数的。主要是2个函数：

getUrlResponse和getUrlRespHtml

TODO：添加两个函数来自crifanLib的解释

TODO：再添加这两个函数的几种用法

TODO：再添加另外几个相关的函数的解释，包括downloadFile等函数

其实主要分两大方面：

一方面是把网站的内容抓取下来，涉及到和网络处理方面的模块

另外一方面是如何解析抓取下来的内容，即涉及到HTML解析等方面的模块

下面就来解释这两大方面相关的逻辑，以及如何用Python实现对应的这部分的功能。


第 2 章 Python中的网络处理

主要涉及的一些，和网络处理方面有关的模块是，urllib，urllib2等

[提示] 相关旧帖

【整理】Python中用于解析Http数据包的模块/库

【已解决】Python中使用cookielib的FileCookieJar去save()，结果出错：NotImplementedError

【整理】Python中Cookie的处理：自动处理Cookie，保存为Cookie文件，从文件载入Cookie

TODO：整理对应的，带urllib和urllib2方面的帖子进来。


第 3 章 Python中的HTMl解析

[提示] 相关旧帖

BeautifulSoup模块简介

【教程】Python中第三方的用于解析HTML的库：BeautifulSoup

【总结】Python的第三方库BeautifulSoup的使用心得

【整理】关于Python中的html处理库函数BeautifulSoup使用注意事项

【已解决】用BeautifulSoup解析Html格式的Json字符串

【经验记录】Python中json.loads的时候出错->要注意要解码的Json字符的编码

【已解决】Python中json.loads解析包含\n的字符串会出错

【已解决】Python中使用json.loads解码字符串时出错：ValueError: Expecting property name: line 1 column 1 (char 1)

【已解决】Python中用json.loads解码字符串出错：ValueError: No JSON object could be decoded

Python中和解析抓取的网站内容，即解析HTML，JSON等方面，相关的模块有，BeautifulSoup，json等


参考书目

[1] 【教程】抓取网并提取网页中所需要的信息 之 Python版