爬虫学习_爬虫学习路线 - CSDN
精华内容
参与话题
  • 从零开始的爬虫学习(一)

    千次阅读 2019-05-10 16:33:13
    本文介绍了爬虫的环境搭建,一个简单的图片爬取例子,最后介绍两个常见的小错误, AttributeError: ‘NoneType’ object has no attribute 'find “requests.exceptions.InvalidSchema: No connection adapters ...

    本文介绍了爬虫的环境搭建,一个简单的图片爬取例子,最后介绍两个常见的小错误,
    AttributeError: ‘NoneType’ object has no attribute 'find
    “requests.exceptions.InvalidSchema: No connection adapters were found for…”

    什么是爬虫?
    这是一篇解释的比较容易理解的博文。

    从零学习爬虫,逃不开安装环境

    完成安装环境,下一步就是安装常用的爬虫包了,这里提到主要是这两个包,request 和 BeautifulSoup (美味的汤)
    这两个包是比较常见的,也比较好用。

    import requests
    from bs4 import BeautifulSoup
    

    这两个包都可以在Pycharm中直接下载。

    File–>Setings–>Project Interpreter
    在这里插入图片描述
    点击加号,搜索添加包在这里插入图片描述
    这也是添加引用包的方法,当然手动添加也可以,这里就不说了。

    安装环境打好后就可以开始编程了。
    博主之前没有学过py,所以介绍的部分可能比较基础。
    废话少说,直接上代码。

    import requests
    from bs4 import BeautifulSoup
    import os
    import lxml
    import random
     
    url = "https://www.baidu.com/"
    
    r = requests.get(url)
    r.raise_for_status()
    
    bs = BeautifulSoup(r.text, 'lxml')
    image = bs.find("div", {"id": "lg"}).find("img")["src"]
    
    ir = requests.get("http:"+ image)
    if ir.status_code == 200:
        open('logo.jpg', 'wb').write(ir.content)
    
    

    本例实现的是从百度官网下载百度logo。
    主要用到了 request.get 函数和 BeautifulSoup.find 函数
    具体实现参照了这篇回答

    简单总结一下我的理解,URL是一种网络寻址的路径,用来定位资源,和网站网址类似。
    r = requests.get(url)
    get函数的具体结构可以参照这篇博文
    get函数模仿主机去点击网址的方式,给网站发送请求,并接收回应,get的返回值是网站反馈的Request对象。
    r.raise_for_status()是建议反馈的Request对象是否正常的工具,具体内容可以看这篇博文

    bs = BeautifulSoup(r.text, ‘lxml’)
    image = bs.find(“div”, {“id”: “lg”}).find(“img”)[“src”]
    这里讲BeautifulSoup实例化,因为是由get的返回值实例化的,调用find函数去返回的网页中找百度logo
    如果报错
    AttributeError: ‘NoneType’ object has no attribute 'find
    请检查find是否能找到具体目标src。
    在这里插入图片描述
    可以这样理解,find先去找 div类中 id=lg 的位置,在去找其中img下的src,将src给到image。

    ir = requests.get(“http:”+ image)
    因为 image中存放的是 //www.baidu.com/img/bd logo1.png
    我们要去访问他就需要补全网站 http://www.baidu.com/img/bd logo1.png。
    ir = requests.get(“http:”+ image)
    否则访问就会报错
    “requests.exceptions.InvalidSchema: No connection adapters were found for…”

    open(‘logo.jpg’, ‘wb’).write(ir.content)
    最后打开logo.jpg存放图片。

    到这基础爬取已经完成,下次将对具体的漫画网站进行爬取。

    展开全文
  • 要知道学好爬虫对工作大有裨益,可为今后入门大数据分析、挖掘、机器学习等领域提供重要的数据源,从而奠定一定的技术根基。 那么究竟爬虫是什么?首先来看看官方定义: 网络爬虫,是一种按照一定的规则,自动地...

    据不完全统计,世界上80%的爬虫都是基于Python开发的。Python简单易学,对编程初学者十分友好,而且具有丰富而强大的库,开发效率奇高,因此很多编程爱好者都对Python爬虫十分感兴趣。要知道学好爬虫对工作大有裨益,可为今后入门大数据分析、挖掘、机器学习等领域提供重要的数据源,从而奠定一定的技术根基。

    那么究竟爬虫是什么?首先来看看官方定义:

    网络爬虫,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫

    换做通俗易懂的话术解释就是:通过程序在web页面上获取和筛选我们自己想要的数据,为我们所有,也就是自动抓取数据方式或者功能实现。

    其实爬虫涉及的技术非常之广,包括但不仅限于熟练掌握Python一门编程语言,如: HTML知识、HTTP/HTTPS 协议的基本知识、正则表达式、数据库知识,常用抓包工具的使用、爬虫框架的使用、涉及到大规模爬虫,还需要了解分布式的概念、消息队列、常用的数据结构和算法、缓存,甚至还包括机器学习的应用,大规模的系统背后都是靠很多技术来支撑的。爬虫其实只是获取数据的手段,深入分析、挖掘这些数据才能收获更多的价值。

    用Python写爬虫,首先需要会Python,把基础语法搞懂,知道怎么使用函数、类和常用的数据结构如list、dict中的常用方法就算基本入门。作为入门爬虫来说,需要了解 HTTP协议的基本原理,虽然 HTTP 规范用一本书都写不完,但深入的内容可以放以后慢慢去看,理论与实践相结合后期学习才会越来越轻松。关于Python爬虫需要学习哪些知识,为了方便大家学习,小编特意整理了一张Python爬虫学习线路图,希望对大家的学习能有一定的借鉴意义。(含配套学习视频教程~)

     

    视频教程传送门:

    Python爬虫从入门到高级实战视频教程:https://pan.baidu.com/s/1bRUqsxozqe-yk1ZguyoCwg

     

     

    展开全文
  • 学习爬虫总结(一)

    千次阅读 2018-09-28 12:39:15
    爬虫这个名词第一次出现在我的印象中是学习中国大学MOOC里面的python语言程序设计慕课,那时候我对爬虫并不了解,也没有学习的兴趣。最近在看一些有关信息安全的书,发现网上的数据对我们来说很重要,于是对爬虫产生...

          作为一名大三狗,以前的两年似乎也没有坚持学习什么。现在我决定我要每天坚持学一点东西,来提升自己。爬虫这个名词第一次出现在我的印象中是学习中国大学MOOC里面的python语言程序设计慕课,那时候我对爬虫并不了解,也没有学习的兴趣。最近在看一些有关信息安全的书,发现网上的数据对我们来说很重要,于是对爬虫产生了一定的兴趣。希望我可以一直坚持下去。

           网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。通俗一点说就是爬取某个网站上的你想要的某些数据,然后保存起来。

          爬虫主要使用的是java和python语言,java语言是Python语言写爬虫的最大竞争对手。Python与java相比有很多优点,利用python写爬虫程序比较简洁,高效。python含有第三方urllib库,一个最基本的网络请求库,是用来写爬虫的好工具。学习用Python语言爬虫必须要对python的基本语法规则要有一定的了解。我在大一寒假的时候学习过python语言的一些基本语法知识,当时还照着书做过一个用python语言写的游戏。差不多都一年半没碰过python语言,我在图书馆找了一本《一天学会python》的书,用了两个多小时看完了,对Python语言的一些基本语法规则及使用更加熟悉了。然后我就开始了我的爬虫之旅。

    开始爬虫之前有些基础知识必须知道,这些知识是爬虫必须知道的基础知识:

    1、http协议:超文本传输协议,一种发布和接收HTML页面的方法,80端口,浏览器一般默认的都是80端口

    2、https协议:http协议的加密版本,在http下加入ssl层,443端口

    3、URL详解:统一资源定位符(就是浏览器上方的网址)一个URL一般由以下几个部分组成:

    scheme://host:port/path/?query-sting=xxx#anchor

    scheme:协议一般为http、https、ftp

    host:主机名或者域名例如www.baidu.com或者IP地址,域名是IP地址的简称

    port:端口号,浏览器一般默认80端口

    path:查找路径

    query-sting=xxx:查询字符串例如wd=python

    anchor:锚点,前端用来做页面定位

    在浏览器中请求一个URL,浏览器会对URL进行一个编码,除英文,数字和部分符号外,其他的全部使用百分号+十六进制码值进行编码。在urllib库里面有urlencode()函数对中文,符号进行编码,parse_qs()函数对中文、符号进行解码。

    4、http常用请求方法:

    post:向服务器发送数据、上传数据,对服务器产生影响

    get:只能从服务器获取数据,不会对服务器产生影响

    http请求方法详解

    5、http协议常见响应状态码

    200: 请求正常,服务器正常返回(数据不一定正确)

    301:永久重定向

    302:临时重定向

    400:请求的URL找不到,URL错误

    403:服务器拒绝访问

    404:not found

    500:内部服务器错误

    更多http协议状态码

    6、http协议请求头常见参数

    在http协议中向服务器发送一个请求数据分为三部分,第一部分把数据放在url中,第二部分把数据放在body中,第三部分把数据放到head中。

    user-agent:浏览器名称

    referer:表明当前这个请求从哪个url过来

    cookie:http协议是无状态的

    7、爬虫协议

    用爬虫爬取网站,需要听取网站的爬虫协议,有的可以爬,有的不能爬。在网站的域名后面加上robots.txt。如果出现404,可以随心所欲爬取。

    user-agent:* 这个字段的意思是允许哪个引擎的爬虫获取数据,*代表所有类型的爬虫都可以

    disallow:/admin/ 这个字段代表爬虫不允许爬那个路径下面的数据,如果是/的话,就代表所有路径下面的数据都不能爬

    展开全文
  • Python爬虫初步个人学习及心得

    万次阅读 多人点赞 2018-02-28 20:11:34
    但是毕设的东西非常的浅显,个人觉得最值得训练的还是Python的爬虫,谨以此开篇,作为学习和练习Python的起步。——————————学习分割线————————————第一次学习的是Python爬取图片信息。网上有很...

    自从毕设开始搞了Python之后就觉得这个东西值得研究。

    但是毕设的东西非常的浅显,个人觉得最值得训练的还是Python的爬虫,谨以此开篇,作为学习和练习Python的起步。

    ——————————学习分割线————————————

    第一次学习的是Python爬取图片信息。

    网上有很多很多关于这一类东西的教程,我也仅仅是可以实现,并且停留在一知半解的程度,在代码过程中添加了很多对Python的新的理解,对编程这个大集合的更深层的理解。

    网上的任何东西都可以看成资源,一个网站可能就是一段html+css,一张图片可能就是某个地址下的XXX.jpg文件,无数的网络资源存放在互联网上,人们通过地址(URL,统一资源定位符)来访问这些资源,大致过程如下:

    用户在浏览器中输入访问地址,浏览器向服务器发送HTTP(或者HTTPS)请求(其中请求资源常用get请求,提交数据常用post请求,post也可做数据请求)。服务器接收到了这些请求之后找到对应的资源返回给浏览器,再经过浏览器的解析,最终呈现在用户面前。

    这就是用户上网的一个简单的过程。那么,如果我们需要大量的从网上请求数据,依靠人工一个个得机械操作显然是不现实的,这时候爬虫就起作用了。

    一开始先要搞清楚什么是爬虫。

    其实本质上来说爬虫就是一段程序代码。任何程序语言都可以做爬虫,只是繁简程度不同而已。从定义上来说,爬虫就是模拟用户自动浏览并且保存网络数据的程序,当然,大部分的爬虫都是爬取网页信息(文本,图片,媒体流)。但是人家维护网站的人也不是傻的,大量的用户访问请求可以视为对服务器的攻击,这时候就要采取一些反爬机制来及时阻止人们的不知道是善意的还是恶意的大量访问请求(当然了= =不这样人家服务器吃枣爆炸)。

    网站爬取过程中我们会碰到以下几种情况:

    1.直接加载资源无处理

    2.使用ajax异步加载

    3.带参数验证的加载

    4.cookie验证

    5.登录验证

    6.js加密

    第一种无需解释,第二种是用户访问过程中异步向服务器发送请求会给筛选爬取数据增加难度,第三种是参数验证例例如时间戳,ip等,第四种是追踪验证用户的本地数据,第五种是身份验证,第六种是加载后对数据进行加密操作增加爬取难度。

    本次学习只处理到第三层,带参数验证的网站加载。

    学习时爬取的是这个网站(如有打扰,十分抱歉)http://tu.duowan.com/m/bizhi


    先对这个网站进行分析。大部分都是套图,有一张图作为封面,并且,点击进入图片之后,有一个显示第一张图片的链接。


    那么我们第一步可以在主界面的html代码中抽取出这些套图起始的链接地址,这里显然需要用到正则来提取这些不同地址。

    那么,有了每个套图的起始地址之后,我们进入到子页面,刷新网页,观察它的加载流程。

    这里我们可以观察到,仅仅是一张图片的加载就进行了如此多的工作,这个网站相对来说还是很复杂的(以后会放上一些相对来说不复杂的网页对比非常明显)


    这里我们点击XHR,会发现chrome自动为我们筛选出了一个XHR对象,这是其使用ajax技术的证明,点击之后我们发现里边带的json数据跟我们想要的套图信息其实是一致的


    随意点开一个发现里边的信息都是键值对的形式存在着,这里我们发现source一栏,选定该地址新建标签访问



    这就是这张图片在网络上的地址(URL,统一资源定位符)

    至此分析全部结束。

    我们需要理清楚我们到底要做什么。

    1.抓取主页面HTML代码,筛选出所有的套图链接

    2.从套图页面中获取json,从信息中获取该套图的全部URL

    3.根据URL下载图片到本地

    4.重复2,3


    下面挂上一个学习使用的代码

    import json
    import os
    import re
    import time
    import requests
    import pymysql
    
    def strip(path):
        path = re.sub(r'[?\\*|"<>:/]', '', str(path))
        return path
    
    # 爬虫类
    class Spider:
        #初始化函数
        def __init__(self):
            self.session = requests.session()
    
        # 下载图片
        def download(self, url):
            try:
                return self.session.get(url)
            except Exception as e:
                print(e)
    
        # 从start_url开始获取全部的套图入口,并逐个获取套图信息,最终保存图片
        def run(self, start_url):
            #获取全部的套图入口id
            img_ids = self.get_img_ids(start_url)
            print(img_ids)
            #并逐个获取套图信息,最终保存图片
            for img_id in img_ids:
                #获取套图json信息
                img_item_info = self.get_img_item_info(img_id)
                print(img_item_info)
                self.save_img(img_item_info)
                #exit()#仅循环一次
    
        # 下载html代码,并从中筛选出套图入口id,返回套图id列表
        def get_img_ids(self, start_url):
            response = self.download(start_url)
            if response:
                html = response.text
                #正则仍然有待学习
                ids = re.findall(r'http://tu.duowan.com/gallery/(\d+).html', html)
                return ids
    
        # 为了拿到json数据,我们观察文件中存在两个数字,一个是套图入口id我们已知,另一个是时间戳,可以仿制
        def get_img_item_info(self, img_id):
            # http://tu.duowan.com/index.php?r=show/getByGallery/&gid=125658&_=1519643852451
            img_item_url = "http://tu.duowan.com/index.php?r=show/getByGallery/&gid={}&_={}".format(img_id,
                                                                                                    int(time.time() * 1000))
            #下载后解析得到可用的json数据
            response = self.download(img_item_url)
            if response:
                return json.loads(response.text)
    
        # 套图信息持久化
        def save_img(self,img_item_info):
            #以套图标题创建文件夹保存套图
            dir_name = img_item_info['gallery_title']
            #字符串剪切去掉无法做文件夹的字符串
            strip(dir_name)
            print(dir_name)
            #创建文件夹
            if not os.path.exists(dir_name):
                os.makedirs(dir_name)
            #获取图片名,图片url,图片后缀,保存图片路径等
            for img_info in img_item_info['picInfo']:
                img_name = img_info['title']
                strip(img_name)
                img_url = img_info['url']
                pix = (img_url.split('/')[-1]).split('.')[-1]
                img_path = os.path.join(dir_name, "{}.{}".format(img_name, pix))#此处路径拼接避免出现字符串问题
                print(dir_name,img_name,img_path)
                #保存图片至本地
                if not os.path.exists(img_path):
                    response = self.download(img_url)
                    if response:
                        print(img_url)
                        img_data = response.content
                        with open(img_path, 'wb') as f:
                            f.write(img_data)
                #在本地数据库中插入记录
                db = pymysql.connect("localhost", "root", "123456", "python", use_unicode=True,
                                     charset="utf8");  # 此处会出现编码问题
                cursor = db.cursor()
                try:
                    sql = "INSERT INTO img (dir_name,img_title,img_path) VALUE (%s,%s,%s);"  # 此处写法可以避免转义问题
                    cursor.execute(sql, (dir_name, img_name, img_path))
                    db.commit()
                except Exception as e:
                    print(e)
                    db.rollback()
                db.close()
    
    
    if __name__ == '__main__':
    
        spider = Spider()
        spider.run('http://tu.duowan.com/m/bizhi')
        #spider.download('http://tu.duowan.com/gallery')
    

    代码仅供学习参考使用,也是给自己起一个回顾的作用。

    代码中仍然存在缺陷,例如数据库开关操作过多等,以后的优化后期再做处理。

    时常提醒自己多多练习Python。


    展开全文
  • 爬虫微课5小时 Python学习路线

    万人学习 2020-01-13 11:05:39
    Python爬虫技术视频教程,该课程每堂课都有一个作业,包含的项目案例有家长帮142600条数据爬取与分析,全球天气数据抓取与分析,淘宝商品信息数据众数分析,12306余票查询,python软件打包exe与发布。学完此课程能让...
  • 快速学习爬虫

    2019-03-08 16:13:25
    快速学习爬虫爬虫简介爬虫快速入门12306快速爬取信息 爬虫简介 网络爬虫(英语:web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人。其目的一般为编纂网络索引。 爬虫快速入门 学习...
  • 爬虫学习

    2019-01-24 11:11:32
     网络爬虫介绍 网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本    什么是网络爬虫 在大数据时代,信息的采集是一项重要的工作,而互联网中的数据是海量的,如果单纯靠...
  • 爬虫学习过程

    2019-04-09 16:29:46
    请求的4个部分: 请求方法,请求的网址,请求头,请求体 1. 请求方法 2.请求头 请求头包含的信息是服务器需要知道的信息,比较重要的包括: ...Host:指明请求资源的服务器的ip地址和端口号。...
  • 爬虫学习之路

    2019-08-08 17:33:01
    爬虫学习之路爬虫前奏爬虫前奏1爬虫1爬虫2-正则表达式爬虫3-json文件爬虫4-scrapy框架架构 爬虫前奏 爬虫前奏1 [1] https://download.csdn.net/download/qq_36993547/10952448 包括一些爬虫的代码,慢慢都会上传的 ...
  • 现行环境下 大数据与人工智能的重要依托还是庞大的数据和分析采集,类似于... 学习Python基础知识并实现基本的爬虫过程一般获取数据的过程都是按照 发送请求-获得页面反馈-解析并且存储数据 这三个流程来实现的。这...
  •  网络爬虫又称网络蜘蛛、网络蚂蚁、网络机器人等,可以自动化浏览网络中的信息,当然浏览信息的时候需要按照我们制定的规则进行,这些规则我们称之为网络爬虫算法。使用Python可以很方便地编写出爬虫程序,进行...
  • java jsoup 网络爬虫 jsoup解析html

    万次阅读 2019-12-16 12:12:38
    java jsoup 网络爬虫 java jsoup 网络爬虫 学习例子(一)抓取豆瓣电影名称+推荐星级 java jsoup 网络爬虫 学习例子(二)只抓取豆瓣电影5星(力荐)电影名称 java jsoup 网络爬虫 学习例子(三)抓取豆瓣电影...
  • 导读 爬虫现在越来越火,随之带来的就是一大波的就业岗位,随之越来越多的人转行学习Python,其中不缺乏Java等语言程序员,难道,爬虫在未来会狠狠的压住其他语言,而一直蝉联冠军吗?什么是爬虫?说起爬虫,很多...
  • 无论是从入门级选手到专业级选手都在做的爬虫,还是Web 程序开发、桌面程序开发,又或者是科学计算、图像处理,Python编程都可以胜任。或许是因为这种属性,周围好多小伙伴都开始学习Python。Python爬虫可以自学吗,...
  • Python爬虫教程-00-写在前面

    万次阅读 多人点赞 2018-09-15 12:11:13
    鉴于好多人想学Python爬虫,缺没有简单易学的教程,我将在CSDN和大家分享Python爬虫学习笔记,不定期更新 基础要求 Python 基础知识 Python 的基础知识,大家可以去菜鸟教程进行学习 菜鸟教程python基础 ...
  • Python爬虫(一):编写简单爬虫之新手入门

    万次阅读 多人点赞 2019-07-31 09:34:35
    最近学习了一下python的基础知识,大家一般对“爬虫”这个词,一听就比较熟悉,都知道是爬一些网站上的数据,然后做一些操作整理,得到人们想要的数据,但是怎么写一个爬虫程序代码呢?相信很多人是不会的,今天写一...
  • 关于Python爬虫的书籍推荐

    万次阅读 2016-05-18 15:53:41
    近年来,随着网络不断的发展,网络信息量也变得更多更大,基于传统搜索引擎的局限性,网络爬虫应运而生,在这里,我们向各位读者们推荐几本关于学习Python爬虫的书籍。 根据小编的经验,小编向大家推荐以下书籍: ...
  • python爬虫学习系列

    万次阅读 多人点赞 2018-12-03 09:15:10
    Python爬虫(1):基本原理Python爬虫(2):Requests的基本用法Python爬虫(3):Requests的高级用法Python爬虫(4):Beautiful Soup的常用方法Python爬虫(5):豆瓣读书练手爬虫Python爬虫(6):煎蛋网全站妹子图爬虫Python爬虫(7...
  • python爬虫教程大全

    万次阅读 多人点赞 2013-10-14 12:47:20
    关于python爬虫这方面知识,在网络上有一些教程、文章,很有价值,能够带领新手快速入门。在这里我把自己学习时找到的一些教程列出来,与大家一起分享,欢迎补充! 爬虫 《一只小爬虫》 《一只并发的小爬虫》 ...
  • 想用Python做爬虫,而你却还不会Python的话,那么这些入门基础知识必不可少。...但是却完全不知道从何开始,很迷茫,学的也很杂,下面就跟着小编一起来看看想用python来做爬虫到底需要学习哪些知识吧!
1 2 3 4 5 ... 20
收藏数 95,864
精华内容 38,345
关键字:

爬虫学习