转载自:http://blog.csdn.net/hk2291976/article/details/51154974

爬虫基本知识


本文目录

  • 爬虫基本知识
  • 本文目录
  • 写在开头
  • 如何爬
    • Requests
    • Requests安装
    • Requests使用
  • 如何提取
    • 正则表达式
    • python正则模块使用
    • XPath
      • XPath语法

写在开头

这阵子需要用爬虫做点事情,于是系统的学习了一下python爬虫,觉得还挺有意思的,比我想象中的能干更多的事情,这里记录下学习的经历。

网上有关爬虫的资料特别多,写的都挺复杂的,我这里不打算讲什么大道理,因为其实爬虫挺好理解的。就是下面一个流程:

网页网页源代码正则表达式需要的内容

爬虫的功能就是把网页源代码想办法爬下来,然后分析出需要的内容。总结起来就是2个部分: 
1. 爬 
2. 提取

所以,整个爬虫需要掌握的技能,就是如何高效的爬,如何快速的分析提取所需要的内容。

如何爬?

Requests

说实话,之前为了找爬虫的教程,走了挺多弯路的,因为现在很多教程刚上来就介绍urllib,urllib2这两个python自带的有关网页的包,所以刚开始我的单线程爬虫实现也都是基于urllib的,不仅代码多,而且效率还低。实际上,目前来说,这两个已经很过时了,目前用的比较多的是requests这个第三方包(这里我也是偶然间发现极客学院有关爬虫的视频,让我少走那么多弯路,这里我就不说是什么视频了,以免有广告的嫌疑,大家有兴趣的可以自己去搜)。 
正如requests的官方网页说的:

Requests: HTTP for Humans

它目前应该是python下最好的Http库了。它还有很多别的特性:

Requests 使用的是 urllib3,继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。

上面介绍的是单线程爬虫,然后,如果要提高爬的效率,并行化肯定必不可少,那么scrapy就可以解决你的问题。然后还有js动态加载的问题。那些我以后也会慢慢加上来。

Requests安装

pip install requests

所有的python第三方包的安装都可以用pip,如果cmd中无法输入pip命令,请把C:\Python27\Scripts加入PATH环境变量。

注:这里不推荐使用easy_install 因为这个只管安装,不管卸载。

Requests使用

基本知道一个requests.get()和requests.post()就行了。

同样它还有 
requests.head() 
requests.delete() 
功能,不过用的不多。需要的时候,查手册就好了。 
这里有个文档写requests写的挺全面的。可以看看:requests快速上手

requests的返回值可以有多种形式输出,最常用的是 
“.text”和”.content”,前者输出unicode,后者输出二进制

 import requests  url = 'http://www.baidu.com'html = requests.get(url)print html.text

输出:

<!DOCTYPE html><!--STATUS OK--><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=Edge"><meta content="always" name="referrer"><meta name="theme-color" content="#2932e1"><link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" /><link rel="search" type="application/opensearchdescription+xml" href="/content-search.xml" title="百度搜索" /><link rel="icon" sizes="any" mask href="//www.baidu.com/img/baidu.svg"><link rel="dns-prefetch" href="//s1.bdstatic.com"/><link rel="dns-prefetch" href="//t1.baidu.com"/><link rel="dns-prefetch" href="//t2.baidu.com"/><link rel="dns-prefetch" href="//t3.baidu.com"/><link rel="dns-prefetch" href="//t10.baidu.com"/><link rel="dns-prefetch" href="//t11.baidu.com"/><link rel="dns-prefetch" href="//t12.baidu.com"/><link rel="dns-prefetch" href="//b1.bdstatic.com"/><title>百度一下,你就知道</title>
……
3

如何提取?

正则表达式

正则表达式是一个大头!很多也都听过正则表达式,第一印象就是记不住,但是其实也不用特别记忆,因为在爬虫里,用的最多的基本就一个

(.*?)

( ) :表示这个内容是我们需要提取的 
.* :表示匹配任意字符0到n次 
?:表示非贪心,找对第一个就停下来

