爬虫(一)——环境准备与入门

1. 什么是爬虫

网络爬虫,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
由于专门用于检索信息的“机器人”程序象蜘蛛一样在网络间爬来爬去,因此,搜索引擎的“机器人”程序就被称为“蜘蛛”程序。

2. python 开发环境搭建

上手容易
免费开源,使用不受限制
解释执行,跨平台不受限制
面向对象
框架和库支持丰富,有大量的历史积累

3. HTTP简介

HTTP = HyperText Transfer Protocol
URI = Uniform Resource Identifier
URL = Uniform Resource Locator
URI和URL的区别:URI强调的是资源,而URL强调的是资源的位置。
常用请求类型

  1. OPTIONS: 返回服务器针对特定资源所支持的http请求方法。
  2. HEAD: 向服务器索要与get请求相一致的响应,只不过响应体将不会被返回。(发送请求但是不返回响应)
  3. GET: 向特定资源发出请求
  4. PUT: 向指定资源位置上传其最新内容
  5. POST: 向指定资源提交数据进行处理请求
  6. DELETE: 请求服务器删除指定URI所标识的资源
  7. PATCH: 用来将局部修改应用于某一资源
    (get, post 用的比较多)

HTTP常见状态码

  1. 200/OK: 请求成功
  2. 201/Created: 请求已被实现,且一个新资源已根据请求被建立,URI跟随Location头信息返回。
  3. 202/Accepted: 服务器已接受请求,但尚未处理
  4. 400/Bad Request: 请求无法被服务器理解常见情况:格式错误
  5. 401/Unauthorized: 当前请求需要用户验证用户名,密码错误
  6. 403/Forbidden: 服务器已理解请求,但拒绝执行。没有权限等
  7. 404/Not Found

4. HTML/XML/Json简介

HTML (Hypertext Markup Language)

  1. 推荐教程:HTML
  2. HTML不是编程语言,而是一种标记语言。即HTML使用标记标签来描述网页。
  3. 标签和元素
<标签 属性=>"属性的值"</标签>
  1. DOM文档模型
    在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM
    就是一个大数组
文本<body>
	-段落1<p>...</p>
		-列表<ul>....</ul>
		-文本
		-图片<imgsrc..>...
	-段落2
  1. XML
    eXtensible Markup Language
ROOT
	-E1 (node)
		-G1
		-G1 ->属性/值
	-E2
	-E3
<node attr=value>...</node>	

XML 被设计用来传输和存储数据。
HTML 被设计用来显示数据。

在这里插入图片描述

  1. Json
    语法类似XML,但是更小、更快、更容易解析。对JavaScript特别友好。

5. MySQL/Apache安装和配置

MySQL

  1. Windows:
    下载免费社区版mysql server。
    客户端操作可以使用
    MySQLworkbench
  2. Linux(以debian为例):
    apt-get install mysql-server mysql-client
    登陆mysql: mysql -p hostname -u username -p,然后使用use dbname指定需要操作的数据库
    安装phpmyadmin方便在浏览器操作数据库
  3. SQLite
    本地数据库
    Windows直接去下载可执行文件即可使用,Linux下apt-get install sqlite3即可完成安装。
    相比mysql更加轻便好用。
    大数据情况下效率变差,适合单机小程序。
  4. MySQL常用命令
    show databases: 显示当前服务器上的数据库
    create database dbname: 创建一个新数据库
    use dbname: 使用指定的数据库
    show tables: 显示当前数据库的所有表
    desc tbname: 显示表结构

6. 爬虫框架介绍

  1. 爬虫工作流程
    将种子URL放入队列
    从队列中获取URL,抓取内容。
    解析抓取内容,将需要进一步抓取的URL放入工作队列,存储解析后的内容
  2. 抓取策略
    深度优先
    广度优先
    PageRank: 根据PR值对网站进行排序
    大站优先策略
  3. 如何去重
    Hash表
    bloom过滤器:实际商业大型应用使用bloom过滤器,优点:节省内存
  4. 爬虫质量标准
    -分布式:效率
    -可伸缩性
    -性能和有效性
    -质量
    -新鲜性
    -更新
    -可扩展性
    扯得远点
    -Map/Reduce背后
    -bloom过滤器

7. robots 规范和爬虫原则

  1. Robots规范
    Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。Robots协议的本质是网站和搜索引擎爬虫的沟通方式,用来指导搜索引擎更好地抓取网站内容,而不是作为搜索引擎之间互相限制和不正当竞争的工具。
    详情:http://baike.so.com/doc/4854891-5072162.html
import
import 
def get_province_entry(url):
    #todo
province = get_province_entry('httpp//.....')
import requests
import xml.etree.ElementTree as ET
from xml.parsers.expat import ParserCreate

class DefaultSaxHandler(object):
    def __init__(self, provinces):
        self.provinces = provinces

    # 处理标签开始
    def start_element(self, name, attrs):
        if name != 'map':
            name = attrs['title']
            number = attrs['href']
            self.provinces.append((name, number))

    # 处理标签结束
    def end_element(self, name):
        pass

    # 文本处理
    def char_data(self, text):
        pass
    
def get_province_entry(url):
    # 获取文本,并用gb2312解码
    content = requests.get(url).content.decode('gb2312')
    # 确定要查找字符串的开始结束位置,并用切片获取内容。
    start = content.find('<map name=\"map_86\" id=\"map_86\">')
    end = content.find('</map>')
    content = content[start:end + len('</map>')].strip()
    provinces = []
    # 生成Sax处理器
    handler = DefaultSaxHandler(provinces)
    # 初始化分析器
    parser = ParserCreate()
    parser.StartElementHandler = handler.start_element
    parser.EndElementHandler = handler.end_element
    parser.CharacterDataHandler = handler.char_data
    # 解析数据
    parser.Parse(content)
    # 结果字典为每一页的入口代码
    return provinces

provinces = get_province_entry('http://www.ip138.com/post')
print(provinces)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值