python爬虫——入门

2018-11-15  本文已影响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]

urllib库的基本使用

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

小案例

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

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)

上一篇下一篇

猜你喜欢

热点阅读