我来解释下为什么在爬虫里只要这个pattern就行了。 
在html网页源代码中,我们需要找的内容一般都是被某些标签包围的,如果我们能保证找到我们需要的内容左右的标签(并且他们是独一无二的)那么我们很容易写出一个正则表达式:

<XXX>(.*?)</XXX>

把其中的内容提取出来

python正则模块使用

python的正则模块是re,主要用的函数是(re.S的意思是让”.”可以匹配换行符,不然有些标签头和尾是分几行的,就会匹配失败)

findall(pattern,str,re.S)

主力部队,把所有满足正则的内容提取出来,用于匹配满足某个条件的大量我们需要的内容。(比如所有的图片,所有的网址,所有的回复,所有的链接……)。它在网页提取中占了主要地位,工作量大,任务重,所以是主力部队。

search(pattern,str,re.S)

狙击手,用来匹配第一个找到的元素,它的目标目的就是找到我们明显知道只有一个的元素比如标题什么的,一旦找到就结束,所以它的执行速度很快。它的目标明确,效率高,所以是狙击手的角色。

sub(pattern,str,replace)

后勤,它的功能是替换,一般用于替换一个网页地址中的关键词,替换页码等。它看似不重要,但是往往能在很多方面给我们提供便利,所以是后勤。

注意:正则有时候一步不能完成我们需要的功能,可能需要进行几步操作,这时候,我们一般先提取大的部分,在从大部分里面提取我们需要的部分

我们看个很简单的例子:

