首页 > 代码库 > Python 爬虫(1)简单介绍

Python 爬虫(1)简单介绍

Python上手很容易,免费开源,跨平台不受限制,面向对象,框架和库很丰富。

Python :Monty Python‘s Flying Circus (Python的名字来源,和蟒蛇其实无关)。

通过homebrew和pyenv可以维护多个Python版本。

相关知识

HTML

HTTP = HyperText Transfer Protocol

URI = Uniform Resource Identifier 强调资源

URL = Uniform Resource Locator 强调资源的位置

可以说url是一种具体的uri,uri是一个抽象的概念,即url标志一个uri,并指明了位置。

所谓web api,就是通过Http请求实现。

Head:向服务器索要与get请求相一致的相应,响应不会被返回。

GET:向特定资源发出请求。

PUT:向指定资源位置上传最新内容。

POST:向指定资源提交数据进行处理请求。

DELETE:删除指定URI所标识的资源。

PATCH:修改某一资源。 

基本上使用就是GET和POST。爬虫就是发送HTTP请求,进行处理。

HTTP常见状态码:

200/OK:请求成功

201/Created:请求被实现,新资源根据请求被建立。

202/Accepted:服务器已接受,但尚未处理。

400/Bad Request:请求无法被服务器理解。

401/Unauthorized:请求需要验证。用户密码错误这种。

403/Forbidden:服务器已理解,拒绝执行。

404/Not Found:找不到

HTML/XML/JSON

HTML,标记语言,不是编程语言。XML和HTML格式差不多的

<标签 属性 = "属性的值"> </标签>

DOM文档模型(BeautifulSoup处理很方便)

CSS  .(点)是类的引用,多个标签可以使用同一个class,一个标签上也可以用多个class。

         #是对应唯一的ID,强调个性化。

JSON,比xml简化,小,快,容易解析。

数据库:MySQl,SQLite,MongoDB,Redis,等等。

爬虫的简单介绍

工作流程:

将种子url放入队列,从队列中获取url,抓取内容,解析内容,将需进一步抓取的url放入工作队列,存储解析后的内容。

抓取策略:深度优先,广度优先,PageRank。

去重:Hash表,bloom过滤器。

Robots规范,网站通过Robots协议告诉搜索引擎哪些页面可以爬取,哪些不可以爬取。网站和爬虫的沟通方式,用来指导搜索引擎更好的爬取网站内容。

requests包要比urllib2要好用。

一个简单的例子:

# -*- coding: UTF-8 -*- 
import sys

reload(sys)
sys.setdefaultencoding(‘utf-8‘)
import requests
import threading


def display_info(code):
    url = ‘http://hq.sinajs.cn/list=‘ + code
    response = requests.get(url).text
    # js_info = response.read()
    print response


def single_thread(codes):
    for code in codes:
        code = code.strip()
        display_info(code)


def multi_thread(tasks):
    threads = [threading.Thread(target=single_thread, args=(codes,)) for codes in tasks]
    for t in threads:
        t.start()
    for t in threads:
        t.join()


if __name__ == ‘__main__‘:
    codes = [‘sh600001‘, ‘sh600002‘, ‘sh600003‘, ‘sh600004‘, ‘sh600005‘]
    thread_len = int(len(codes) / 4)  # 每个线程要处理几个股票
    t1 = codes[0:thread_len]
    t2 = codes[thread_len:thread_len * 2]
    t3 = codes[thread_len * 2:thread_len * 3]
    t4 = codes[thread_len * 3:]

    multi_thread([t1, t2, t3, t4])

  

 

Python 爬虫(1)简单介绍