2w爬虫课程总结笔记

作者: 叫我老村长 | 来源:发表于2018-11-05 23:26 被阅读4次
about-BY-gentle.jpg

爬虫

模拟客户端发起网络请求,获取网络数据
只要客户端能够获取的数据,爬虫都能获取

获取流程:

1.确定目标网站,分析网址目标url

  1. 根据url发起请求,获取服务器返回的响应。
  2. 从响应中提取目标数据:
      a.提取目标数据
    b.提取新的url,执行第二步的循环
  3. 最终,所有的目标url访问完毕,查询结束

为什么使用python语言写我们的爬虫?

php 写多任务支持不好,多线程这块,所以不适合写爬虫,写后台不错
c/c++ 语言写爬虫,工作量比较大,需要重构,都是从底层去写,运行的效率高(仅次于汇编语言)。适用于写框架
java 可以写爬虫,python的最大竞争对手,java的生态圈比较完善,支持的库也很多,但是代码量特别大,重构的成本比较高。
python 代码简洁,语法优美,支持大量的三方模块,对多任务的支持也是友好的,并且有成熟的scrapy爬虫框架和scrapy-redis分布式爬虫框架。

七层协议

应用层:http
表示层:加密
会话层:会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话.
传输层:tcp/udp

URI(Uniform Resource Identifier):统一资源标识符
URL(Uniform / Universal Resource Locator的缩写):统一资源定位符,是用于完整地描述Internet上网页和其他资源的地址的一种标识方法。
URN(Universal Resource Name):统一资源名称,只命名资源而不指定如何定位资源

如何处理得到的响应结果

1.本地文件存储
2.csv文件操作
3.持久化(数据库,mysql)
结构化数据  ---> 拉钩  数据以json形式,层级嵌套
非机构数据 嵌套在网页上的

urllib模块

request