import re#假设下面是一个源码,我想保存里面所有的链接
text = '<a href = "www.baidu.com">....'
urls = re.findall('<a href = (.*?)>',text,re.S)
for each in urls:print each#假设我需要爬取当前网页的头部
html = '''
<html>
<title>爬虫的基本知识</title>
<body>
……
</body>
</html>
'''
print re.search('<title>(.*?)</title>',html,re.S).group(1)
#这里group(1)表示第一个括号的内容,如果正则里面有多个括号,这里可以通过group(i)返回第i个空格里的内容#假设下面是一个贴吧的帖子地址,有很多页,每一页就是靠后面的pn=几来区分的,我们输出前10页的网址
Pages = 'http://tieba.baidu.com/p/4342201077?pn=1'
for i in range(10): print re.sub('pn=\d','pn=%d'%i,P0"
爬虫的基本知识
http://tieba.baidu.com/p/4342201077?pn=0
http://tieba.baidu.com/p/4342201077?pn=1
http://tieba.baidu.com/p/4342201077?pn=2
http://tieba.baidu.com/p/4342201077?pn=3
http://tieba.baidu.com/p/4342201077?pn=4
http://tieba.baidu.com/p/4342201077?pn=5
http://tieba.baidu.com/p/4342201077?pn=6
http://tieba.baidu.com/p/4342201077?pn=7
http://tieba.baidu.com/p/4342201077?pn=8
http://tieba.baidu.com/p/content 1
content 2
content 3
Hello,        my        world!  

转载于:https://www.cnblogs.com/irichyoung/p/6096227.html

爬虫基本知识(转载)相关推荐

  1. java 网络爬虫 正则表达式_【干货】Java网络爬虫基础知识

    原标题:[干货]Java网络爬虫基础知识 引言 Java 网络爬虫具有很好的扩展性可伸缩性,其是目前搜索引擎开发的重要组成部分.例如,著名的网络爬虫工具 Nutch 便是采用 Java 开发,该工具以 ...

  2. 手把手带你入门Python爬虫(二、爬虫预备知识)

    爬虫预备知识 一.计算机网络协议基础 二.Html.Css.Javascript Ajax 异步加载 GET请求 与 POST请求 3种content-type 三.爬虫基本方法 1. 采集方案分类 ...

  3. python爬虫——基础知识

    python爬虫--基础知识 一.网页基础知识 二.爬虫的思路 1.HTML文档(超文本) 三.ROBOTS协议 四.浏览器发送HTTP请求的过程 1.http请求过程 2.请求 五.SSL连接错误 ...

  4. 爬虫、知识图谱和开源情报分析01

    爬虫.知识图谱和开源情报分析01 再开一个新坑,这个也是我学习和工作中一直非常感兴趣而且投入较多时间研究的一个领域.主要是想通过这个系列完成以下目标 1.梳理爬虫的实践方法 2.梳理知识图谱的实践方法 ...

  5. Python爬虫核心知识-第二章:2.2 爬虫urllib.parse模块

    Python爬虫核心知识 第二章:2.2 爬虫urllib.parse模块 2.2 爬虫urllib.parse模块 Python中的urllib.parse模块中,提供了很多用来解析和重组URL的函 ...

  6. Python爬虫核心知识-序章:课程前导-爬虫的相关法律法规

    Python爬虫核心知识 序章:课程前导-爬虫的相关法律法规 爬虫程序是一种技术产物,爬虫代码本身并未违反法律.但程序运行过程中有可能对他人经营的网站造成 破坏,爬取的数据有可能涉及隐私或机密,数据的 ...

  7. (二)python爬虫基础知识续

    爬虫基础知识二 爬虫应用 数据爬取(微指数) 搜索引擎 app或网页的资源来源 浏览器能做的事情,原则上爬虫都能完成 12306抢票(机器学习可以识别验证码,或者在不需要验证码的合作网站爬取)(微信和 ...

  8. 分布式网络爬虫关键技术分析与实现一网络爬虫相关知识介绍

    搜索引擎发展的历史过程与发展现状 1搜索引擎的发展的历史 1990年以前,没有任何人能搜索互联网.所有搜索引擎的祖先,是1990年由Montreal的McGill University学生Alan E ...

  9. python 静态网页_Python静态网页爬虫相关知识

    想要开发一个简单的Python爬虫案例,并在Python3以上的环境下运行,那么需要掌握哪些知识才能完成一个简单的Python爬虫呢? 爬虫的架构实现 爬虫包括调度器,管理器,解析器,下载器和输出器. ...

  10. 网页爬虫 html知识,python爬虫

    HTML基础 本节主要讲述HTML的基本概念.爬取网页首先要对网页有基本了解,入门网页知识可以访问 w3c school 学习 1. 页面组成 一个页面通常由css,js和html元素构成,其中css ...

最新文章

  1. SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可灰度)
  2. zcmu-1643 报数游戏
  3. SAP Spartacus category navigation按钮的差异
  4. Windows Terminal 新手入门
  5. 单片机备用电池供电电路_第五节(重排) 电子入门 复位电路
  6. map+DP leetcode446
  7. 大K提醒各位常备DOS杀毒盘
  8. 小程序二维码海报生成
  9. C#学习记录——C#项目开发实战:快递单打印精灵(一)
  10. Oracle排序查询语句
  11. 菜鸟教程的Linux命令大全
  12. 使用Adobe Acrobat DC将一个多页pdf拆分为多个固定页数的pdf
  13. 怎么样把自己计算机两个硬盘合并,两个硬盘怎么合并成一个盘
  14. xxljob默认登录_XXL-JOB快速入门
  15. 【汇正财经】扬帆起航,医美市场行业规模扩张
  16. 实用的一些网站 合集
  17. 机械制造工艺及计算机辅助工艺设计,《机械制造工艺及计算机辅助工艺设计》曾淑畅著【摘要 书评 在线阅读】-苏宁易购图书...
  18. Something went wrong while dowloading dependencies could not open caffe-builder-config.cmake
  19. 米家车载空气净化器拆解报告
  20. 龙光集团:“地王收割机”的近患与隐忧

热门文章

  1. CSDNamp;amp;《程序员》杂志创始人——蒋涛 推荐
  2. 3.7 Spark RDD编程
  3. PyTorch:tensor-数学API
  4. 【安装包】gcc编译器
  5. 【BZOJ4956】Secret Chamber at Mount Rushmore
  6. 6 python高级数据处理和可视化
  7. IDA pro 的Python环境变量设置
  8. 服务器保持与Mysql的连接
  9. 面试题——轻松搞定面试中的“虚
  10. 一个jQuery扩展工具包