美文网首页
python爬虫——入门

python爬虫——入门

作者: 沉吟不语 | 来源:发表于2018-11-15 19:41 被阅读23次

    什么是爬虫?

    网络爬虫: (又被称为网页蜘蛛,网络机器人), 是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。通俗的讲: 就是模拟客户端发起网络请求,接收请求的响应,按照一定的规则,自动的抓取互联网信息的程序。原则上只要浏览器能够做的事情,爬虫都能够实现

    爬虫的用途

    • 搜索引擎
    • 咨询新闻网站
    • 购物助手(慧慧购物)
    • 数据分析与研究积累原始数据资源
    • 抢票软件等

    爬虫的分类:通用爬虫,聚焦爬虫

    通用爬虫:一般情况下使用于搜索引擎,其实也是通过爬虫取获取全互联网的网页,需要在本地进行镜像的备份。是搜索引擎的重要组成部分,尽可能全的爬虫全网的数据,
    将获取的页面数据进行本地存储,将获取的数据进行处理(关键词的提取,分词,去广告等)最终将根据用户检索信息,将数据返回给用户

    聚焦爬虫:有目的性的获取网页的数据,(面向特定主题的需求)这样会避免获取了大量的无用数据,提高我们获取数据的效率

    写一个爬虫具备什么知识?

    1.会基本的python基础知识
    2.会一些前段知识
    3.会一些后端知识
    4.会一些数据的存储知识
    5.会爬虫知识

    为什么用python语言写爬虫?

    php:也叫作世界上最好的语言,但是天生不是干爬虫的,对于多任务的支持不太好
    java:可以用来写爬虫,并且是python的最大竞争对手,java生态圈比较完善,支持的三方库也很多,但是java代码量非常大,重构的成本很高
    c/c++:运行效率高,仅次于汇编语言,但是学习的成本很高,很多底层需要自己写
    python:代码简洁,语法优美,支持大量的三方模块,对多任务的支持比较友好,并且有成熟的scrapy爬虫框架和scrapy-redis分布式爬虫框架.

    如何完成一个爬虫项目:

    1.分析需求,确定目标url(数据源)
    2.模拟浏览器,根据url发起请求,获取服务器返回的响应
    3.拿到响应结果,提取目标数据
    a.将目标数据持久化(文件,数据库)
    b.获取当前网页下新的url,执行第二步
    4.爬虫结束:直到没有新的url产生,并且带爬虫的url任务全部爬取完毕。

    ISO七层协议: TCP/IP
    物理层 ------------ 应用层
    网络层 ------------ 传输层
    传输层 (tcp,udp) ------------ 网络层
    会话层 ------------ 物理层
    应用层 (http与https)
    数据连接层
    表示层

    tcp:都是传输数据的,长连接,传输的是数据流,安全,稳定 缺点:传输数据慢
    udp:传输数据的,短连接,传输的是数据包,快,高效 缺点:不稳定,不安全

    http:(超文本传输协议),用于从网络传输超文本数据到客户端。客服端拿到数据后,展示数据
    https:功能与http一致,但是多了一个ssl层(安全套接字层),从而能够实现以下两个作用
    1.能够实现数据的安全传输,提供一个安全通道
    2.能够确定网站的真实性和有效性

    http协议的端口号:80
    https协议的端口号:443

    url uri urn
    URI(Uniform Resource Identifier):统一资源标识符

    URL(Uniform / Universal Resource Locator的缩写):统一资源定位符,
    是用于完整地描述Internet上网页和其他资源的地址的一种标识方法。

    URN(Universal Resource Name):统一资源名称,只命名资源而不指定如何定位资源
    那三者之间有什么关系呢? URI是URL与URN的父类,URN用的很少,我们一般会提到URI和URL,
    每一个URL都是一个URI,但是并不是每一个URI都是一个URL.

    URL组成部分

    基本格式:scheme://host[:port#]/path/…/[?query-string][#anchor]

    • scheme:协议(例如:http, https, ftp)
    • host:服务器的IP地址或者域名
    • port#:服务器的端口(如果是走协议默认端口,缺省端口80)
    • path:访问资源的路径
    • query-string:参数,发送给http服务器的数据
    • anchor:锚(跳转到网页的指定锚点位置)

    urllib库的基本使用

    所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。 在Python中有很多库可以用来抓取网页,我们先学习urllib。
    我们会从下面三个方面讲解urllib:

    • request: 它是最基本的HTTP请求模块,可以用来模拟发送请求,就像在浏览器中输入网址,然后敲击回车键一样,使用的时候只需要给库方法传入相关的URL和相关的参数即可.
    • error: 异常处理模块,如果出现请求错误,我们可以使用这个模块来捕获异常,然后进行重试或者其他操作,保证程序不会意外终止.
    • parse: 这是一个工具模块,提供了许多url的处理方法,比如拆分,解析,合并等等.

    小案例

    爬取百度贴吧中美女吧的页面源码

    from urllib import request
    from urllib.parse import urlencode
    def down_load_page_html(startPage,endPage,keyword):
        req_header = {
            'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 QQBrowser/4.4.108.400',
        }
        for i in range(startPage,endPage+1):
            print('正在下载第'+str(i)+'页,请稍等')
            parmas = {
                'wd':keyword,
                'pn':(i-1)*10,
            }
            parmas_str = urlencode(parmas)
            req_url = 'https://tieba.baidu.com/f?'+parmas_str
            req = request.Request(url=req_url,headers=req_header)
            response = request.urlopen(req)
            name = '第'+str(i)+'.html'
            html_str = response.read().decode('utf-8')
            with open(name,'w') as f:
                print('正在存入第' + str(i) + '页,请稍等')
                f.write(html_str)
    
    
    if __name__ == '__main__':
    
        startPage = int(input('输入起始页码'))
        endPage = int(input('输入终止页码'))
        keyword = '美女吧'
        down_load_page_html(startPage,endPage,keyword)
    
    

    相关文章

      网友评论

          本文标题:python爬虫——入门

          本文链接:https://www.haomeiwen.com/subject/abkufqtx.html