1.找url
2.分析url,构建强求request对象  -> req =request.Request()
3.根据构建的request对象发起请求   -> response=request.urlopen(req
1.get请求
2.post请求

cookiejar,存服务器返回来的cookies信息
MozillaCookieJar(cookies保存在本地)

requests

get
pose(拉钩网)
cookies
sesson

xpath

xpath(xml path language):是一门在xml文档中对元素和属性进行便利语言

Beatifulsoup

xpath解析效率比beatifulsouo 高   Beatifulsoup  --->  支持css选择器

任务 进程 线程

任务  --> 进程  --> 线程
并发:同时发起多个任务,但是任务是一个个交替执行的。
并行(多核):任务数量小于等于核心数量,这时候我们的所有任务相当于同时进行。

1.多任务
2.cpu如何处理任务的
3.并发 并行
4.实现多任务方式
1.多线程
#线程锁:
# 当我们创建多个线程取修改同意变量的时候,这时候可能会造成资源混乱

json

json.loads():将json字符串转为python数据类型。
dumps:将python的数据类型转化为json字符串
dump:将python的数据类型转换为json字段串,并保存在本地文件
load:将本地json文件中的json数据,转换为python数据类型

模拟登录+PhantomJS

1.导包
2.#创建一个浏览器驱动对象
3.访问网站driver.get('http://www.baidu.com/')
实例模拟登录(比如重写start_requests获取cookies)
1.from selenium import webdriver
2.创建一个浏览器的驱动
3.根据目标网址,打开页面
4.找到输入框
5.点击登录按钮,完成登录

模拟登录+验证码识别

1.from selenium import webdriver
from PythonHTTP.YDMHTTPUSE import get_yanzhengma_result  打码平台
2.创建一个浏览器的驱动
3.根据目标网址,打开页面
4.输入账号,密码
5.根据图片识别验证码
        filename = 'code_image.png'
        codetype = '3006'
        cid,result = get_yanzhengma_result(filename,codetype)

        print(result)
6.点击登录按钮

#手动解码 
图片二值化处理

scrapy爬虫项目创建

    1.创建项目
        scrapy startproject projectname
        进入spiders文件夹下
        选择是否能用通用爬虫,  ----> 因为多个页,分页如果在当前页面  -->  通用爬虫  --> 否则,不能
        建立普通爬虫
    2.创建爬虫文件
        最好域名设置对,防止以后忘记更改
        聚焦爬虫创建方法
            scrapy genspider qnw qunar.com
        通用爬虫创建方法:
            scrapy genspider -t crawl ziru ziroom.com

    3.打开工程,打开创建的项目.
    1.切换创建的虚拟环境 (或者每次创建一个新的虚拟环境)
    2.改setting 文件  
        1.ROBOTSTXT_OBEY = False
        2.DOWNLOAD_DELAY = 2
        3.COOKIES_ENABLED = False
        4.DEFAULT_REQUEST_HEADERS
        添加ua'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Mobile Safari/537.36',
        #可选方法
        #一般情况下,我们将数据库的配置信息,写在settings.py文件中
        注意:
                #自定义settings.py中的参数设置,
                #优先级比settings.py文件中设置的参数要高
    3.items.py 里面根据需求定义字段
        格式 : title = scrapy.Field()

    4.爬虫文件
    1.设置起始url 
        1.找前三页url分析其规律 也是为了构建下一页
        2.把第一页url设为起始url
            #可以设置多个url
                start_urls = ['https://tuan.qunar.com/vc/index.php?category=all&limit=0%2C30',
                    'https://tuan.qunar.com/vc/index.php?category=all_i&limit=0%2C30',
                    'https://tuan.qunar.com/vc/index.php?category=all_o&limit=0%2C30',
                    ]

        #可选
        ##自定义起始url回调方法:
        重写start_requests
            #def start_requests(self):
            # 使用场景:当你访问某个网站的时候,必须要登录之后,才可以获取数据
            # 这时我们需要要重写start_requests,在这个方法里面模拟登录,获取
            # coolies.
            #1.需要模拟登录
            2.打开github登录页面
            3.添加账号,密码
            4.点击登录按钮
            5.获取cookies
                cookies = driver.get_cookies()
                cookies_dict = {note['name']:note['value'] for note in cookies}
                print(cookies_dict)
                for url in self.start_urls:
                yield scrapy.Request(url=url,cookies=cookies_dict,dont_filter=True,callback=self.custome_parse)


    2. def 解析 parse(self, response)
    -->  提取详情链接  ---> 页面源码看是否能找到匹配的东西 --->找到或者找不到
    --->  找不到 -->  json  js  or  script加载格式  ....
    ---->  script加载格式  ---> re取匹配

    附加:
    执行二种方式
        1.scipy carwl name
        2.main
            1.创建main.py 
            import os,sys
            from scrapy.cmdline import execute
            #os.path.abspath(__file__)  --> 当前文件绝对路径 (找到main.py的路径)
            #再传到系统文件里面
            sys.path.append(os.path.dirname(os.path.abspath(__file__)))
            execute(['scrapy','crawl','quna'])

            2.右键  run main   or debug main


    5.管道
    可以自定义数据管道(注意激活管道)
    负责

    #可选方法
            1.close_spider  爬虫结束的时候调用
            2.open_spider   爬虫开启的时候调用

    数据持久化
            1.在item对应类中,定义一个方法,返回sql语句和要插入的数据。
            2.使用item调用这个方法,得到返回sql语句和要插入的数据。
            3.执行插入操作
                类方法
                @classmethod
                crawler   --->  包含了爬虫一些核心组件
                可以获取setting 中的一些参数
    图片下载
        1,正常发起请求,获取图片二进制文件,保存。
        2.自定义图片管道,继承ImagesPipeline
        重写二方法            

    6.Middleware
        #中间件以及反反爬:
        DOWNLOAD_DELAY = 2
        COOKIES_ENABLED = False
        DEFAULT_REQUEST_HEADERS = {
            'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
        }
        #中间件
        ip设置
        设置ua,手动设置
        cookies的设置:
        sessinum设置

通用爬虫创建与聚焦的程序写法区别

    # rules = (
    #       Rule(
    #           LinkExtractor           设置提取规则
    #           (allow= r'.*?p=\d+',   ---->  相反的 deny  
    #            #allowed_domains 要提取在这个域下  ------>  deny_allowed_domains(优先级高)
    #            restrict_xpaths=('//div[@class="pages"]'),    提取这个div块下的标签,  -->restrict_css
    #            ),
    #          callback='parse_data',   设置回调函数
    #          follow=True,             是否跟进

    #          process_links: 设置一个函数,根据正则提取的所有url都能在process_links回调函数中获取到--> 作用某些url进行拦截处理的时候用到
    #          process_request: 设置一个函数,根据正则提取的所有url都能在process_request中拦截到url构建的request对象.
    #       ),
    #       )



区别:
    Spider类的设计原则是只爬取start_url列表中的网页,而CrawlSpider类定义了一些规则Rule
    来提供跟进链接的方便的机制,从爬取的网页结果中获取链接并继续爬取的工作.

注意:
    注意:
    1.当编写爬虫规则时,避免使用parse作为回调函数。
    由于CrawlSpider使用parse方法来实现其逻辑,如果覆盖了 parse方法,
    crawl spider将会运行失败。

    2.要获取起始url的响应,必须重写parse_start_url
    3.在设置Rule对象的时候,没有callback回调函数的时候,默认表示跟进.


使用:
当我们提取数据的目标网站的网址很有规律,并且模块很清晰,我们可以使用通用爬虫.
(不同于聚焦,引擎)

暂停与恢复

scrapy crawl somespider -s JOBDIR=crawls/somespider-1

相关文章

  • 2w爬虫课程总结笔记

    爬虫 模拟客户端发起网络请求,获取网络数据只要客户端能够获取的数据,爬虫都能获取 获取流程: 1.确定目标网站,分...

  • 爬虫课程笔记

     听了老师的爬虫课,挺有收获。爬虫的原理很简单,本质上还是模拟浏览器发送HTTP请求。请求分请求头和请求体,请求头...

  • 2018年2月计划

    1. 课程学习,以及总结笔记 《关系课程》学习50节,总结笔记。 《中国史纲》学习50节,总结4篇笔记。 《pyt...

  • 11两套经典的用户画像

    课程笔记: 思考总结: 附课程概要脑图:

  • 爬虫课程笔记二

    第二次课程通过模拟登录微信,了解了轮询问和长轮询,通过多进程,多线程,协程等方式实现快速的爬虫。 轮询:我...

  • Scrapy爬虫——突破反爬虫最全策略解析

    有条件的请支持慕课实战正版课程,本blog仅仅是归纳总结,自用。 一、爬虫与反爬虫基本概念 误伤:由于学校、网吧等...

  • 吴恩达《机器学习》课程笔记

    吴恩达《机器学习》课程个人笔记 网易云课程地址 一些别人的课程总结和经验 九方先生个人学习笔记 蜉蝣个人学习笔记 ...

  • 爬虫学习笔记

    本篇笔记主要记录学习哔站up主:IT私塾的课程《Python爬虫基础5天速成(2021全新合集)Python入门+...

  • 爬虫的总结笔记

    本文主要是用来总结下目前学习的心得,其中有不正确的地方欢迎各位指出,同时因为许多代码是借用了网上的开源项目,我会在...

  • 爬虫脚本学习简单总结

    边学边模拟,来做个笔记总结一下,爬虫一般可分为三个步骤: 1. 访问url 获取数据 有的网页有反爬虫机制,在...

网友评论

    本文标题:2w爬虫课程总结笔记

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